X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fplugin-ridge.c;fp=src%2Fplugin-ridge.c;h=b099a08b6cfea32fcb7c3ca91e04fe95a68a5e85;hb=e778b406a21e31d79ca1cd599469bb4ddc3d6a1c;hp=9e519fe557f5de0d0244c66496c3caaeffc9d998;hpb=55d69c616a9f4f3bae23045f1174047003e2e1d4;p=grits diff --git a/src/plugin-ridge.c b/src/plugin-ridge.c index 9e519fe..b099a08 100644 --- a/src/plugin-ridge.c +++ b/src/plugin-ridge.c @@ -23,8 +23,36 @@ #include #include "aweather-gui.h" +#include "plugin-ridge.h" #include "data.h" +/**************** + * GObject code * + ****************/ +static void aweather_ridge_plugin_init(AWeatherPluginInterface *iface); +static void aweather_ridge_expose(AWeatherPlugin *_ridge); +G_DEFINE_TYPE_WITH_CODE(AWeatherRidge, aweather_ridge, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE(AWEATHER_TYPE_PLUGIN, + aweather_ridge_plugin_init)); +static void aweather_ridge_class_init(AWeatherRidgeClass *klass) +{ + GObjectClass *object_class = (GObjectClass*)klass; +} +static void aweather_ridge_plugin_init(AWeatherPluginInterface *iface) +{ + /* Add methods to the interface */ + iface->expose = aweather_ridge_expose; +} +static void aweather_ridge_init(AWeatherRidge *ridge) +{ + /* Set defaults */ + ridge->gui = NULL; +} + + +/*********** + * Helpers * + ***********/ enum { LAYER_TOPO, LAYER_COUNTY, @@ -50,7 +78,8 @@ static layer_t layers[] = { [LAYER_CITY] = {"Cities", "Overlays/Cities/Short/%s_City_Short.gif", TRUE, 6, 0}, }; -static AWeatherGui *gui = NULL; +/* TODO: Remove this */ +AWeatherGui *old_gui = NULL; /** * Load an image into an OpenGL texture @@ -60,7 +89,7 @@ static AWeatherGui *gui = NULL; void load_texture(gchar *filename, gboolean updated, gpointer _layer) { layer_t *layer = _layer; - aweather_gui_gl_begin(gui); + aweather_gui_gl_begin(old_gui); /* Load image */ GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(filename, NULL); @@ -88,15 +117,15 @@ void load_texture(gchar *filename, gboolean updated, gpointer _layer) base); g_free(base); - aweather_gui_gl_end(gui); + aweather_gui_gl_end(old_gui); g_object_unref(pixbuf); /* Redraw */ - aweather_gui_gl_redraw(gui); + aweather_gui_gl_redraw(old_gui); } -static void set_site(AWeatherView *view, gchar *site, gpointer user_data) +static void set_site(AWeatherView *view, gchar *site, AWeatherRidge *ridge) { g_message("site changed to %s", site); for (int i = 0; i < LAYER_COUNT; i++) { @@ -107,39 +136,21 @@ static void set_site(AWeatherView *view, gchar *site, gpointer user_data) } } -static gboolean expose(GtkWidget *da, GdkEventExpose *event, gpointer user_data) -{ - g_message("ridge:expose"); - glPushMatrix(); - glEnable(GL_TEXTURE_2D); - glColor4f(1,1,1,1); - - for (int i = 0; i < LAYER_COUNT; i++) { - if (!layers[i].enabled) - continue; - glBindTexture(GL_TEXTURE_2D, layers[i].tex); - glBegin(GL_POLYGON); - glTexCoord2f(0.0, 0.0); glVertex3f(240*1000*-1.0, 282*1000* 1.0, layers[i].z); - glTexCoord2f(0.0, 1.0); glVertex3f(240*1000*-1.0, 282*1000*-1.0, layers[i].z); - glTexCoord2f(1.0, 1.0); glVertex3f(240*1000* 1.0, 282*1000*-1.0, layers[i].z); - glTexCoord2f(1.0, 0.0); glVertex3f(240*1000* 1.0, 282*1000* 1.0, layers[i].z); - glEnd(); - } - - glPopMatrix(); - return FALSE; -} - void toggle_layer(GtkToggleButton *check, gpointer _layer) { layer_t *layer = _layer; layer->enabled = gtk_toggle_button_get_active(check); - aweather_gui_gl_redraw(gui); + aweather_gui_gl_redraw(old_gui); } -gboolean ridge_init(AWeatherGui *_gui) +/*********** + * Methods * + ***********/ +AWeatherRidge *aweather_ridge_new(AWeatherGui *gui) { - gui = _gui; + AWeatherRidge *ridge = g_object_new(AWEATHER_TYPE_RIDGE, NULL); + ridge->gui = old_gui = gui; + AWeatherView *view = aweather_gui_get_view(gui); GtkWidget *drawing = aweather_gui_get_widget(gui, "drawing"); GtkWidget *config = aweather_gui_get_widget(gui, "tabs"); @@ -157,9 +168,31 @@ gboolean ridge_init(AWeatherGui *_gui) gtk_container_add(GTK_CONTAINER(body), hbox); gtk_notebook_append_page(GTK_NOTEBOOK(config), body, tab); - /* Set up OpenGL Stuff */ - g_signal_connect(drawing, "expose-event", G_CALLBACK(expose), NULL); - g_signal_connect(view, "site-changed", G_CALLBACK(set_site), NULL); + g_signal_connect(view, "site-changed", G_CALLBACK(set_site), ridge); + + return ridge; +} + +static void aweather_ridge_expose(AWeatherPlugin *_ridge) +{ + AWeatherRidge *ridge = AWEATHER_RIDGE(_ridge); + + g_message("ridge:expose"); + glPushMatrix(); + glEnable(GL_TEXTURE_2D); + glColor4f(1,1,1,1); + + for (int i = 0; i < LAYER_COUNT; i++) { + if (!layers[i].enabled) + continue; + glBindTexture(GL_TEXTURE_2D, layers[i].tex); + glBegin(GL_POLYGON); + glTexCoord2f(0.0, 0.0); glVertex3f(240*1000*-1.0, 282*1000* 1.0, layers[i].z); + glTexCoord2f(0.0, 1.0); glVertex3f(240*1000*-1.0, 282*1000*-1.0, layers[i].z); + glTexCoord2f(1.0, 1.0); glVertex3f(240*1000* 1.0, 282*1000*-1.0, layers[i].z); + glTexCoord2f(1.0, 0.0); glVertex3f(240*1000* 1.0, 282*1000* 1.0, layers[i].z); + glEnd(); + } - return TRUE; + glPopMatrix(); }