diff options
| author | Manolo Gouy <Manolo> | 2018-04-15 05:53:01 +0000 |
|---|---|---|
| committer | Manolo Gouy <Manolo> | 2018-04-15 05:53:01 +0000 |
| commit | dbc37a29c0389d19dbc71189b4527c0ec8b2f0e7 (patch) | |
| tree | 90a7664e07ffb5c7d22308778adc0f11628a21c5 /src/drivers/Xlib | |
| parent | 25d39c1b57cecc1488ae7bcd77e55d7db1ec538c (diff) | |
Restore building for X11 with HAVE_XRENDER = 0
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12837 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/drivers/Xlib')
| -rw-r--r-- | src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H | 2 | ||||
| -rw-r--r-- | src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx | 79 |
2 files changed, 40 insertions, 41 deletions
diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H index 1f347c4a8..35f7c01aa 100644 --- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H +++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H @@ -66,12 +66,12 @@ private: virtual void draw_fixed(Fl_Bitmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy); virtual void draw_fixed(Fl_RGB_Image *rgb, int XP, int YP, int WP, int HP, int cx, int cy); protected: - virtual void draw_rgb(Fl_RGB_Image *rgb, int XP, int YP, int WP, int HP, int cx, int cy); virtual void draw_image_unscaled(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0); virtual void draw_image_unscaled(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3); virtual void draw_image_mono_unscaled(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0); virtual void draw_image_mono_unscaled(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1); #if HAVE_XRENDER + virtual void draw_rgb(Fl_RGB_Image *rgb, int XP, int YP, int WP, int HP, int cx, int cy); int scale_and_render_pixmap(Fl_Offscreen pixmap, int depth, double scale_x, double scale_y, int srcx, int srcy, int XP, int YP, int WP, int HP); #endif virtual int height_unscaled(); diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx index 6561fcf50..dd8c136d2 100644 --- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx +++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx @@ -748,6 +748,8 @@ void Fl_Xlib_Graphics_Driver::draw_fixed(Fl_RGB_Image *img, int X, int Y, int W, offset_x_ = ox; offset_y_ = oy; } +#if HAVE_XRENDER + void Fl_Xlib_Graphics_Driver::draw_rgb(Fl_RGB_Image *rgb, int XP, int YP, int WP, int HP, int cx, int cy) { if (!fl_can_do_alpha_blending()) { Fl_Graphics_Driver::draw_rgb(rgb, XP, YP, WP, HP, cx, cy); @@ -766,6 +768,43 @@ void Fl_Xlib_Graphics_Driver::draw_rgb(Fl_RGB_Image *rgb, int XP, int YP, int WP cx*scale_, cy*scale_, (X + offset_x_)*scale_, (Y + offset_y_)*scale_, W, H); } +/* Draws with Xrender an Fl_Offscreen with optional scaling and accounting for transparency if necessary. + XP,YP,WP,HP are in drawing units + */ +int Fl_Xlib_Graphics_Driver::scale_and_render_pixmap(Fl_Offscreen pixmap, int depth, double scale_x, double scale_y, int srcx, int srcy, int XP, int YP, int WP, int HP) { + bool has_alpha = (depth == 2 || depth == 4); + XRenderPictureAttributes srcattr; + memset(&srcattr, 0, sizeof(XRenderPictureAttributes)); + static XRenderPictFormat *fmt24 = XRenderFindStandardFormat(fl_display, PictStandardRGB24); + static XRenderPictFormat *fmt32 = XRenderFindStandardFormat(fl_display, PictStandardARGB32); + Picture src = XRenderCreatePicture(fl_display, pixmap, has_alpha ?fmt32:fmt24, 0, &srcattr); + Picture dst = XRenderCreatePicture(fl_display, fl_window, fmt24, 0, &srcattr); + if (!src || !dst) { + fprintf(stderr, "Failed to create Render pictures (%lu %lu)\n", src, dst); + return 0; + } + Fl_Region r = scale_clip(scale_); + const Fl_Region clipr = clip_region(); + if (clipr) + XRenderSetPictureClipRegion(fl_display, dst, clipr); + unscale_clip(r); + if (scale_x != 1 || scale_y != 1) { + XTransform mat = {{ + { XDoubleToFixed( scale_x ), XDoubleToFixed( 0 ), XDoubleToFixed( 0 ) }, + { XDoubleToFixed( 0 ), XDoubleToFixed( scale_y ), XDoubleToFixed( 0 ) }, + { XDoubleToFixed( 0 ), XDoubleToFixed( 0 ), XDoubleToFixed( 1 ) } + }}; + XRenderSetPictureTransform(fl_display, src, &mat); + } + XRenderComposite(fl_display, (has_alpha ? PictOpOver : PictOpSrc), src, None, dst, srcx, srcy, 0, 0, + XP, YP, WP, HP); + XRenderFreePicture(fl_display, src); + XRenderFreePicture(fl_display, dst); + return 1; +} + +#endif // HAVE_XRENDER + void Fl_Xlib_Graphics_Driver::uncache(Fl_RGB_Image*, fl_uintptr_t &id_, fl_uintptr_t &mask_) { if (id_) { @@ -852,46 +891,6 @@ void Fl_Xlib_Graphics_Driver::uncache_pixmap(fl_uintptr_t offscreen) { XFreePixmap(fl_display, (Fl_Offscreen)offscreen); } - -#if HAVE_XRENDER -/* Draws with Xrender an Fl_Offscreen with optional scaling and accounting for transparency if necessary. - XP,YP,WP,HP are in drawing units - */ -int Fl_Xlib_Graphics_Driver::scale_and_render_pixmap(Fl_Offscreen pixmap, int depth, double scale_x, double scale_y, int srcx, int srcy, int XP, int YP, int WP, int HP) { - bool has_alpha = (depth == 2 || depth == 4); - XRenderPictureAttributes srcattr; - memset(&srcattr, 0, sizeof(XRenderPictureAttributes)); - static XRenderPictFormat *fmt24 = XRenderFindStandardFormat(fl_display, PictStandardRGB24); - static XRenderPictFormat *fmt32 = XRenderFindStandardFormat(fl_display, PictStandardARGB32); - Picture src = XRenderCreatePicture(fl_display, pixmap, has_alpha ?fmt32:fmt24, 0, &srcattr); - Picture dst = XRenderCreatePicture(fl_display, fl_window, fmt24, 0, &srcattr); - if (!src || !dst) { - fprintf(stderr, "Failed to create Render pictures (%lu %lu)\n", src, dst); - return 0; - } - Fl_Region r = scale_clip(scale_); - const Fl_Region clipr = clip_region(); - if (clipr) - XRenderSetPictureClipRegion(fl_display, dst, clipr); - unscale_clip(r); - if (scale_x != 1 || scale_y != 1) { - XTransform mat = {{ - { XDoubleToFixed( scale_x ), XDoubleToFixed( 0 ), XDoubleToFixed( 0 ) }, - { XDoubleToFixed( 0 ), XDoubleToFixed( scale_y ), XDoubleToFixed( 0 ) }, - { XDoubleToFixed( 0 ), XDoubleToFixed( 0 ), XDoubleToFixed( 1 ) } - }}; - XRenderSetPictureTransform(fl_display, src, &mat); - } - XRenderComposite(fl_display, (has_alpha ? PictOpOver : PictOpSrc), src, None, dst, srcx, srcy, 0, 0, - XP, YP, WP, HP); - XRenderFreePicture(fl_display, src); - XRenderFreePicture(fl_display, dst); - return 1; -} - -#endif // HAVE_XRENDER - - // // End of "$Id$". // |
