summaryrefslogtreecommitdiff
path: root/src/drivers
diff options
context:
space:
mode:
authorManolo Gouy <Manolo>2016-03-27 07:47:52 +0000
committerManolo Gouy <Manolo>2016-03-27 07:47:52 +0000
commit2fd4dde9f5d682898b7fc387bb364fff2febf8fb (patch)
tree1d3ccbc3c7bea37356c6c54df8784d68c1f618a5 /src/drivers
parent5f14fc3e9b81d082966665209c4246cbdfee0005 (diff)
Rewrite Fl_Menu_Window class under the driver model.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11441 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/drivers')
-rw-r--r--src/drivers/X11/Fl_X11_Window_Driver.H2
-rw-r--r--src/drivers/X11/Fl_X11_Window_Driver.cxx24
2 files changed, 26 insertions, 0 deletions
diff --git a/src/drivers/X11/Fl_X11_Window_Driver.H b/src/drivers/X11/Fl_X11_Window_Driver.H
index ea6e3d649..2c4c432aa 100644
--- a/src/drivers/X11/Fl_X11_Window_Driver.H
+++ b/src/drivers/X11/Fl_X11_Window_Driver.H
@@ -84,6 +84,8 @@ public:
virtual void take_focus();
virtual void flush_double();
virtual void flush_overlay();
+ virtual void flush_menu();
+ virtual void erase_menu();
virtual void draw_begin();
virtual void make_current();
virtual void show();
diff --git a/src/drivers/X11/Fl_X11_Window_Driver.cxx b/src/drivers/X11/Fl_X11_Window_Driver.cxx
index 861aaf972..43cff28e9 100644
--- a/src/drivers/X11/Fl_X11_Window_Driver.cxx
+++ b/src/drivers/X11/Fl_X11_Window_Driver.cxx
@@ -633,6 +633,30 @@ void Fl_X11_Window_Driver::redraw_overlay() {
Fl_Window_Driver::redraw_overlay();
}
+void Fl_X11_Window_Driver::flush_menu() {
+#if HAVE_OVERLAY
+ if (!fl_overlay_visual || !overlay()) {flush_single(); return;}
+ Fl_X *myi = Fl_X::i(pWindow);
+ fl_window = myi->xid;
+# if defined(FLTK_USE_CAIRO)
+ // capture gc changes automatically to update the cairo context adequately
+ if(Fl::autolink_context()) Fl::cairo_make_current(fl_graphics_driver->gc());
+# endif
+ fl_overlay = 1;
+ fl_clip_region(myi->region); myi->region = 0; current(pWindow);
+ draw();
+ fl_overlay = 0;
+#else
+ flush_single();
+#endif
+}
+
+void Fl_X11_Window_Driver::erase_menu() {
+#if HAVE_OVERLAY
+ if (pWindow->shown()) XClearWindow(fl_display, fl_xid(pWindow));
+#endif
+}
+
//
// End of "$Id$".
//