summaryrefslogtreecommitdiff
path: root/src/drivers/PicoSDL
diff options
context:
space:
mode:
authorMatthias Melcher <fltk@matthiasm.com>2016-03-13 22:16:37 +0000
committerMatthias Melcher <fltk@matthiasm.com>2016-03-13 22:16:37 +0000
commitb496d18b85917106c48e8e6f74115b3122b603d1 (patch)
tree4d96befa4377a81c89c6a32f4d66220199572938 /src/drivers/PicoSDL
parent30756ae3500a62bd8f63b4df3eb3ca8f6b8b0b70 (diff)
Fixed 'flush()' code for single, double, and overlay buffering
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11359 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/drivers/PicoSDL')
-rw-r--r--src/drivers/PicoSDL/Fl_PicoSDL_Screen_Driver.cxx42
-rw-r--r--src/drivers/PicoSDL/Fl_PicoSDL_Window_Driver.H6
-rw-r--r--src/drivers/PicoSDL/Fl_PicoSDL_Window_Driver.cxx30
3 files changed, 55 insertions, 23 deletions
diff --git a/src/drivers/PicoSDL/Fl_PicoSDL_Screen_Driver.cxx b/src/drivers/PicoSDL/Fl_PicoSDL_Screen_Driver.cxx
index 82d94dcd5..942c5a523 100644
--- a/src/drivers/PicoSDL/Fl_PicoSDL_Screen_Driver.cxx
+++ b/src/drivers/PicoSDL/Fl_PicoSDL_Screen_Driver.cxx
@@ -52,24 +52,27 @@ double Fl_PicoSDL_Screen_Driver::wait(double time_to_wait)
switch (e.type) {
case SDL_QUIT:
exit(0);
- case SDL_WINDOWEVENT_EXPOSED:
- case SDL_WINDOWEVENT_SHOWN:
- { // not happening!
- //event->window.windowID
- if ( !window ) break;;
- Fl_X *i = Fl_X::i(Fl::first_window());
- i->wait_for_expose = 0;
-
- if ( i->region ) {
- XDestroyRegion(i->region);
- i->region = 0;
+ case SDL_WINDOWEVENT:
+ switch (e.window.event) {
+ case SDL_WINDOWEVENT_EXPOSED:
+ case SDL_WINDOWEVENT_SHOWN:
+ {
+ //event->window.windowID
+ if ( !window ) break;;
+ Fl_X *i = Fl_X::i(Fl::first_window());
+ i->wait_for_expose = 0;
+
+ if ( i->region ) {
+ XDestroyRegion(i->region);
+ i->region = 0;
+ }
+ window->clear_damage(FL_DAMAGE_ALL);
+ i->flush();
+ window->clear_damage();
+ Fl_X::first->wait_for_expose = 0;
+ }
+ break;
}
- window->clear_damage(FL_DAMAGE_ALL);
- i->flush();
- window->clear_damage();
- Fl_X::first->wait_for_expose = 0;
- }
- break;
case SDL_MOUSEBUTTONDOWN:
if (!window) break;
Fl::e_is_click = e.button.clicks;
@@ -204,6 +207,11 @@ void Fl::remove_fd(int)
{
}
+void Fl_X::flush()
+{
+ w->flush();
+}
+
//
// End of "$Id: Fl_PicoSDL_Screen_Driver.cxx 11253 2016-03-01 00:54:21Z matt $".
diff --git a/src/drivers/PicoSDL/Fl_PicoSDL_Window_Driver.H b/src/drivers/PicoSDL/Fl_PicoSDL_Window_Driver.H
index cc4fb81c4..7cb2e7c43 100644
--- a/src/drivers/PicoSDL/Fl_PicoSDL_Window_Driver.H
+++ b/src/drivers/PicoSDL/Fl_PicoSDL_Window_Driver.H
@@ -40,7 +40,11 @@ public:
virtual ~Fl_PicoSDL_Window_Driver();
virtual Fl_X *makeWindow();
- virtual void flush();
+
+ // --- window management
+ virtual void flush_single();
+ virtual void flush_double();
+ virtual void flush_overlay();
};
diff --git a/src/drivers/PicoSDL/Fl_PicoSDL_Window_Driver.cxx b/src/drivers/PicoSDL/Fl_PicoSDL_Window_Driver.cxx
index a9a7fc95f..346eea241 100644
--- a/src/drivers/PicoSDL/Fl_PicoSDL_Window_Driver.cxx
+++ b/src/drivers/PicoSDL/Fl_PicoSDL_Window_Driver.cxx
@@ -72,7 +72,7 @@ Fl_X *Fl_PicoSDL_Window_Driver::makeWindow()
pWindow->set_visible();
pWindow->redraw();
- flush();
+ pWindow->flush();
int old_event = Fl::e_number;
pWindow->handle(Fl::e_number = FL_SHOW);
Fl::e_number = old_event;
@@ -81,14 +81,34 @@ Fl_X *Fl_PicoSDL_Window_Driver::makeWindow()
}
-void Fl_PicoSDL_Window_Driver::flush()
+void Fl_PicoSDL_Window_Driver::flush_single()
{
- SDL_RenderClear((SDL_Renderer*)fl_window);
- pWindow->flush();
- SDL_RenderPresent((SDL_Renderer*)fl_window);
+ if (!pWindow->shown()) return;
+ pWindow->make_current();
+ Fl_X *i = Fl_X::i(pWindow);
+ if (!i) return;
+ fl_clip_region(i->region);
+ i->region = 0;
+// SDL_RenderClear((SDL_Renderer*)i->xid);
+ pWindow->draw();
+ SDL_RenderPresent((SDL_Renderer*)i->xid);
+}
+
+
+void Fl_PicoSDL_Window_Driver::flush_double()
+{
+ flush_single();
}
+void Fl_PicoSDL_Window_Driver::flush_overlay()
+{
+ flush_single();
+ // draw_overlay();
+}
+
+
+
//
// End of "$Id: Fl_PicoSDL_Window_Driver.cxx 11253 2016-03-01 00:54:21Z matt $".
// \ No newline at end of file