From d292de92ef6b99762d149fd1effef42d26c86466 Mon Sep 17 00:00:00 2001 From: Manolo Gouy Date: Sun, 3 Apr 2016 14:25:42 +0000 Subject: 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 --- src/drivers/X11/Fl_X11_Window_Driver.H | 1 + src/drivers/X11/Fl_X11_Window_Driver.cxx | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) (limited to 'src/drivers/X11') diff --git a/src/drivers/X11/Fl_X11_Window_Driver.H b/src/drivers/X11/Fl_X11_Window_Driver.H index 2c4c432aa..cf71bb935 100644 --- a/src/drivers/X11/Fl_X11_Window_Driver.H +++ b/src/drivers/X11/Fl_X11_Window_Driver.H @@ -114,6 +114,7 @@ public: virtual void wait_for_expose(); virtual int can_do_overlay(); virtual void redraw_overlay(); + virtual int 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); }; 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$". // -- cgit v1.2.3