Some fine tuning after introduction of Fl_Gl_Window-capable Fl_Printer::print_widget()

git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@7281 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
Manolo Gouy 2010-03-17 07:56:50 +00:00
parent 762d02fb62
commit 8e4d054650
4 changed files with 5 additions and 44 deletions

View File

@ -45,13 +45,6 @@ void Fl_Virtual_Printer::print_widget(Fl_Widget* widget, int delta_x, int delta_
}
// if widget is a window, clip all drawings to the window area
if (is_window) fl_push_clip(0, 0, widget->w(), widget->h() );
#ifdef __APPLE__
CGContextRef save_gc = fl_gc;
#elif defined(WIN32) // && !defined(__CYGWIN__)
HDC save_gc = fl_gc;
#else
_XGC *save_gc = fl_gc; // FIXME
#endif
// we do some trickery to recognize OpenGL windows and draw them via a plugin
int drawn_by_plugin = 0;
if (widget->as_gl_window()) {
@ -59,10 +52,9 @@ void Fl_Virtual_Printer::print_widget(Fl_Widget* widget, int delta_x, int delta_
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 (!drawn_by_plugin)
widget->draw();
fl_gc = save_gc;
if (!drawn_by_plugin) {
widget->draw();
}
if (is_window) fl_pop_clip();
// find subwindows of widget and print them
traverse(widget);

View File

@ -91,8 +91,8 @@ void Fl_Gl_Printer::print_gl_window(Fl_Gl_Window *glw, int x, int y)
}
/*
This class will make sure that OpenGL printing is availbale if fltk_gl
was linked to the programm.
This class will make sure that OpenGL printing is available if fltk_gl
was linked to the program.
*/
class Fl_Gl_Device_Plugin : public Fl_Device_Plugin {
public:

View File

@ -170,8 +170,6 @@ void print_cb(Fl_Widget *w, void *data)
if( printer.start_page() ) return;
printer.scale(0.5,0.5);
printer.print_widget( win );
printer.print_gl_window( cube, cube->x(), cube->y() );
printer.print_gl_window( cube2, cube2->x(), cube2->y() );
printer.end_page();
printer.end_job();
}

View File

@ -1420,38 +1420,9 @@ menu(int choice)
}
}
// added to demo printing
#include <FL/Fl_Sys_Menu_Bar.H>
#include <FL/Fl_Gl_Printer.H>
void print_cb(Fl_Widget *w, void *data)
{
Fl_Gl_Printer printer;
Fl_Window *win = Fl::first_window();
if(!win) return;
if( printer.start_job(1) ) return;
if( printer.start_page() ) return;
printer.scale(0.68,0.68);
printer.print_gl_window( (Fl_Gl_Window*)win );
printer.end_page();
printer.end_job();
}
// end of printing demo
int
main(int argc, char **argv)
{
// added to demo printing
static Fl_Menu_Item items[] = {
{ "Menu", 0, 0, 0, FL_SUBMENU },
{ "Print", 0, print_cb, 0, 0 },
{ 0 },
{ 0 }
};
Fl_Sys_Menu_Bar *menubar_;
menubar_ = new Fl_Sys_Menu_Bar(0, 0, 1, 25);
menubar_->menu(items);
// end of printing demo
long i;
glutInit(&argc, argv);