[cluttermm_tutorial] Fix some runtime errors.
- From: Murray Cumming <murrayc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [cluttermm_tutorial] Fix some runtime errors.
- Date: Thu, 2 Sep 2010 12:47:58 +0000 (UTC)
commit 48d32b98a9f6ae05a424e5fd6eee20aedd970d2f
Author: Murray Cumming <murrayc murrayc com>
Date: Thu Sep 2 14:47:52 2010 +0200
Fix some runtime errors.
* examples/full_example/main.cc: add_image_actors(): Avoid giving an
angle to ClutterBehaviourEllipse that is > 360, because that is not
allowed. This probably doesn't work properly now.
add_image_actors(): Avoid trying to load the images/README file as an image.
ChangeLog | 41 +++++++++++-------
INSTALL | 97 +++++++++++++++++++++++++++++++++-------
examples/full_example/main.cc | 43 +++++++++++++++---
3 files changed, 140 insertions(+), 41 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 16546f8..4f20301 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,28 +1,37 @@
+2010-09-02 Murray Cumming <murrayc murrayc com>
+
+ Fix some runtime errors.
+
+ * examples/full_example/main.cc: add_image_actors(): Avoid giving an
+ angle to ClutterBehaviourEllipse that is > 360, because that is not
+ allowed. This probably doesn't work properly now.
+ add_image_actors(): Avoid trying to load the images/README file as an image.
+
2010-04-06 Murray Cumming <murrayc murrayc com>
Mention Clutter::Text instead of the Clutter::Label and Clutter::Entry.
- * docs/tutorial/cluttermm-tut.xml: Actors: Mention Clutter::Text instead of
- the old Clutter::Label and Clutter::Entry actors. This is based on the
- same change in clutter-tutorial.
+ * docs/tutorial/cluttermm-tut.xml: Actors: Mention Clutter::Text instead of
+ the old Clutter::Label and Clutter::Entry actors. This is based on the
+ same change in clutter-tutorial.
2010-04-05 Murray Cumming <murrayc murrayc com>
Update links and mention clutterm--0.10.
-
- * docs/tutorial/cluttermm-tut.xml: Update the reference links to use
+
+ * docs/tutorial/cluttermm-tut.xml: Update the reference links to use
library.gnome.org and mention cluttermm-0.10 instead of cluttermm-0.9.
2010-04-05 Murray Cumming <murrayc murrayc com>
Update for the latest cluttermm and clutter-gtkmm.
-
+
* configure.ac: Check for clutter-gtkmm-1.0, not clutter-gtkmm-0.9.
- * examples/*/*.[h|cc]: Update for the latest API, based on the changes in
- the corresponding clutter-tutorial examples. This at least builds now
- though I have no idea if the code is correct. We should check more carefully
+ * examples/*/*.[h|cc]: Update for the latest API, based on the changes in
+ the corresponding clutter-tutorial examples. This at least builds now
+ though I have no idea if the code is correct. We should check more carefully
against the recent changes in the clutter tutorial.
- * docs/tutorial/cluttermm-tut.xml: Removed the multiline text editing
+ * docs/tutorial/cluttermm-tut.xml: Removed the multiline text editing
appendix, because regular cluttermm can now do this.
* docs/tutorial/figures/multiline_text_entry.png:
* examples/multiline_text_entry/: Removed these parts of the example.
@@ -77,27 +86,27 @@
2009-01-06 Murray Cumming <murrayc murrayc com>
- * docs/tutorial/cluttermm-tut.xml: Introduction: cluttermm: Correct a
- typo and mention that exceptions are optional (at glibmm configure time)
+ * docs/tutorial/cluttermm-tut.xml: Introduction: cluttermm: Correct a
+ typo and mention that exceptions are optional (at glibmm configure time)
for embedded developers who are scared of them.
2009-01-06 Murray Cumming <murrayc murrayc com>
- * docs/tutorial/cluttermm-tut.xml: Correct the base URLs for the
+ * docs/tutorial/cluttermm-tut.xml: Correct the base URLs for the
(not ideal) reference documentation for cluttermm and clutter-gtkmm.
- * examples/full_example/main.cc: Replaced some g_print()s with
+ * examples/full_example/main.cc: Replaced some g_print()s with
std::cout.
2009-01-06 Murray Cumming <murrayc murrayc com>
- * examples/: Mostly whitespace changes to be more like the gtkmm
+ * examples/: Mostly whitespace changes to be more like the gtkmm
examples.
2009-01-06 Murray Cumming <murrayc murrayc com>
* COPYING:
* INSTALL: Added these to svn.
- * Makefile.am: Correct the upload, which must be a little more complex
+ * Makefile.am: Correct the upload, which must be a little more complex
for the new non-recursive build structure.
2009-01-06 Daniel Elstner <danielk openismus com>
diff --git a/INSTALL b/INSTALL
index 2550dab..7d1c323 100644
--- a/INSTALL
+++ b/INSTALL
@@ -4,8 +4,10 @@ Installation Instructions
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
2006, 2007, 2008, 2009 Free Software Foundation, Inc.
- This file is free documentation; the Free Software Foundation gives
-unlimited permission to copy, distribute and modify it.
+ Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved. This file is offered as-is,
+without warranty of any kind.
Basic Installation
==================
@@ -13,7 +15,11 @@ Basic Installation
Briefly, the shell commands `./configure; make; make install' should
configure, build, and install this package. The following
more-detailed instructions are generic; see the `README' file for
-instructions specific to this package.
+instructions specific to this package. Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below. The lack of an optional feature in a given package is not
+necessarily a bug. More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
@@ -42,7 +48,7 @@ may remove or edit it.
you want to change it or regenerate `configure' using a newer version
of `autoconf'.
-The simplest way to compile this package is:
+ The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system.
@@ -53,12 +59,22 @@ The simplest way to compile this package is:
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
- the package.
+ the package, generally using the just-built uninstalled binaries.
4. Type `make install' to install the programs and any data files and
- documentation.
-
- 5. You can remove the program binaries and object files from the
+ documentation. When installing into a prefix owned by root, it is
+ recommended that the package be configured and built as a regular
+ user, and only the `make install' phase executed with root
+ privileges.
+
+ 5. Optionally, type `make installcheck' to repeat any self-tests, but
+ this time using the binaries in their final installed location.
+ This target does not install anything. Running this target as a
+ regular user, particularly if the prior `make install' required
+ root privileges, verifies that the installation completed
+ correctly.
+
+ 6. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
@@ -67,8 +83,15 @@ The simplest way to compile this package is:
all sorts of other programs in order to regenerate files that came
with the distribution.
- 6. Often, you can also type `make uninstall' to remove the installed
- files again.
+ 7. Often, you can also type `make uninstall' to remove the installed
+ files again. In practice, not all packages have tested that
+ uninstallation works correctly, even though it is required by the
+ GNU Coding Standards.
+
+ 8. Some packages, particularly those that use Automake, provide `make
+ distcheck', which can by used by developers to test that all other
+ targets like `make install' and `make uninstall' work correctly.
+ This target is generally not run by end users.
Compilers and Options
=====================
@@ -93,7 +116,8 @@ same time, by placing the object files for each architecture in their
own directory. To do this, you can use GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
+source code in the directory that `configure' is in and in `..'. This
+is known as a "VPATH" build.
With a non-GNU `make', it is safer to compile the package for one
architecture at a time in the source code directory. After you have
@@ -120,7 +144,8 @@ Installation Names
By default, `make install' installs the package's commands under
`/usr/local/bin', include files under `/usr/local/include', etc. You
can specify an installation prefix other than `/usr/local' by giving
-`configure' the option `--prefix=PREFIX'.
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
@@ -131,15 +156,46 @@ Documentation and other data files still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
+you can set and what kinds of files go in them. In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+ The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+ The first method involves providing an override variable for each
+affected directory. For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'. Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated. The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+ The second method involves providing the `DESTDIR' variable. For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names. The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters. On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-Optional Features
-=================
-
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
@@ -152,6 +208,13 @@ find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
+ Some packages offer the ability to configure how verbose the
+execution of `make' will be. For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
Particular systems
==================
@@ -288,7 +351,7 @@ operates.
`configure' can determine that directory automatically.
`--prefix=DIR'
- Use DIR as the installation prefix. *Note Installation Names::
+ Use DIR as the installation prefix. *note Installation Names::
for more details, including other options available for fine-tuning
the installation locations.
diff --git a/examples/full_example/main.cc b/examples/full_example/main.cc
index 4152e89..f2eadac 100644
--- a/examples/full_example/main.cc
+++ b/examples/full_example/main.cc
@@ -34,13 +34,16 @@ enum
const double angle_step = 30.0;
-struct Item
+class Item
{
+public:
std::string filepath;
Glib::RefPtr<Clutter::Texture> texture;
Glib::RefPtr<Clutter::BehaviourEllipse> behaviour;
Item() {}
+
+ //This can throw an exception if the file could not be found:
explicit Item(const std::string& path)
: filepath (path), texture (Clutter::Texture::create_from_file(path)) {}
};
@@ -150,10 +153,25 @@ void Example::load_images(const std::string& directory_path)
// Clear any existing images
items_.clear();
- Glib::Dir dir (directory_path);
+ Glib::Dir dir(directory_path);
for(Glib::Dir::iterator p = dir.begin(); p != dir.end(); ++p)
{
+ const std::string filename = *p;
+
+ //Use only .jpg files:
+ const std::string::size_type size = filename.size();
+
+ const std::string suffix = ".jpg";
+ const std::string::size_type suffix_size = suffix.size();
+ if(size < suffix_size)
+ continue;
+
+ const std::string possible_suffix = filename.substr(size - suffix_size);
+ if(possible_suffix != suffix)
+ continue;
+
+ //Use the file:
const std::string path = Glib::build_filename(directory_path, *p);
try
{
@@ -162,8 +180,10 @@ void Example::load_images(const std::string& directory_path)
scale_texture_default(item.texture);
items_.push_back(item);
}
- catch (const Glib::Error&)
- {}
+ catch (const Glib::Error& ex)
+ {
+ std::cerr << "Exception when loading image file: " << ex.what() << std::endl;
+ }
}
}
@@ -193,17 +213,24 @@ void Example::add_image_actors()
const Glib::RefPtr<Clutter::Alpha> alpha =
Clutter::Alpha::create(timeline_rotation_, CLUTTER_EASE_OUT_SINE);
+ double angle_end = 0;
+ if(angle > 0)
+ angle_end = angle - 1; //We want a full rotation, but we can't have > 360 degrees.
p->behaviour = Clutter::BehaviourEllipse
::create(alpha, 320, ELLIPSE_Y, // x, y
ELLIPSE_HEIGHT, ELLIPSE_HEIGHT, // width, height
Clutter::ROTATE_CW,
- angle, angle + 360.0);
+ angle, angle_end);
p->behaviour->set_angle_tilt(Clutter::X_AXIS, -90.0);
p->behaviour->apply(actor);
actor->show();
angle += angle_step;
+
+ //This property may not be > 360:
+ if(angle > 360)
+ angle -= 360;
}
}
@@ -235,7 +262,7 @@ void Example::on_timeline_rotation_completed()
timeline_moveup_ = Clutter::Timeline::create(1000 /* milliseconds */);
const Glib::RefPtr<Clutter::Alpha> alpha =
Clutter::Alpha::create(timeline_moveup_, CLUTTER_EASE_OUT_SINE);
-
+
// Scale the item from its normal scale to approximately twice the normal scale:
double scale_start = 0.0;
actor->get_scale(scale_start, scale_start);
@@ -318,8 +345,8 @@ void Example::rotate_item_to_front(std::list<Item>::iterator pitem)
}
// TODO: Set the number of frames, depending on the angle.
- // otherwise the actor will take the same amount of time to reach
- // the end angle regardless of how far it must move, causing it to
+ // otherwise the actor will take the same amount of time to reach
+ // the end angle regardless of how far it must move, causing it to
// move very slowly if it does not have far to move.
angle_end += angle_step;
angle_start += angle_step;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]