diff --git a/doc/INSTALL b/doc/INSTALL index 2deff94b14..6deaa5394a 100644 --- a/doc/INSTALL +++ b/doc/INSTALL @@ -186,7 +186,7 @@ it will show you the available command-line options: --use-opencv --no-opencv (enable/disable use of OPENCV) --use-directcam --no-directcam (enable/disable use of DIRECTCAM) --use-vision --no-vision (enable/disable use of VISION) - --use-gtk2 --no-gtk2 (enable/disable use of GTK2) + --use-gtk3 --no-gtk3 (enable/disable use of GTK3) --use-npapi --no-npapi (enable/disable use of NPAPI) --use-mfc --no-mfc (enable/disable use of MFC) --use-wx --no-wx (enable/disable use of WX) diff --git a/dtool/Package.cmake b/dtool/Package.cmake index 4c41cfb7d2..293b1d7090 100644 --- a/dtool/Package.cmake +++ b/dtool/Package.cmake @@ -556,16 +556,17 @@ package_option(HarfBuzz package_status(HarfBuzz "HarfBuzz") -# GTK2 +# GTK3 -set(Freetype_FIND_QUIETLY TRUE) # Fix for builtin FindGTK2 -set(GTK2_GTK_FIND_QUIETLY TRUE) # Fix for builtin FindGTK2 -find_package(GTK2 QUIET COMPONENTS gtk) +if(NOT WIN32) + find_package(GTK3 QUIET) +endif() -package_option(GTK2) - -package_status(GTK2 "gtk+-2") +package_option(GTK3 + "This is necessary to build the PStats performance analysis tool on platforms + other than Windows.") +package_status(GTK3 "gtk+-3") # # ------------ Physics engines ------------ diff --git a/makepanda/makepanda.py b/makepanda/makepanda.py index d58482d80c..c70b6302f0 100755 --- a/makepanda/makepanda.py +++ b/makepanda/makepanda.py @@ -93,7 +93,7 @@ PkgListSet(["PYTHON", "DIRECT", # Python support "VRPN", "OPENSSL", # Transport "FFTW", # Algorithm helpers "ARTOOLKIT", "OPENCV", "DIRECTCAM", "VISION", # Augmented Reality - "GTK2", # GTK2 is used for PStats on Unix + "GTK3", # GTK3 is used for PStats on Unix "MFC", "WX", "FLTK", # Used for web plug-in only "COCOA", # macOS toolkits "X11", # Unix platform support @@ -960,7 +960,7 @@ if (COMPILER=="GCC"): SmartPkgEnable("OPENSSL", "openssl", ("ssl", "crypto"), ("openssl/ssl.h", "openssl/crypto.h")) SmartPkgEnable("ZLIB", "zlib", ("z"), "zlib.h") - SmartPkgEnable("GTK2", "gtk+-2.0") + SmartPkgEnable("GTK3", "gtk+-3.0") if not PkgSkip("OPENSSL") and GetTarget() != "darwin": LibName("OPENSSL", "-Wl,--exclude-libs,libssl.a") @@ -978,11 +978,6 @@ if (COMPILER=="GCC"): if GetHost() != "darwin": # Workaround for an issue where pkg-config does not include this path if GetTargetArch() in ("x86_64", "amd64"): - if (os.path.isdir("/usr/lib64/glib-2.0/include")): - IncDirectory("GTK2", "/usr/lib64/glib-2.0/include") - if (os.path.isdir("/usr/lib64/gtk-2.0/include")): - IncDirectory("GTK2", "/usr/lib64/gtk-2.0/include") - if not PkgSkip("X11"): if (os.path.isdir("/usr/X11R6/lib64")): LibDirectory("ALWAYS", "/usr/X11R6/lib64") @@ -5841,19 +5836,19 @@ if not PkgSkip("PANDATOOL"): # DIRECTORY: pandatool/src/gtk-stats/ # -if not PkgSkip("PANDATOOL") and (GetTarget() == 'windows' or not PkgSkip("GTK2")): +if not PkgSkip("PANDATOOL") and (GetTarget() == 'windows' or not PkgSkip("GTK3")): if GetTarget() == 'windows': OPTS=['DIR:pandatool/src/win-stats'] TargetAdd('pstats_composite1.obj', opts=OPTS, input='winstats_composite1.cxx') else: - OPTS=['DIR:pandatool/src/gtk-stats', 'GTK2'] + OPTS=['DIR:pandatool/src/gtk-stats', 'GTK3'] TargetAdd('pstats_composite1.obj', opts=OPTS, input='gtkstats_composite1.cxx') TargetAdd('pstats.exe', input='pstats_composite1.obj') TargetAdd('pstats.exe', input='libp3pstatserver.lib') TargetAdd('pstats.exe', input='libp3progbase.lib') TargetAdd('pstats.exe', input='libp3pandatoolbase.lib') TargetAdd('pstats.exe', input=COMMON_PANDA_LIBS) - TargetAdd('pstats.exe', opts=['SUBSYSTEM:WINDOWS', 'WINSOCK', 'WINIMM', 'WINGDI', 'WINKERNEL', 'WINOLDNAMES', 'WINUSER', 'WINMM', 'GTK2']) + TargetAdd('pstats.exe', opts=['SUBSYSTEM:WINDOWS', 'WINSOCK', 'WINIMM', 'WINGDI', 'WINKERNEL', 'WINOLDNAMES', 'WINUSER', 'WINMM', 'GTK3']) # # DIRECTORY: pandatool/src/xfileprogs/ diff --git a/pandatool/src/gtk-stats/CMakeLists.txt b/pandatool/src/gtk-stats/CMakeLists.txt index b78ebf2e80..9c0c8c0944 100644 --- a/pandatool/src/gtk-stats/CMakeLists.txt +++ b/pandatool/src/gtk-stats/CMakeLists.txt @@ -1,4 +1,4 @@ -if(NOT HAVE_GTK2 OR NOT HAVE_NET) +if(NOT HAVE_GTK3 OR NOT HAVE_NET) return() endif() @@ -28,7 +28,7 @@ set(GTKSTATS_SOURCES composite_sources(gtk-stats GTKSTATS_SOURCES) add_executable(gtk-stats ${GTKSTATS_HEADERS} ${GTKSTATS_SOURCES}) -target_link_libraries(gtk-stats p3progbase p3pstatserver PKG::GTK2) +target_link_libraries(gtk-stats p3progbase p3pstatserver PKG::GTK3) # This program is NOT actually called gtk-stats. It's pstats-gtk on Win32 and # pstats everywhere else (as the Win32 GUI is not built). diff --git a/pandatool/src/gtk-stats/gtkStats.cxx b/pandatool/src/gtk-stats/gtkStats.cxx index e6889ff23b..959b83a6a4 100644 --- a/pandatool/src/gtk-stats/gtkStats.cxx +++ b/pandatool/src/gtk-stats/gtkStats.cxx @@ -44,7 +44,7 @@ timer(gpointer data) { // are getting starved and falling behind, so that the user still gets a // chance to see *something* happen onscreen, even if it's just // increasingly old data. - gdk_window_process_all_updates(); + //gdk_window_process_all_updates(); } return TRUE; diff --git a/pandatool/src/gtk-stats/gtkStatsChartMenu.cxx b/pandatool/src/gtk-stats/gtkStatsChartMenu.cxx index c7f8b3f4be..6a67588b1e 100644 --- a/pandatool/src/gtk-stats/gtkStatsChartMenu.cxx +++ b/pandatool/src/gtk-stats/gtkStatsChartMenu.cxx @@ -104,9 +104,9 @@ do_update() { // We put a separator between the above frame collector and the first // level collector. if (needs_separator) { - GtkWidget *sep = gtk_separator_menu_item_new(); - gtk_widget_show(sep); - gtk_menu_shell_append(GTK_MENU_SHELL(_menu), sep); + GtkWidget *sep = gtk_separator_menu_item_new(); + gtk_widget_show(sep); + gtk_menu_shell_append(GTK_MENU_SHELL(_menu), sep); needs_separator = false; } @@ -138,7 +138,7 @@ do_update() { */ void GtkStatsChartMenu:: add_view(GtkWidget *parent_menu, const PStatViewLevel *view_level, - bool show_level) { + bool show_level) { int collector = view_level->get_collector(); const PStatClientData *client_data = _monitor->get_client_data(); diff --git a/pandatool/src/gtk-stats/gtkStatsGraph.cxx b/pandatool/src/gtk-stats/gtkStatsGraph.cxx index 88ca89a6fe..0fb46af19d 100644 --- a/pandatool/src/gtk-stats/gtkStatsGraph.cxx +++ b/pandatool/src/gtk-stats/gtkStatsGraph.cxx @@ -73,8 +73,8 @@ GtkStatsGraph(GtkStatsMonitor *monitor) : gtk_widget_add_events(_graph_window, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK); - g_signal_connect(G_OBJECT(_graph_window), "expose_event", - G_CALLBACK(graph_expose_callback), this); + g_signal_connect(G_OBJECT(_graph_window), "draw", + G_CALLBACK(graph_draw_callback), this); g_signal_connect(G_OBJECT(_graph_window), "configure_event", G_CALLBACK(configure_graph_callback), this); g_signal_connect(G_OBJECT(_graph_window), "button_press_event", @@ -91,18 +91,18 @@ GtkStatsGraph(GtkStatsMonitor *monitor) : // A VBox to hold the graph's frame, and any numbers (scale legend? total?) // above it. - _graph_vbox = gtk_vbox_new(FALSE, 0); + _graph_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_end(GTK_BOX(_graph_vbox), graph_frame, TRUE, TRUE, 0); // An HBox to hold the graph's frame, and the scale legend to the right of // it. - _graph_hbox = gtk_hbox_new(FALSE, 0); + _graph_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start(GTK_BOX(_graph_hbox), _graph_vbox, TRUE, TRUE, 0); // An HPaned to hold the label stack and the graph hbox. - _hpaned = gtk_hpaned_new(); + _hpaned = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL); gtk_container_add(GTK_CONTAINER(_window), _hpaned); gtk_container_set_border_width(GTK_CONTAINER(_window), 8); @@ -373,12 +373,9 @@ window_destroy(GtkWidget *widget, gpointer data) { * Fills in the graph window. */ gboolean GtkStatsGraph:: -graph_expose_callback(GtkWidget *widget, GdkEventExpose *event, gpointer data) { +graph_draw_callback(GtkWidget *widget, cairo_t *cr, gpointer data) { GtkStatsGraph *self = (GtkStatsGraph *)data; - GdkWindow *window = gtk_widget_get_window(self->_graph_window); - cairo_t *cr = gdk_cairo_create(window); - if (self->_cr_surface != nullptr) { cairo_set_source_surface(cr, self->_cr_surface, 0, 0); cairo_paint(cr); @@ -386,8 +383,6 @@ graph_expose_callback(GtkWidget *widget, GdkEventExpose *event, gpointer data) { self->additional_graph_window_paint(cr); - cairo_destroy(cr); - return TRUE; } diff --git a/pandatool/src/gtk-stats/gtkStatsGraph.h b/pandatool/src/gtk-stats/gtkStatsGraph.h index 9340f777b5..ddf1f11543 100644 --- a/pandatool/src/gtk-stats/gtkStatsGraph.h +++ b/pandatool/src/gtk-stats/gtkStatsGraph.h @@ -118,10 +118,10 @@ private: static gboolean window_delete_event(GtkWidget *widget, GdkEvent *event, gpointer data); static void window_destroy(GtkWidget *widget, gpointer data); - static gboolean graph_expose_callback(GtkWidget *widget, - GdkEventExpose *event, gpointer data); + static gboolean graph_draw_callback(GtkWidget *widget, + cairo_t *cr, gpointer data); static gboolean configure_graph_callback(GtkWidget *widget, - GdkEventConfigure *event, gpointer data); + GdkEventConfigure *event, gpointer data); protected: static gboolean button_press_event_callback(GtkWidget *widget, diff --git a/pandatool/src/gtk-stats/gtkStatsLabel.cxx b/pandatool/src/gtk-stats/gtkStatsLabel.cxx index f9c3234c60..09c5f1a39e 100644 --- a/pandatool/src/gtk-stats/gtkStatsLabel.cxx +++ b/pandatool/src/gtk-stats/gtkStatsLabel.cxx @@ -15,8 +15,6 @@ #include "gtkStatsMonitor.h" #include "gtkStatsGraph.h" -#include - int GtkStatsLabel::_left_margin = 2; int GtkStatsLabel::_right_margin = 2; int GtkStatsLabel::_top_margin = 2; @@ -44,8 +42,8 @@ GtkStatsLabel(GtkStatsMonitor *monitor, GtkStatsGraph *graph, gtk_widget_add_events(_widget, GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_BUTTON_PRESS_MASK); - g_signal_connect(G_OBJECT(_widget), "expose_event", - G_CALLBACK(expose_event_callback), this); + g_signal_connect(G_OBJECT(_widget), "draw", + G_CALLBACK(draw_callback), this); g_signal_connect(G_OBJECT(_widget), "enter_notify_event", G_CALLBACK(enter_notify_event_callback), this); g_signal_connect(G_OBJECT(_widget), "leave_notify_event", @@ -154,11 +152,9 @@ set_mouse_within(bool mouse_within) { * Draws the background color of the label. */ gboolean GtkStatsLabel:: -expose_event_callback(GtkWidget *widget, GdkEventExpose *event, gpointer data) { +draw_callback(GtkWidget *widget, cairo_t *cr, gpointer data) { GtkStatsLabel *self = (GtkStatsLabel *)data; - GdkWindow *window = gtk_widget_get_window(widget); - cairo_t *cr = gdk_cairo_create(window); cairo_set_source_rgb(cr, self->_bg_color[0], self->_bg_color[1], self->_bg_color[2]); GtkAllocation allocation; @@ -181,7 +177,6 @@ expose_event_callback(GtkWidget *widget, GdkEventExpose *event, gpointer data) { cairo_stroke(cr); } - cairo_destroy(cr); return TRUE; } diff --git a/pandatool/src/gtk-stats/gtkStatsLabel.h b/pandatool/src/gtk-stats/gtkStatsLabel.h index e82153c7b6..53737661d8 100644 --- a/pandatool/src/gtk-stats/gtkStatsLabel.h +++ b/pandatool/src/gtk-stats/gtkStatsLabel.h @@ -17,6 +17,7 @@ #include "pandatoolbase.h" #include +#include class GtkStatsMonitor; class GtkStatsGraph; @@ -43,8 +44,8 @@ public: private: void set_mouse_within(bool mouse_within); - static gboolean expose_event_callback(GtkWidget *widget, - GdkEventExpose *event, gpointer data); + static gboolean draw_callback(GtkWidget *widget, + cairo_t *cr, gpointer data); static gboolean enter_notify_event_callback(GtkWidget *widget, GdkEventCrossing *event, gpointer data); diff --git a/pandatool/src/gtk-stats/gtkStatsLabelStack.cxx b/pandatool/src/gtk-stats/gtkStatsLabelStack.cxx index 03de5ef7b9..079190019c 100644 --- a/pandatool/src/gtk-stats/gtkStatsLabelStack.cxx +++ b/pandatool/src/gtk-stats/gtkStatsLabelStack.cxx @@ -20,7 +20,7 @@ */ GtkStatsLabelStack:: GtkStatsLabelStack() { - _widget = gtk_vbox_new(FALSE, 0); + _widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); _highlight_label = -1; } diff --git a/pandatool/src/gtk-stats/gtkStatsMonitor.cxx b/pandatool/src/gtk-stats/gtkStatsMonitor.cxx index 8bf5eef52b..b312d5ccc3 100644 --- a/pandatool/src/gtk-stats/gtkStatsMonitor.cxx +++ b/pandatool/src/gtk-stats/gtkStatsMonitor.cxx @@ -160,7 +160,6 @@ new_data(int thread_index, int frame_number) { } } - /** * Called whenever the connection to the client has been lost. This is a * permanent state change. The monitor should update its display to represent @@ -373,7 +372,7 @@ create_window() { } // Pack the menu into the window. - GtkWidget *main_vbox = gtk_vbox_new(FALSE, 1); + GtkWidget *main_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 1); gtk_container_add(GTK_CONTAINER(_window), main_vbox); gtk_box_pack_start(GTK_BOX(main_vbox), _menu_bar, FALSE, TRUE, 0); diff --git a/pandatool/src/gtk-stats/gtkStatsPianoRoll.cxx b/pandatool/src/gtk-stats/gtkStatsPianoRoll.cxx index 022d41bdfd..74e4de6318 100644 --- a/pandatool/src/gtk-stats/gtkStatsPianoRoll.cxx +++ b/pandatool/src/gtk-stats/gtkStatsPianoRoll.cxx @@ -35,8 +35,8 @@ GtkStatsPianoRoll(GtkStatsMonitor *monitor, int thread_index) : // Add a DrawingArea widget on top of the graph, to display all of the scale // units. _scale_area = gtk_drawing_area_new(); - g_signal_connect(G_OBJECT(_scale_area), "expose_event", - G_CALLBACK(expose_event_callback), this); + g_signal_connect(G_OBJECT(_scale_area), "draw", + G_CALLBACK(draw_callback), this); gtk_box_pack_start(GTK_BOX(_graph_vbox), _scale_area, FALSE, FALSE, 0); gtk_widget_set_size_request(_scale_area, 0, 20); @@ -405,16 +405,16 @@ draw_guide_bar(cairo_t *cr, const PStatGraph::GuideBar &bar) { * This is called during the servicing of expose_event. */ void GtkStatsPianoRoll:: -draw_guide_labels() { +draw_guide_labels(cairo_t *cr) { int i; int num_guide_bars = get_num_guide_bars(); for (i = 0; i < num_guide_bars; i++) { - draw_guide_label(get_guide_bar(i)); + draw_guide_label(cr, get_guide_bar(i)); } int num_user_guide_bars = get_num_user_guide_bars(); for (i = 0; i < num_user_guide_bars; i++) { - draw_guide_label(get_user_guide_bar(i)); + draw_guide_label(cr, get_user_guide_bar(i)); } } @@ -422,10 +422,7 @@ draw_guide_labels() { * Draws the text for the indicated guide bar label at the top of the graph. */ void GtkStatsPianoRoll:: -draw_guide_label(const PStatGraph::GuideBar &bar) { - GdkWindow *window = gtk_widget_get_window(_scale_area); - cairo_t *cr = gdk_cairo_create(window); - +draw_guide_label(cairo_t *cr, const PStatGraph::GuideBar &bar) { switch (bar._style) { case GBS_target: cairo_set_source_rgb(cr, rgb_light_gray[0], rgb_light_gray[1], rgb_light_gray[2]); @@ -453,7 +450,6 @@ draw_guide_label(const PStatGraph::GuideBar &bar) { if (find_user_guide_bar(from_height, to_height) >= 0) { // Omit the label: there's a user-defined guide bar in the same space. g_object_unref(layout); - cairo_destroy(cr); return; } } @@ -476,16 +472,15 @@ draw_guide_label(const PStatGraph::GuideBar &bar) { } g_object_unref(layout); - cairo_destroy(cr); } /** * Draws in the scale labels. */ gboolean GtkStatsPianoRoll:: -expose_event_callback(GtkWidget *widget, GdkEventExpose *event, gpointer data) { +draw_callback(GtkWidget *widget, cairo_t *cr, gpointer data) { GtkStatsPianoRoll *self = (GtkStatsPianoRoll *)data; - self->draw_guide_labels(); + self->draw_guide_labels(cr); return TRUE; } diff --git a/pandatool/src/gtk-stats/gtkStatsPianoRoll.h b/pandatool/src/gtk-stats/gtkStatsPianoRoll.h index 7661b0bd3a..97ad5ad597 100644 --- a/pandatool/src/gtk-stats/gtkStatsPianoRoll.h +++ b/pandatool/src/gtk-stats/gtkStatsPianoRoll.h @@ -60,11 +60,10 @@ private: int get_collector_under_pixel(int xpoint, int ypoint); void update_labels(); void draw_guide_bar(cairo_t *cr, const PStatGraph::GuideBar &bar); - void draw_guide_labels(); - void draw_guide_label(const PStatGraph::GuideBar &bar); + void draw_guide_labels(cairo_t *cr); + void draw_guide_label(cairo_t *cr, const PStatGraph::GuideBar &bar); - static gboolean expose_event_callback(GtkWidget *widget, - GdkEventExpose *event, gpointer data); + static gboolean draw_callback(GtkWidget *widget, cairo_t *cr, gpointer data); }; #endif diff --git a/pandatool/src/gtk-stats/gtkStatsStripChart.cxx b/pandatool/src/gtk-stats/gtkStatsStripChart.cxx index 06cedf0aed..f66218b3c8 100644 --- a/pandatool/src/gtk-stats/gtkStatsStripChart.cxx +++ b/pandatool/src/gtk-stats/gtkStatsStripChart.cxx @@ -47,7 +47,7 @@ GtkStatsStripChart(GtkStatsMonitor *monitor, int thread_index, } // Put some stuff on top of the graph. - _top_hbox = gtk_hbox_new(FALSE, 0); + _top_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start(GTK_BOX(_graph_vbox), _top_hbox, FALSE, FALSE, 0); @@ -64,8 +64,8 @@ GtkStatsStripChart(GtkStatsMonitor *monitor, int thread_index, // Add a DrawingArea widget to the right of the graph, to display all of the // scale units. _scale_area = gtk_drawing_area_new(); - g_signal_connect(G_OBJECT(_scale_area), "expose_event", - G_CALLBACK(expose_event_callback), this); + g_signal_connect(G_OBJECT(_scale_area), "draw", + G_CALLBACK(draw_callback), this); gtk_box_pack_start(GTK_BOX(_graph_hbox), _scale_area, FALSE, FALSE, 0); gtk_widget_set_size_request(_scale_area, 40, 0); @@ -549,23 +549,23 @@ draw_guide_bar(cairo_t *cr, int from_x, int to_x, * This is called during the servicing of expose_event. */ void GtkStatsStripChart:: -draw_guide_labels() { +draw_guide_labels(cairo_t *cr) { // Draw in the labels for the guide bars. int last_y = -100; int i; int num_guide_bars = get_num_guide_bars(); for (i = 0; i < num_guide_bars; i++) { - last_y = draw_guide_label(get_guide_bar(i), last_y); + last_y = draw_guide_label(cr, get_guide_bar(i), last_y); } GuideBar top_value = make_guide_bar(get_vertical_scale()); - draw_guide_label(top_value, last_y); + draw_guide_label(cr, top_value, last_y); last_y = -100; int num_user_guide_bars = get_num_user_guide_bars(); for (i = 0; i < num_user_guide_bars; i++) { - last_y = draw_guide_label(get_user_guide_bar(i), last_y); + last_y = draw_guide_label(cr, get_user_guide_bar(i), last_y); } } @@ -575,10 +575,7 @@ draw_guide_labels() { * value is given. Returns the top pixel value of the new label. */ int GtkStatsStripChart:: -draw_guide_label(const PStatGraph::GuideBar &bar, int last_y) { - GdkWindow *window = gtk_widget_get_window(_scale_area); - cairo_t *cr = gdk_cairo_create(window); - +draw_guide_label(cairo_t *cr, const PStatGraph::GuideBar &bar, int last_y) { switch (bar._style) { case GBS_target: cairo_set_source_rgb(cr, rgb_light_gray[0], rgb_light_gray[1], rgb_light_gray[2]); @@ -606,7 +603,6 @@ draw_guide_label(const PStatGraph::GuideBar &bar, int last_y) { if (find_user_guide_bar(from_height, to_height) >= 0) { // Omit the label: there's a user-defined guide bar in the same space. g_object_unref(layout); - cairo_destroy(cr); return last_y; } } @@ -629,7 +625,6 @@ draw_guide_label(const PStatGraph::GuideBar &bar, int last_y) { } g_object_unref(layout); - cairo_destroy(cr); return last_y; } @@ -648,9 +643,9 @@ toggled_callback(GtkToggleButton *button, gpointer data) { * Draws in the scale labels. */ gboolean GtkStatsStripChart:: -expose_event_callback(GtkWidget *widget, GdkEventExpose *event, gpointer data) { +draw_callback(GtkWidget *widget, cairo_t *cr, gpointer data) { GtkStatsStripChart *self = (GtkStatsStripChart *)data; - self->draw_guide_labels(); + self->draw_guide_labels(cr); return TRUE; } diff --git a/pandatool/src/gtk-stats/gtkStatsStripChart.h b/pandatool/src/gtk-stats/gtkStatsStripChart.h index 359f681f54..466b6a7753 100644 --- a/pandatool/src/gtk-stats/gtkStatsStripChart.h +++ b/pandatool/src/gtk-stats/gtkStatsStripChart.h @@ -66,12 +66,11 @@ protected: private: void draw_guide_bar(cairo_t *cr, int from_x, int to_x, const PStatGraph::GuideBar &bar); - void draw_guide_labels(); - int draw_guide_label(const PStatGraph::GuideBar &bar, int last_y); + void draw_guide_labels(cairo_t *cr); + int draw_guide_label(cairo_t *cr, const PStatGraph::GuideBar &bar, int last_y); static void toggled_callback(GtkToggleButton *button, gpointer data); - static gboolean expose_event_callback(GtkWidget *widget, - GdkEventExpose *event, gpointer data); + static gboolean draw_callback(GtkWidget *widget, cairo_t *cr, gpointer data); private: std::string _net_value_text;