]> Pileus Git - grits/commitdiff
Store GritsViewer references in GritsObjects
authorAndy Spencer <andy753421@gmail.com>
Sat, 22 Jan 2011 20:09:25 +0000 (20:09 +0000)
committerAndy Spencer <andy753421@gmail.com>
Sat, 22 Jan 2011 20:24:04 +0000 (20:24 +0000)
This makes it easier to write modules without having to store the viewer
reference all over the place.

It could also help simplify adding/removing objects from the viewer, but
that has not been implemented yet.

src/grits-viewer.c
src/objects/grits-object.h

index 3a7827e51be982f9b9e4b484e0c506ec19c2893a..bb86d6473e5f7c29c21beab9503d9e9cf62350bb 100644 (file)
@@ -526,7 +526,9 @@ gpointer grits_viewer_add(GritsViewer *viewer, GritsObject *object,
        GritsViewerClass *klass = GRITS_VIEWER_GET_CLASS(viewer);
        if (!klass->add)
                g_warning("GritsViewer: add - Unimplemented");
-       return klass->add(viewer, object, level, sort);
+       object->ref    = klass->add(viewer, object, level, sort);
+       object->viewer = viewer;
+       return object;
 }
 
 /**
@@ -539,12 +541,16 @@ gpointer grits_viewer_add(GritsViewer *viewer, GritsObject *object,
  *
  * Returns: the #GritsObject referenced by the handle
  */
-GritsObject *grits_viewer_remove(GritsViewer *viewer, gpointer ref)
+GritsObject *grits_viewer_remove(GritsViewer *viewer, gpointer _object)
 {
+       GritsObject *object = _object;
        GritsViewerClass *klass = GRITS_VIEWER_GET_CLASS(viewer);
        if (!klass->remove)
                g_warning("GritsViewer: remove - Unimplemented");
-       return klass->remove(viewer, ref);
+       klass->remove(viewer, object->ref);
+       object->ref    = NULL;
+       object->viewer = NULL;
+       return object;
 }
 
 /****************
index b8a91a6d3fce707441196cd46bda5d647e4ec393..7ed49aa53d0df15f866913d44ba0a12f70e778f8 100644 (file)
 typedef struct _GritsObject      GritsObject;
 typedef struct _GritsObjectClass GritsObjectClass;
 
+#include "grits-opengl.h"
 struct _GritsObject {
-       GObject    parent_instance;
-       GritsPoint center;
-       gboolean   hidden;
-       gdouble    lod;
+       GObject      parent_instance;
+       GritsViewer *viewer; // The viewer the object was added to
+       gpointer     ref;    // Reference for objects that have been added
+       GritsPoint   center; // Center of the object
+       gboolean     hidden; // If true, the object will not be drawn
+       gdouble      lod;    // Level of detail, used to hide small objects
 };
 
-#include "grits-opengl.h"
 struct _GritsObjectClass {
        GObjectClass parent_class;