summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthias Melcher <fltk@matthiasm.com>2016-03-13 23:03:42 +0000
committerMatthias Melcher <fltk@matthiasm.com>2016-03-13 23:03:42 +0000
commit5c3c42f464d05b4e1885a512ed02bb7c5a79a373 (patch)
treeb864878bcf3f87d741ddef4bef21220a74119983 /src
parentb496d18b85917106c48e8e6f74115b3122b603d1 (diff)
Extended double buffering fix to Android
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11360 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src')
-rw-r--r--src/drivers/Pico/Fl_Pico_Window_Driver.cxx1
-rw-r--r--src/drivers/PicoAndroid/Fl_PicoAndroid_Graphics_Driver.cxx87
-rw-r--r--src/drivers/PicoAndroid/Fl_PicoAndroid_Screen_Driver.H2
-rw-r--r--src/drivers/PicoAndroid/Fl_PicoAndroid_Screen_Driver.cxx92
-rw-r--r--src/drivers/PicoAndroid/Fl_PicoAndroid_Window_Driver.H13
-rw-r--r--src/drivers/PicoAndroid/Fl_PicoAndroid_Window_Driver.cxx33
6 files changed, 50 insertions, 178 deletions
diff --git a/src/drivers/Pico/Fl_Pico_Window_Driver.cxx b/src/drivers/Pico/Fl_Pico_Window_Driver.cxx
index bb5b4e612..f113a3ca8 100644
--- a/src/drivers/Pico/Fl_Pico_Window_Driver.cxx
+++ b/src/drivers/Pico/Fl_Pico_Window_Driver.cxx
@@ -22,6 +22,7 @@
#include <FL/x.H>
#include <FL/Fl_Window.H>
+#include <FL/fl_draw.h>
diff --git a/src/drivers/PicoAndroid/Fl_PicoAndroid_Graphics_Driver.cxx b/src/drivers/PicoAndroid/Fl_PicoAndroid_Graphics_Driver.cxx
index fd042bef4..f3ea56e23 100644
--- a/src/drivers/PicoAndroid/Fl_PicoAndroid_Graphics_Driver.cxx
+++ b/src/drivers/PicoAndroid/Fl_PicoAndroid_Graphics_Driver.cxx
@@ -44,83 +44,6 @@ Fl_Graphics_Driver *Fl_Graphics_Driver::newMainGraphicsDriver()
}
-
-
-static GLint vertices[][3] = {
- { -0x10000, -0x10000, -0x10000 },
- { 0x10000, -0x10000, -0x10000 },
- { 0x10000, 0x10000, -0x10000 },
- { -0x10000, 0x10000, -0x10000 },
- { -0x10000, -0x10000, 0x10000 },
- { 0x10000, -0x10000, 0x10000 },
- { 0x10000, 0x10000, 0x10000 },
- { -0x10000, 0x10000, 0x10000 }
-};
-
-static GLint colors[][4] = {
- { 0x00000, 0x00000, 0x00000, 0x10000 },
- { 0x10000, 0x00000, 0x00000, 0x10000 },
- { 0x10000, 0x10000, 0x00000, 0x10000 },
- { 0x00000, 0x10000, 0x00000, 0x10000 },
- { 0x00000, 0x00000, 0x10000, 0x10000 },
- { 0x10000, 0x00000, 0x10000, 0x10000 },
- { 0x10000, 0x10000, 0x10000, 0x10000 },
- { 0x00000, 0x10000, 0x10000, 0x10000 }
-};
-
-GLubyte indices[] = {
- 0, 4, 5, 0, 5, 1,
- 1, 5, 6, 1, 6, 2,
- 2, 6, 7, 2, 7, 3,
- 3, 7, 4, 3, 4, 0,
- 4, 7, 6, 4, 6, 5,
- 3, 0, 1, 3, 1, 2
-};
-
-static void drawSomething()
-{
- /*
- static float _angle = 0.0f;
-
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glTranslatef(0, 0, -3.0f);
- glRotatef(_angle, 0, 1, 0);
- glRotatef(_angle*0.25f, 1, 0, 0);
-
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_COLOR_ARRAY);
-
- glFrontFace(GL_CW);
- glVertexPointer(3, GL_FIXED, 0, vertices);
- glColorPointer(4, GL_FIXED, 0, colors);
- glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_BYTE, indices);
-
- _angle += 1.2f;
- */
-
- GLfloat q3[] = {
- -10,-10,
- 10,-10,
- 10,10,
- -10,10
- };
-
- uchar r, g, b;
- Fl::get_color(FL_RED, r, g, b);
-// Fl::get_color(Fl_Graphics_Driver::color(), r, g, b);
- glColor4ub(r, g, b, 255);
-
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(2, GL_FLOAT, 0, q3);
- glDrawArrays(GL_TRIANGLE_FAN,0,4);
- glDisableClientState(GL_VERTEX_ARRAY);
-}
-
-
-
void Fl_PicoAndroid_Graphics_Driver::rectf(int x, int y, int w, int h)
{
GLfloat q3[] = {
@@ -136,10 +59,8 @@ void Fl_PicoAndroid_Graphics_Driver::rectf(int x, int y, int w, int h)
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, q3);
- glDrawArrays(GL_TRIANGLE_FAN,0,4);
+ glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
glDisableClientState(GL_VERTEX_ARRAY);
-
- LOGI("Rect: %d %d %d %d", x, y, w, h);
}
@@ -156,7 +77,7 @@ void Fl_PicoAndroid_Graphics_Driver::line(int x, int y, int x1, int y1)
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, q3);
- glDrawArrays(GL_LINES,0,2);
+ glDrawArrays(GL_LINES, 0, 2);
glDisableClientState(GL_VERTEX_ARRAY);
}
@@ -172,8 +93,8 @@ void Fl_PicoAndroid_Graphics_Driver::point(int x, int y)
glColor4ub(r, g, b, 255);
glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(2, GL_POINTS, 0, q3);
- glDrawArrays(GL_LINES,0,1);
+ glVertexPointer(2, GL_FLOAT, 0, q3);
+ glDrawArrays(GL_POINTS, 0, 1);
glDisableClientState(GL_VERTEX_ARRAY);
}
diff --git a/src/drivers/PicoAndroid/Fl_PicoAndroid_Screen_Driver.H b/src/drivers/PicoAndroid/Fl_PicoAndroid_Screen_Driver.H
index b966312c9..f785dd4a4 100644
--- a/src/drivers/PicoAndroid/Fl_PicoAndroid_Screen_Driver.H
+++ b/src/drivers/PicoAndroid/Fl_PicoAndroid_Screen_Driver.H
@@ -58,6 +58,8 @@ class FL_EXPORT Fl_PicoAndroid_Screen_Driver : public Fl_Pico_Screen_Driver
int32_t handleInputEvent(struct android_app* app, AInputEvent* event);
void initDisplay();
void termDisplay();
+
+public:
void drawFrame();
public:
diff --git a/src/drivers/PicoAndroid/Fl_PicoAndroid_Screen_Driver.cxx b/src/drivers/PicoAndroid/Fl_PicoAndroid_Screen_Driver.cxx
index 26563689c..cd3f2af9a 100644
--- a/src/drivers/PicoAndroid/Fl_PicoAndroid_Screen_Driver.cxx
+++ b/src/drivers/PicoAndroid/Fl_PicoAndroid_Screen_Driver.cxx
@@ -137,7 +137,7 @@ void Fl_PicoAndroid_Screen_Driver::drawFrame()
return;
}
eglSwapBuffers(pDisplay, pSurface);
- LOGI("Swapping buffers");
+// LOGI("Swapping buffers");
}
@@ -253,7 +253,7 @@ int32_t Fl_PicoAndroid_Screen_Driver::handleInputEvent(struct android_app* app,
// break;
}
// AMOTION_EVENT_ACTION_MASK
- LOGI("Motion at %d, %d", x, y);
+// LOGI("Motion at %d, %d", x, y);
// fl_unlock_function();
Fl_X::first->w->redraw();
return 1;
@@ -261,98 +261,12 @@ int32_t Fl_PicoAndroid_Screen_Driver::handleInputEvent(struct android_app* app,
return 0;
}
-#if 0
-static int keysym[] = { 0, FL_Button+1, FL_Button+3, FL_Button+2 };
-static int px, py;
-static char suppressed = 0;
-
-fl_lock_function();
-
-Fl_Window *window = (Fl_Window*)[(FLWindow*)[theEvent window] getFl_Window];
-if ( !window->shown() ) {
- fl_unlock_function();
- return;
-}
-Fl_Window *first = Fl::first_window();
-if (first != window && !(first->modal() || first->non_modal())) Fl::first_window(window);
-NSPoint pos = [theEvent locationInWindow];
-pos.y = window->h() - pos.y;
-NSInteger btn = [theEvent buttonNumber] + 1;
-NSUInteger mods = [theEvent modifierFlags];
-int sendEvent = 0;
-
-NSEventType etype = [theEvent type];
-if (etype == NSLeftMouseDown || etype == NSRightMouseDown || etype == NSOtherMouseDown) {
- if (btn == 1) Fl::e_state |= FL_BUTTON1;
- else if (btn == 3) Fl::e_state |= FL_BUTTON2;
- else if (btn == 2) Fl::e_state |= FL_BUTTON3;
- }
-else if (etype == NSLeftMouseUp || etype == NSRightMouseUp || etype == NSOtherMouseUp) {
- if (btn == 1) Fl::e_state &= ~FL_BUTTON1;
- else if (btn == 3) Fl::e_state &= ~FL_BUTTON2;
- else if (btn == 2) Fl::e_state &= ~FL_BUTTON3;
- }
-
-switch ( etype ) {
- case NSLeftMouseDown:
- case NSRightMouseDown:
- case NSOtherMouseDown:
- suppressed = 0;
- sendEvent = FL_PUSH;
- Fl::e_is_click = 1;
- px = (int)pos.x; py = (int)pos.y;
- if ([theEvent clickCount] > 1)
- Fl::e_clicks++;
- else
- Fl::e_clicks = 0;
- // fall through
- case NSLeftMouseUp:
- case NSRightMouseUp:
- case NSOtherMouseUp:
- if (suppressed) {
- suppressed = 0;
- break;
- }
- if ( !window ) break;
- if ( !sendEvent ) {
- sendEvent = FL_RELEASE;
- }
- Fl::e_keysym = keysym[ btn ];
- // fall through
- case NSMouseMoved:
- suppressed = 0;
- if ( !sendEvent ) {
- sendEvent = FL_MOVE;
- }
- // fall through
- case NSLeftMouseDragged:
- case NSRightMouseDragged:
- case NSOtherMouseDragged: {
- if (suppressed) break;
- if ( !sendEvent ) {
- sendEvent = FL_MOVE; // Fl::handle will convert into FL_DRAG
- if (fabs(pos.x-px)>5 || fabs(pos.y-py)>5)
- Fl::e_is_click = 0;
- }
- mods_to_e_state( mods );
- update_e_xy_and_e_xy_root([theEvent window]);
- Fl::handle( sendEvent, window );
- }
- break;
- default:
- break;
-}
-
-fl_unlock_function();
-
-return;
-#endif
extern int main(int argc, const char **argv);
void android_main(struct android_app* state)
{
- LOGI("Android Main call");
+// LOGI("Android Main call");
Fl_PicoAndroid_Screen_Driver *This = (Fl_PicoAndroid_Screen_Driver*)Fl::screen_driver();
This->android_main(state);
static const char *argv[1] = { "native-activity" };
diff --git a/src/drivers/PicoAndroid/Fl_PicoAndroid_Window_Driver.H b/src/drivers/PicoAndroid/Fl_PicoAndroid_Window_Driver.H
index adf0acbd3..94ce5bff2 100644
--- a/src/drivers/PicoAndroid/Fl_PicoAndroid_Window_Driver.H
+++ b/src/drivers/PicoAndroid/Fl_PicoAndroid_Window_Driver.H
@@ -39,7 +39,18 @@ public:
virtual ~Fl_PicoAndroid_Window_Driver();
virtual Fl_X *makeWindow();
- virtual void flush();
+
+ // --- window data
+// virtual int decorated_w() = 0;
+// virtual int decorated_h() = 0;
+
+ // --- window management
+// virtual void take_focus();
+ virtual void flush_single();
+ virtual void flush_double();
+ virtual void flush_overlay();
+// virtual void draw_begin();
+// virtual void draw_end();
};
diff --git a/src/drivers/PicoAndroid/Fl_PicoAndroid_Window_Driver.cxx b/src/drivers/PicoAndroid/Fl_PicoAndroid_Window_Driver.cxx
index 17957312e..4921081e7 100644
--- a/src/drivers/PicoAndroid/Fl_PicoAndroid_Window_Driver.cxx
+++ b/src/drivers/PicoAndroid/Fl_PicoAndroid_Window_Driver.cxx
@@ -33,6 +33,7 @@
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Window_Driver.H>
+#include <FL/fl_draw.h>
Fl_Window_Driver *Fl_Window_Driver::newWindowDriver(Fl_Window *win)
@@ -85,7 +86,7 @@ Fl_X *Fl_PicoAndroid_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;
@@ -93,19 +94,41 @@ Fl_X *Fl_PicoAndroid_Window_Driver::makeWindow()
return x;
}
-#include <FL/fl_draw.h>
-void Fl_Window_Driver::draw_begin()
+void Fl_PicoAndroid_Window_Driver::flush_single()
+{
+ glClearColor(0, 0, 0, 1);
+ glClear(GL_COLOR_BUFFER_BIT);
+ Fl_X *i = Fl_X::i(pWindow);
+ if (!i) return;
+ fl_clip_region(i->region);
+ i->region = 0;
+ pWindow->draw();
+ Fl_PicoAndroid_Screen_Driver *scr = (Fl_PicoAndroid_Screen_Driver*)Fl::screen_driver();
+ scr->drawFrame();
+}
+
+
+void Fl_PicoAndroid_Window_Driver::flush_double()
+{
+ flush_single();
+}
+
+
+void Fl_PicoAndroid_Window_Driver::flush_overlay()
{
+ flush_single();
}
-void Fl_Window_Driver::draw_end()
+void Fl_X::flush()
{
+ w->flush();
}
+#if 0
void Fl_PicoAndroid_Window_Driver::flush()
{
Fl_PicoAndroid_Screen_Driver *scr = (Fl_PicoAndroid_Screen_Driver*)Fl::screen_driver();
@@ -117,7 +140,7 @@ void Fl_PicoAndroid_Window_Driver::flush()
// fl_rectf(10, 10, 300, 400);
scr->drawFrame();
}
-
+#endif
//
// End of "$Id: Fl_PicoSDL_Window_Driver.cxx 11253 2016-03-01 00:54:21Z matt $".