summaryrefslogtreecommitdiff
path: root/src/drivers/X11/Fl_X11_Window_Driver.cxx
diff options
context:
space:
mode:
authorManolo Gouy <Manolo>2016-04-03 14:25:42 +0000
committerManolo Gouy <Manolo>2016-04-03 14:25:42 +0000
commitd292de92ef6b99762d149fd1effef42d26c86466 (patch)
tree243159197199b6f4a5d47731f1c99a55eb7fa3e1 /src/drivers/X11/Fl_X11_Window_Driver.cxx
parent7c8e3379428a73b98395b07106759d24f3118514 (diff)
Rewrite fl_scroll_area.cxx under the driver model.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11520 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/drivers/X11/Fl_X11_Window_Driver.cxx')
-rw-r--r--src/drivers/X11/Fl_X11_Window_Driver.cxx17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/drivers/X11/Fl_X11_Window_Driver.cxx b/src/drivers/X11/Fl_X11_Window_Driver.cxx
index 06343fb1b..538a728a6 100644
--- a/src/drivers/X11/Fl_X11_Window_Driver.cxx
+++ b/src/drivers/X11/Fl_X11_Window_Driver.cxx
@@ -658,6 +658,23 @@ void Fl_X11_Window_Driver::erase_menu() {
#endif
}
+int Fl_X11_Window_Driver::scroll(int src_x, int src_y, int src_w, int src_h, int dest_x, int dest_y,
+ void (*draw_area)(void*, int,int,int,int), void* data)
+{
+ XCopyArea(fl_display, fl_window, fl_window, (GC)fl_graphics_driver->gc(),
+ src_x, src_y, src_w, src_h, dest_x, dest_y);
+ // we have to sync the display and get the GraphicsExpose events! (sigh)
+ for (;;) {
+ XEvent e; XWindowEvent(fl_display, fl_window, ExposureMask, &e);
+ if (e.type == NoExpose) break;
+ // otherwise assume it is a GraphicsExpose event:
+ draw_area(data, e.xexpose.x, e.xexpose.y,
+ e.xexpose.width, e.xexpose.height);
+ if (!e.xgraphicsexpose.count) break;
+ }
+ return 0;
+}
+
//
// End of "$Id$".
//