diff options
| author | Manolo Gouy <Manolo> | 2014-12-20 07:19:23 +0000 |
|---|---|---|
| committer | Manolo Gouy <Manolo> | 2014-12-20 07:19:23 +0000 |
| commit | f3a84c0ee5f88fe664d759106724f786c706f817 (patch) | |
| tree | 3541953164e2d24c31ae46ef11f2c2e86b3873a3 /src/glut_compatability.cxx | |
| parent | a7dc3ea9e24399f318a9478fbcffe04ff2870de6 (diff) | |
Changed OpenGL support for the Mac OS X platform: use cocoa instead of deprecated AGL.
All changes are mac-specific, except a very minor change in file src/gl_draw.cxx
where string drawing wrongly claimed to support @symbol, not possible
because symbols are drawn using non-GL primitives.
Unchanged application code can use the new FLTK code.
In addition, the new code allows mac applications to draw OpenGL scenes
at high resolution on so-called 'retina' displays, but this requires some
support from app code. They must call, before opening GL windows,
Fl::use_high_resolution(1);
and change their glViewport() calls as follows
glViewport(0, 0, pxel_w(), pixel_h());
This uses 2 new member functions of the Fl_Gl_Window class,
pixel_w() and pixel_h() returning the window dimensions in pixel
units, that is, twice the w() and h() when the window is mapped
on a retina display.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@10498 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/glut_compatability.cxx')
| -rw-r--r-- | src/glut_compatability.cxx | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/glut_compatability.cxx b/src/glut_compatability.cxx index eadf43c59..1f1d6a6ff 100644 --- a/src/glut_compatability.cxx +++ b/src/glut_compatability.cxx @@ -38,6 +38,9 @@ # include <dlfcn.h> # endif // HAVE_DLFCN_H # define MAXWINDOWS 32 +# ifdef __APPLE__ +# include <FL/x.H> +# endif static Fl_Glut_Window *windows[MAXWINDOWS+1]; static void (*glut_idle_func)() = 0; // global glut idle function @@ -59,7 +62,7 @@ static int indraw; void Fl_Glut_Window::draw() { glut_window = this; indraw = 1; - if (!valid()) {reshape(w(),h()); valid(1);} + if (!valid()) {reshape(pixel_w(),pixel_h()); valid(1);} display(); indraw = 0; } @@ -70,7 +73,7 @@ void glutSwapBuffers() { void Fl_Glut_Window::draw_overlay() { glut_window = this; - if (!valid()) {reshape(w(),h()); valid(1);} + if (!valid()) {reshape(pixel_w(),pixel_h()); valid(1);} overlaydisplay(); } @@ -80,6 +83,13 @@ int Fl_Glut_Window::handle(int event) { make_current(); int ex = Fl::event_x(); int ey = Fl::event_y(); +#ifdef __APPLE__ + if (shown()) { + int factor = Fl_X::resolution_scaling_factor(this); + ex *= factor; + ey *= factor; + } +#endif int button; switch (event) { @@ -377,8 +387,8 @@ int glutGet(GLenum type) { case GLUT_RETURN_ZERO: return 0; case GLUT_WINDOW_X: return glut_window->x(); case GLUT_WINDOW_Y: return glut_window->y(); - case GLUT_WINDOW_WIDTH: return glut_window->w(); - case GLUT_WINDOW_HEIGHT: return glut_window->h(); + case GLUT_WINDOW_WIDTH: return glut_window->pixel_w(); + case GLUT_WINDOW_HEIGHT: return glut_window->pixel_h(); case GLUT_WINDOW_PARENT: if (glut_window->parent()) return ((Fl_Glut_Window *)(glut_window->parent()))->number; |
