Re: Help with Clutter::Scriptable
- From: Chris Kühl <blixtra gmail com>
 
- To: Brian Gregg <biscuitalmighty gmail com>
 
- Cc: Murray Cumming <murrayc murrayc com>, gtkmm-list gnome org
 
- Subject: Re: Help with Clutter::Scriptable
 
- Date: Sat, 26 Feb 2011 02:14:04 +0100
 
On Fri, Feb 25, 2011 at 4:21 PM, Brian Gregg <biscuitalmighty gmail com> wrote:
> Am I right to assume that the constructor call to
> Glib::ObjectBase("TypeName") needs to be called to create the type before I
> load the object from script?  I would need to instantiate a TypeName object
> before the script would understand the type exists correct?
> Brian
>
In case you haven't figured it out, here is some code that seems to work.
#include <cluttermm.h>
// This is the JSON node. Notice that all types are C-types.
// One can not currenty use C++-types.
static const Glib::ustring jsonNode("[                   \
  {                                                      \
    \"id\" : \"stage\",                                  \
    \"type\" : \"ClutterStage\",                         \
    \"width\" : 200,                                     \
    \"height\" : 200,                                    \
    \"color\" : \"#20456f\",                             \
    \"children\" : [ \"text-box\", \"myrect\", \"rect2\"]\
  },                                                     \
  {                                                      \
    \"id\" : \"myrect\",                                 \
    \"type\" : \"gtkmm__CustomObject_myrect\",           \
    \"width\" :  100,                                    \
    \"height\" : 100,                                    \
    \"x\" : 10,                                          \
    \"y\" : 10,                                          \
    \"color\" : \"#cc99ee\",                             \
    \"opacity\" : 127                                    \
  },                                                     \
  {                                                      \
    \"id\" : \"rect2\",                                  \
    \"type\" : \"ClutterRectangle\",                     \
    \"width\" :  100,                                    \
    \"height\" : 100,                                    \
    \"x\" : 50,                                          \
    \"y\" : 50,                                          \
    \"color\" : \"#cc99ee\"                              \
  },                                                     \
  {                                                      \
    \"id\" : \"text-box\",                               \
    \"type\" : \"ClutterText\",                          \
    \"width\" : 100,                                     \
    \"height\" : 60,                                     \
    \"x\" : 20,                                          \
    \"y\" : 20,                                          \
    \"text\" : \"This is text!\",                        \
    \"color\" : \"#ddeeee\"                              \
  }                                                      \
]");
class MyRect : public Clutter::Rectangle
{
public:
  MyRect();
  virtual ~MyRect();
  static Glib::RefPtr<MyRect> create();
};
MyRect::MyRect() :
  // This creates a c-type named gtkmm__CustomObject_myrect.
  // that can be used in the JSON node.
  Glib::ObjectBase("myrect")
{};
MyRect::~MyRect() {}
Glib::RefPtr<MyRect> MyRect::create()
{
  return Glib::RefPtr<MyRect>( new MyRect() );
}
int main(int argc, char** argv)
{
  Clutter::init(&argc, &argv);
  // This must be called first to initialize type.
  Glib::RefPtr<MyRect> myRect = MyRect::create();
  // Now that the custom type is initialized, we can load the JSON node.
  Glib::RefPtr<Clutter::Script> script = Clutter::Script::create();
  script->load_from_data(jsonNode);
  // Get the stage by name, casting it to the correct C++-type.
  const Glib::RefPtr<Clutter::Stage> stage =
    Glib::RefPtr<Clutter::Stage>::cast_static(script->get_object("stage"));
  // Show the stage:
  stage->show();
  // Start the main loop, so we can respond to events:
  Clutter::main();
  return 0;
}
// Chris
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]