[cluttermm_tutorial] Fix some runtime errors.



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]