diff options
| author | Manolo Gouy <Manolo> | 2011-04-17 08:48:40 +0000 |
|---|---|---|
| committer | Manolo Gouy <Manolo> | 2011-04-17 08:48:40 +0000 |
| commit | ddc4b21b5502a7331e09c540a3e3d9d5774775a3 (patch) | |
| tree | 00ff18960b768bd974bd639d198187a26e46e12c | |
| parent | 8212e4bfe793db92b5fea731945bf9b7bc1acbcd (diff) | |
Fixed Fl_Paged_Device::print_window() that did not work under Windows seven.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@8595 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
| -rw-r--r-- | src/Fl_win32.cxx | 13 | ||||
| -rw-r--r-- | src/fl_read_image_win32.cxx | 23 |
2 files changed, 17 insertions, 19 deletions
diff --git a/src/Fl_win32.cxx b/src/Fl_win32.cxx index 20b9a2b00..734e6a60a 100644 --- a/src/Fl_win32.cxx +++ b/src/Fl_win32.cxx @@ -1976,12 +1976,15 @@ void Fl_Paged_Device::print_window(Fl_Window *win, int x_offset, int y_offset) win->show(); Fl::check(); win->make_current(); + HDC save_gc = fl_gc; + fl_gc = GetDC(NULL); // get the screen device context // capture the 4 window sides from screen - // use negative 4th argument to allow negative 2nd or 3rd arguments - uchar *top_image = fl_read_image(NULL, -bx, - bt - by, -ww, bt + by); - uchar *left_image = fl_read_image(NULL, -bx, - bt - by, -bx, wh); - uchar *right_image = fl_read_image(NULL, win->w(), - bt - by, -bx, wh); - uchar *bottom_image = fl_read_image(NULL, -bx, win->h(), -ww, by); + RECT r; GetWindowRect(fl_window, &r); + uchar *top_image = fl_read_image(NULL, r.left, r.top, ww, bt + by); + uchar *left_image = fl_read_image(NULL, r.left, r.top, bx, wh); + uchar *right_image = fl_read_image(NULL, r.right - bx, r.top, bx, wh); + uchar *bottom_image = fl_read_image(NULL, r.left, r.bottom-by, ww, by); + ReleaseDC(NULL, fl_gc); fl_gc = save_gc; this->set_current(); // print the 4 window sides fl_draw_image(top_image, x_offset, y_offset, ww, bt + by, 3); diff --git a/src/fl_read_image_win32.cxx b/src/fl_read_image_win32.cxx index 875b945a9..eb881d4a8 100644 --- a/src/fl_read_image_win32.cxx +++ b/src/fl_read_image_win32.cxx @@ -34,13 +34,10 @@ fl_read_image(uchar *p, // I - Pixel buffer or NULL to allocate int X, // I - Left position int Y, // I - Top position int w, // I - Width of area to read - // negative w means negative X or Y are allowed int h, // I - Height of area to read int alpha) { // I - Alpha value for image (0 for none) int d; // Depth of image - int allow_outside = w < 0; // negative w allows negative X or Y, that is, window border - if (w < 0) w = - w; // Allocate the image data array as needed... d = alpha ? 4 : 3; @@ -61,17 +58,15 @@ fl_read_image(uchar *p, // I - Pixel buffer or NULL to allocate int shift_x = 0; // X target shift if X modified int shift_y = 0; // Y target shift if X modified - if (!allow_outside) { - if (X < 0) { - shift_x = -X; - w += X; - X = 0; - } - if (Y < 0) { - shift_y = -Y; - h += Y; - Y = 0; - } + if (X < 0) { + shift_x = -X; + w += X; + X = 0; + } + if (Y < 0) { + shift_y = -Y; + h += Y; + Y = 0; } if (h < 1 || w < 1) return p; // nothing to copy |
