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 */
|
||||
virtual const char *name() = 0;
|
||||
/** \brief Prints a widget
|
||||
\param p the printer
|
||||
\param w the widget
|
||||
\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
|
||||
|
|
|
@ -66,7 +66,11 @@ void Fl_Abstract_Printer::print_widget(Fl_Widget* widget, int delta_x, int delta
|
|||
if (widget->as_gl_window()) {
|
||||
Fl_Plugin_Manager pm("fltk:device");
|
||||
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) {
|
||||
widget->draw();
|
||||
|
|
|
@ -40,7 +40,7 @@ static void imgProviderReleaseData (void *info, const void *data, size_t size)
|
|||
}
|
||||
#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
|
||||
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);
|
||||
if(image == NULL) return;
|
||||
CGContextSaveGState(fl_gc);
|
||||
int w, h;
|
||||
printer->printable_rect(&w, &h);
|
||||
CGContextTranslateCTM(fl_gc, 0, h);
|
||||
CGContextTranslateCTM(fl_gc, 0, height);
|
||||
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());
|
||||
CGContextDrawImage(fl_gc, rect, 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 {
|
||||
public:
|
||||
Fl_Gl_Device_Plugin() : Fl_Device_Plugin(name()) { }
|
||||
/** \brief Returns the plugin name */
|
||||
virtual const char *name() { return "opengl.device.fltk.org"; }
|
||||
/** \brief Prints a widget
|
||||
\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) {
|
||||
virtual int print(Fl_Widget *w, int x, int y, int height) {
|
||||
Fl_Gl_Window *glw = w->as_gl_window();
|
||||
if (!glw) return 0;
|
||||
print_gl_window(p, glw, x, y);
|
||||
print_gl_window(glw, x, y, height);
|
||||
return 1;
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue