From b0696db39a39d9c2aadd35f74902ff22535e4d1b Mon Sep 17 00:00:00 2001 From: Manolo Gouy Date: Tue, 24 Nov 2015 14:26:52 +0000 Subject: Added new method Fl_Copy_Surface::draw_decorated_window() that copies a window to the clipboard together with its title bar and borders. This requires very little new code because the capture of window decorations is shared with the Fl_Paged_Device::print window() method. The device test program is changed to call the new method. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@10928 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- src/Fl_x.cxx | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) (limited to 'src/Fl_x.cxx') diff --git a/src/Fl_x.cxx b/src/Fl_x.cxx index 094f271a5..7bb8761f2 100644 --- a/src/Fl_x.cxx +++ b/src/Fl_x.cxx @@ -3024,6 +3024,11 @@ void Fl_Paged_Device::print_window(Fl_Window *win, int x_offset, int y_offset) this->print_widget(win, x_offset, y_offset); return; } + draw_decorated_window(win, x_offset, y_offset, this); +} + +void Fl_Paged_Device::draw_decorated_window(Fl_Window *win, int x_offset, int y_offset, Fl_Surface_Device *toset) +{ Fl_Display_Device::display_device()->set_current(); win->show(); Fl::check(); @@ -3052,7 +3057,7 @@ void Fl_Paged_Device::print_window(Fl_Window *win, int x_offset, int y_offset) bottom_image = fl_read_image(NULL, 0, bt + win->h(), -(win->w() + 2*bx), bx); } fl_window = from; - this->set_current(); + toset->set_current(); if (top_image) { fl_draw_image(top_image, x_offset, y_offset, win->w() + 2 * bx, bt, 3); delete[] top_image; @@ -3110,14 +3115,29 @@ void printFront(Fl_Widget *o, void *data) o->window()->show(); } +#include +void copyFront(Fl_Widget *o, void *data) +{ + o->window()->hide(); + Fl_Window *win = Fl::first_window(); + if (!win) return; + Fl_Copy_Surface *surf = new Fl_Copy_Surface(win->decorated_w(), win->decorated_h()); + surf->set_current(); + surf->draw_decorated_window(win); // draw the window content + delete surf; // put the window on the clipboard + o->window()->show(); +} + void preparePrintFront(void) { static int first=1; if(!first) return; first=0; - static Fl_Window w(0,0,150,30); - static Fl_Button b(0,0,w.w(),w.h(), "Print front window"); - b.callback(printFront); + static Fl_Window w(0,0,140,60); + static Fl_Button bp(0,0,w.w(),30, "Print front window"); + bp.callback(printFront); + static Fl_Button bc(0,30,w.w(),30, "Copy front window"); + bc.callback(copyFront); w.end(); w.show(); } -- cgit v1.2.3