glMatrixMode(GL_PROJECTION); glPushMatrix();
glMatrixMode(GL_MODELVIEW); glPushMatrix();
glPushAttrib(GL_ALL_ATTRIB_BITS);
- switch (object->type) {
- case GIS_TYPE_MARKER:
+ if (GIS_IS_MARKER(object)) {
_draw_marker(self, GIS_MARKER(object));
- break;
- case GIS_TYPE_CALLBACK:
+ } else if (GIS_IS_CALLBACK(object)) {
_draw_callback(self, GIS_CALLBACK(object));
- break;
- default:
- break;
}
glPopAttrib();
glMatrixMode(GL_PROJECTION); glPopMatrix();
static void _load_object(GisOpenGL *self, GisObject *object)
{
g_debug("GisOpenGL: load_object");
- switch (object->type) {
- case GIS_TYPE_MARKER: {
+ if (GIS_IS_MARKER(object)) {
GisMarker *marker = GIS_MARKER(object);
cairo_surface_t *surface = cairo_get_target(marker->cairo);
gdouble width = cairo_image_surface_get_width(surface);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
g_debug("load_texture: %d", marker->tex);
_gis_opengl_end(self);
- break;
- }
- default:
- break;
}
}
static void _unload_object(GisOpenGL *self, GisObject *object)
{
g_debug("GisOpenGL: unload_object");
- switch (object->type) {
- case GIS_TYPE_MARKER: {
+ if (GIS_IS_MARKER(object)) {
GisMarker *marker = GIS_MARKER(object);
g_debug("delete_texture: %d", marker->tex);
glDeleteTextures(1, &marker->tex);
- break;
- }
- default:
- break;
}
}
/*********************
* GisViewer methods *
*********************/
-GisViewer *gis_opengl_new(GisPlugins *plugins)
+GisViewer *gis_opengl_new(GisPlugins *plugins, GisPrefs *prefs)
{
g_debug("GisOpenGL: new");
GisViewer *self = g_object_new(GIS_TYPE_OPENGL, NULL);
- self->plugins = plugins;
+ gis_viewer_setup(self, plugins, prefs);
return self;
}