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;
}
/**
*
* 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;
}
/****************
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;