mirror of https://github.com/fltk/fltk
Fl_Gl_Device_Plugin: more device-independant API
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@7458 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
parent
f44190d356
commit
24b8386bf1
|
@ -206,11 +206,11 @@ public:
|
||||||
/** \brief Returns the plugin name */
|
/** \brief Returns the plugin name */
|
||||||
virtual const char *name() = 0;
|
virtual const char *name() = 0;
|
||||||
/** \brief Prints a widget
|
/** \brief Prints a widget
|
||||||
\param p the printer
|
|
||||||
\param w the widget
|
\param w the widget
|
||||||
\param x,y offsets where to print relatively to coordinates origin
|
\param x,y offsets where to print relatively to coordinates origin
|
||||||
|
\param height height of the current drawing area
|
||||||
*/
|
*/
|
||||||
virtual int print(Fl_Abstract_Printer* p, Fl_Widget* w, int x, int y) { return 0; }
|
virtual int print(Fl_Widget* w, int x, int y, int height) { return 0; }
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // Fl_Printer_H
|
#endif // Fl_Printer_H
|
||||||
|
|
|
@ -66,7 +66,11 @@ void Fl_Abstract_Printer::print_widget(Fl_Widget* widget, int delta_x, int delta
|
||||||
if (widget->as_gl_window()) {
|
if (widget->as_gl_window()) {
|
||||||
Fl_Plugin_Manager pm("fltk:device");
|
Fl_Plugin_Manager pm("fltk:device");
|
||||||
Fl_Device_Plugin *pi = (Fl_Device_Plugin*)pm.plugin("opengl.device.fltk.org");
|
Fl_Device_Plugin *pi = (Fl_Device_Plugin*)pm.plugin("opengl.device.fltk.org");
|
||||||
if (pi) drawn_by_plugin = pi->print(this, widget, 0, 0);
|
if (pi) {
|
||||||
|
int width, height;
|
||||||
|
this->printable_rect(&width, &height);
|
||||||
|
drawn_by_plugin = pi->print(widget, 0, 0, height);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!drawn_by_plugin) {
|
if (!drawn_by_plugin) {
|
||||||
widget->draw();
|
widget->draw();
|
||||||
|
|
|
@ -40,7 +40,7 @@ static void imgProviderReleaseData (void *info, const void *data, size_t size)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void print_gl_window(Fl_Abstract_Printer *printer, Fl_Gl_Window *glw, int x, int y)
|
static void print_gl_window(Fl_Gl_Window *glw, int x, int y, int height)
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
HDC save_gc = fl_gc;
|
HDC save_gc = fl_gc;
|
||||||
|
@ -105,11 +105,9 @@ static void print_gl_window(Fl_Abstract_Printer *printer, Fl_Gl_Window *glw, int
|
||||||
, provider, NULL, false, kCGRenderingIntentDefault);
|
, provider, NULL, false, kCGRenderingIntentDefault);
|
||||||
if(image == NULL) return;
|
if(image == NULL) return;
|
||||||
CGContextSaveGState(fl_gc);
|
CGContextSaveGState(fl_gc);
|
||||||
int w, h;
|
CGContextTranslateCTM(fl_gc, 0, height);
|
||||||
printer->printable_rect(&w, &h);
|
|
||||||
CGContextTranslateCTM(fl_gc, 0, h);
|
|
||||||
CGContextScaleCTM(fl_gc, 1.0f, -1.0f);
|
CGContextScaleCTM(fl_gc, 1.0f, -1.0f);
|
||||||
CGRect rect = { { x, h - y - glw->h() }, { glw->w(), glw->h() } };
|
CGRect rect = { { x, height - y - glw->h() }, { glw->w(), glw->h() } };
|
||||||
Fl_X::q_begin_image(rect, 0, 0, glw->w(), glw->h());
|
Fl_X::q_begin_image(rect, 0, 0, glw->w(), glw->h());
|
||||||
CGContextDrawImage(fl_gc, rect, image);
|
CGContextDrawImage(fl_gc, rect, image);
|
||||||
Fl_X::q_end_image();
|
Fl_X::q_end_image();
|
||||||
|
@ -130,17 +128,11 @@ static void print_gl_window(Fl_Abstract_Printer *printer, Fl_Gl_Window *glw, int
|
||||||
class Fl_Gl_Device_Plugin : public Fl_Device_Plugin {
|
class Fl_Gl_Device_Plugin : public Fl_Device_Plugin {
|
||||||
public:
|
public:
|
||||||
Fl_Gl_Device_Plugin() : Fl_Device_Plugin(name()) { }
|
Fl_Gl_Device_Plugin() : Fl_Device_Plugin(name()) { }
|
||||||
/** \brief Returns the plugin name */
|
|
||||||
virtual const char *name() { return "opengl.device.fltk.org"; }
|
virtual const char *name() { return "opengl.device.fltk.org"; }
|
||||||
/** \brief Prints a widget
|
virtual int print(Fl_Widget *w, int x, int y, int height) {
|
||||||
\param p the printer
|
|
||||||
\param w the widget
|
|
||||||
\param x,y offsets where to print relatively to coordinates origin
|
|
||||||
*/
|
|
||||||
virtual int print(Fl_Abstract_Printer *p, Fl_Widget *w, int x, int y) {
|
|
||||||
Fl_Gl_Window *glw = w->as_gl_window();
|
Fl_Gl_Window *glw = w->as_gl_window();
|
||||||
if (!glw) return 0;
|
if (!glw) return 0;
|
||||||
print_gl_window(p, glw, x, y);
|
print_gl_window(glw, x, y, height);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue