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.
GritsViewerClass *klass = GRITS_VIEWER_GET_CLASS(viewer);
if (!klass->add)
g_warning("GritsViewer: add - Unimplemented");
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
*/
*
* 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");
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;
typedef struct _GritsObject GritsObject;
typedef struct _GritsObjectClass GritsObjectClass;
+#include "grits-opengl.h"
- 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;
struct _GritsObjectClass {
GObjectClass parent_class;