scrollbar handling.legacy
| @@ -41,7 +41,7 @@ int main(int argc, char **argv) | |||
| GlMapView *glmapview = new GlMapView(builder); | |||
| /* Show window. We're good to go! */ | |||
| gtk_widget_show_all(GTK_WIDGET(gtk_builder_get_object(builder, "window1"))); | |||
| gtk_widget_show_all(GTK_WIDGET(gtk_builder_get_object(builder, "window"))); | |||
| g_object_unref(G_OBJECT(builder)); | |||
| new DebugFps(); | |||
| @@ -2,7 +2,7 @@ | |||
| <interface> | |||
| <requires lib="gtk+" version="2.16"/> | |||
| <!-- interface-naming-policy project-wide --> | |||
| <object class="GtkWindow" id="window1"> | |||
| <object class="GtkWindow" id="window"> | |||
| <property name="title" translatable="yes">Deus Hax Editor</property> | |||
| <signal name="delete_event" handler="gtk_main_quit"/> | |||
| <child> | |||
| @@ -63,6 +63,8 @@ | |||
| <property name="visible">True</property> | |||
| <property name="use_underline">True</property> | |||
| <property name="use_stock">True</property> | |||
| <property name="always_show_image">True</property> | |||
| <signal name="activate" handler="gtk_main_quit"/> | |||
| </object> | |||
| </child> | |||
| </object> | |||
| @@ -134,6 +136,8 @@ | |||
| <property name="visible">True</property> | |||
| <property name="use_underline">True</property> | |||
| <property name="use_stock">True</property> | |||
| <property name="always_show_image">True</property> | |||
| <signal name="activate" handler="gtk_widget_show" object="aboutdialog"/> | |||
| </object> | |||
| </child> | |||
| </object> | |||
| @@ -244,4 +248,38 @@ | |||
| <property name="page_increment">10</property> | |||
| <property name="page_size">10</property> | |||
| </object> | |||
| <object class="GtkAboutDialog" id="aboutdialog"> | |||
| <property name="border_width">5</property> | |||
| <property name="modal">True</property> | |||
| <property name="window_position">center</property> | |||
| <property name="type_hint">normal</property> | |||
| <property name="program_name">Deus Hax Editor</property> | |||
| <property name="copyright" translatable="yes">© 2010 Sam Hocevar <sam@hocevar.net></property> | |||
| <property name="website">http://deushax.zoy.org/</property> | |||
| <signal name="close" handler="gtk_widget_hide" object="aboutdialog"/> | |||
| <signal name="response" handler="gtk_widget_hide" object="aboutdialog"/> | |||
| <signal name="delete_event" handler="gtk_widget_hide" object="aboutdialog"/> | |||
| <signal name="delete_event" handler="gtk_true"/> | |||
| <child internal-child="vbox"> | |||
| <object class="GtkVBox" id="dialog-vbox1"> | |||
| <property name="visible">True</property> | |||
| <property name="orientation">vertical</property> | |||
| <property name="spacing">2</property> | |||
| <child> | |||
| <placeholder/> | |||
| </child> | |||
| <child internal-child="action_area"> | |||
| <object class="GtkHButtonBox" id="dialog-action_area1"> | |||
| <property name="visible">True</property> | |||
| <property name="layout_style">end</property> | |||
| </object> | |||
| <packing> | |||
| <property name="expand">False</property> | |||
| <property name="pack_type">end</property> | |||
| <property name="position">0</property> | |||
| </packing> | |||
| </child> | |||
| </object> | |||
| </child> | |||
| </object> | |||
| </interface> | |||
| @@ -69,12 +69,13 @@ void GlMapView::LoadMap(char const *path) | |||
| { | |||
| // FIXME: detect when the map viewer is killed | |||
| mapviewer = new MapViewer(path); | |||
| UpdateAdjustments(); | |||
| } | |||
| gboolean GlMapView::IdleTick() | |||
| { | |||
| // FIXME: do not do anything if the previous tick was too recent? | |||
| ticking = TRUE; | |||
| if (mapviewer) | |||
| @@ -91,37 +92,12 @@ gboolean GlMapView::IdleTick() | |||
| gboolean GlMapView::Setup() | |||
| { | |||
| if (mapviewer) | |||
| { | |||
| /* Manage adjustments */ | |||
| struct { GtkAdjustment *adj; float map_size, sw_size; } s[2] = | |||
| { | |||
| { hadj, mapviewer->GetWidth(), glarea->allocation.width }, | |||
| { vadj, mapviewer->GetHeight(), glarea->allocation.height }, | |||
| }; | |||
| for (int i = 0; i < 2; i++) | |||
| { | |||
| gtk_adjustment_set_lower(s[i].adj, 0); | |||
| gtk_adjustment_set_upper(s[i].adj, s[i].map_size); | |||
| gtk_adjustment_set_step_increment(s[i].adj, 1); | |||
| gtk_adjustment_set_page_increment(s[i].adj, s[i].sw_size); | |||
| gtk_adjustment_set_page_size(s[i].adj, s[i].sw_size); | |||
| float val = gtk_adjustment_get_value(s[i].adj); | |||
| if (val + s[i].sw_size > s[i].map_size) | |||
| { | |||
| gtk_adjustment_set_value(s[i].adj, | |||
| s[i].map_size - s[i].sw_size); | |||
| gtk_adjustment_value_changed(s[i].adj); | |||
| } | |||
| } | |||
| } | |||
| /* Set up display */ | |||
| if (gtk_gl_area_make_current(GTK_GL_AREA(glarea))) | |||
| Video::Setup(glarea->allocation.width, glarea->allocation.height); | |||
| UpdateAdjustments(); | |||
| return TRUE; | |||
| } | |||
| @@ -154,6 +130,38 @@ gboolean GlMapView::Draw(GdkEventExpose *event) | |||
| return TRUE; | |||
| } | |||
| gboolean GlMapView::UpdateAdjustments() | |||
| { | |||
| float w = mapviewer ? mapviewer->GetWidth() : glarea->allocation.width; | |||
| float h = mapviewer ? mapviewer->GetHeight() : glarea->allocation.height; | |||
| /* Manage adjustments */ | |||
| struct { GtkAdjustment *adj; float map_size, sw_size; } s[2] = | |||
| { | |||
| { hadj, w, glarea->allocation.width }, | |||
| { vadj, h, glarea->allocation.height }, | |||
| }; | |||
| for (int i = 0; i < 2; i++) | |||
| { | |||
| gtk_adjustment_set_lower(s[i].adj, 0); | |||
| gtk_adjustment_set_upper(s[i].adj, s[i].map_size); | |||
| gtk_adjustment_set_step_increment(s[i].adj, 1); | |||
| gtk_adjustment_set_page_increment(s[i].adj, s[i].sw_size); | |||
| gtk_adjustment_set_page_size(s[i].adj, s[i].sw_size); | |||
| float val = gtk_adjustment_get_value(s[i].adj); | |||
| if (val + s[i].sw_size > s[i].map_size) | |||
| { | |||
| gtk_adjustment_set_value(s[i].adj, | |||
| s[i].map_size - s[i].sw_size); | |||
| gtk_adjustment_value_changed(s[i].adj); | |||
| } | |||
| } | |||
| return TRUE; | |||
| } | |||
| gboolean GlMapView::MouseButton(GdkEventButton *event) | |||
| { | |||
| if (event->type == GDK_BUTTON_PRESS && event->button == 2) | |||
| @@ -20,6 +20,7 @@ private: | |||
| gboolean Setup(); | |||
| gboolean Destroy(); | |||
| gboolean Draw(GdkEventExpose *event); | |||
| gboolean UpdateAdjustments(); | |||
| gboolean MouseButton(GdkEventButton *event); | |||
| gboolean MouseMotion(GdkEventMotion *event); | |||