summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorManolo Gouy <Manolo>2017-03-17 16:33:14 +0000
committerManolo Gouy <Manolo>2017-03-17 16:33:14 +0000
commit367e567b7b14d88bc723dba6bde156bd705bf86c (patch)
tree78e4472938a1f16ba8a6b7d7aefee3974ce02316 /src
parent300e0b32a9b18e9ab37185532d3a7c885e710f02 (diff)
Remove class Fl_Translated_Xlib_Graphics_Driver and move its processing to Fl_Xlib_Graphics_Driver.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12205 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src')
-rw-r--r--src/drivers/Xlib/Fl_Translated_Xlib_Graphics_Driver.H75
-rw-r--r--src/drivers/Xlib/Fl_Translated_Xlib_Graphics_Driver.cxx203
-rw-r--r--src/drivers/Xlib/Fl_Xlib_Copy_Surface_Driver.cxx8
-rw-r--r--src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H6
-rw-r--r--src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx24
-rw-r--r--src/drivers/Xlib/Fl_Xlib_Graphics_Driver_arci.cxx4
-rw-r--r--src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_x.cxx4
-rw-r--r--src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_xft.cxx6
-rw-r--r--src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx24
-rw-r--r--src/drivers/Xlib/Fl_Xlib_Graphics_Driver_rect.cxx80
-rw-r--r--src/drivers/Xlib/Fl_Xlib_Image_Surface_Driver.cxx8
11 files changed, 100 insertions, 342 deletions
diff --git a/src/drivers/Xlib/Fl_Translated_Xlib_Graphics_Driver.H b/src/drivers/Xlib/Fl_Translated_Xlib_Graphics_Driver.H
deleted file mode 100644
index 4b96c74f6..000000000
--- a/src/drivers/Xlib/Fl_Translated_Xlib_Graphics_Driver.H
+++ /dev/null
@@ -1,75 +0,0 @@
-//
-// "$Id$"
-//
-// Draw-to-image code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 by Bill Spitzak and others.
-//
-// This library is free software. Distribution and use rights are outlined in
-// the file "COPYING" which should have been included with this file. If this
-// file is missing or damaged, see the license at:
-//
-// http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-// http://www.fltk.org/str.php
-//
-
-#ifndef Fl_Translated_Xlib_Graphics_Driver_h
-#define Fl_Translated_Xlib_Graphics_Driver_h
-
-#ifndef FL_DOXYGEN
-
-#include <src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H>
-
-/* graphics driver that translates all graphics coordinates before calling Xlib */
-class Fl_Translated_Xlib_Graphics_Driver : public Fl_Xlib_Graphics_Driver {
- int offset_x, offset_y; // translation between user and graphical coordinates: graphical = user + offset
- unsigned depth; // depth of translation stack
- int stack_x[20], stack_y[20]; // translation stack allowing cumulative translations
-public:
- Fl_Translated_Xlib_Graphics_Driver();
- virtual ~Fl_Translated_Xlib_Graphics_Driver();
- void translate_all(int dx, int dy);
- void untranslate_all();
- void rect(int x, int y, int w, int h);
- void rectf(int x, int y, int w, int h);
- void xyline(int x, int y, int x1);
- void xyline(int x, int y, int x1, int y2);
- void xyline(int x, int y, int x1, int y2, int x3);
- void yxline(int x, int y, int y1);
- void yxline(int x, int y, int y1, int x2);
- void yxline(int x, int y, int y1, int x2, int y3);
- void line(int x, int y, int x1, int y1);
- void line(int x, int y, int x1, int y1, int x2, int y2);
- void draw(const char* str, int n, int x, int y);
- void draw(int angle, const char *str, int n, int x, int y);
- void rtl_draw(const char* str, int n, int x, int y);
- void draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
- void draw(Fl_Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy);
- void draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy);
- void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0);
- void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3);
- void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0) ;
- void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
- void copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
- void push_clip(int x, int y, int w, int h);
- int not_clipped(int x, int y, int w, int h);
- int clip_box(int x, int y, int w, int h, int& X, int& Y, int& W, int& H);
- void pie(int x, int y, int w, int h, double a1, double a2);
- void arc(int x, int y, int w, int h, double a1, double a2);
- void polygon(int x0, int y0, int x1, int y1, int x2, int y2);
- void polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
- void loop(int x0, int y0, int x1, int y1, int x2, int y2);
- void loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
- void point(int x, int y);
-};
-
-#endif // FL_DOXYGEN
-
-#endif /* Fl_Translated_Xlib_Graphics_Driver_h */
-
-//
-// End of "$Id$".
-//
diff --git a/src/drivers/Xlib/Fl_Translated_Xlib_Graphics_Driver.cxx b/src/drivers/Xlib/Fl_Translated_Xlib_Graphics_Driver.cxx
deleted file mode 100644
index 33acd1b12..000000000
--- a/src/drivers/Xlib/Fl_Translated_Xlib_Graphics_Driver.cxx
+++ /dev/null
@@ -1,203 +0,0 @@
-//
-// "$Id$"
-//
-// Draw-to-image code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 by Bill Spitzak and others.
-//
-// This library is free software. Distribution and use rights are outlined in
-// the file "COPYING" which should have been included with this file. If this
-// file is missing or damaged, see the license at:
-//
-// http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-// http://www.fltk.org/str.php
-//
-
-#include <config.h>
-#include "Fl_Translated_Xlib_Graphics_Driver.H"
-#include <FL/Fl.H>
-
-#ifndef FL_DOXYGEN
-
-Fl_Translated_Xlib_Graphics_Driver::Fl_Translated_Xlib_Graphics_Driver() {
- offset_x = 0; offset_y = 0;
- depth = 0;
-}
-
-Fl_Translated_Xlib_Graphics_Driver::~Fl_Translated_Xlib_Graphics_Driver() {}
-
-void Fl_Translated_Xlib_Graphics_Driver::translate_all(int dx, int dy) { // reversibly adds dx,dy to the offset between user and graphical coordinates
- stack_x[depth] = offset_x;
- stack_y[depth] = offset_y;
- offset_x = stack_x[depth] + dx;
- offset_y = stack_y[depth] + dy;
- push_matrix();
- translate(dx, dy);
- if (depth < sizeof(stack_x)/sizeof(int)) depth++;
- else Fl::warning("%s: translate stack overflow!", "Fl_Translated_Xlib_Graphics_Driver");
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::untranslate_all() { // undoes previous translate_all()
- if (depth > 0) depth--;
- offset_x = stack_x[depth];
- offset_y = stack_y[depth];
- pop_matrix();
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::rect(int x, int y, int w, int h) {
- Fl_Xlib_Graphics_Driver::rect(x+offset_x, y+offset_y, w, h);
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::rectf(int x, int y, int w, int h) {
- Fl_Xlib_Graphics_Driver::rectf(x+offset_x, y+offset_y, w, h);
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::xyline(int x, int y, int x1) {
- Fl_Xlib_Graphics_Driver::xyline(x+offset_x, y+offset_y, x1+offset_x);
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::xyline(int x, int y, int x1, int y2) {
- Fl_Xlib_Graphics_Driver::xyline(x+offset_x, y+offset_y, x1+offset_x, y2+offset_y);
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::xyline(int x, int y, int x1, int y2, int x3) {
- Fl_Xlib_Graphics_Driver::xyline(x+offset_x, y+offset_y, x1+offset_x, y2+offset_y, x3+offset_x);
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::yxline(int x, int y, int y1) {
- Fl_Xlib_Graphics_Driver::yxline(x+offset_x, y+offset_y, y1+offset_y);
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::yxline(int x, int y, int y1, int x2) {
- Fl_Xlib_Graphics_Driver::yxline(x+offset_x, y+offset_y, y1+offset_y, x2+offset_x);
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::yxline(int x, int y, int y1, int x2, int y3) {
- Fl_Xlib_Graphics_Driver::yxline(x+offset_x, y+offset_y, y1+offset_y, x2+offset_x, y3+offset_y);
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::line(int x, int y, int x1, int y1) {
- Fl_Xlib_Graphics_Driver::line(x+offset_x, y+offset_y, x1+offset_x, y1+offset_y);
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::line(int x, int y, int x1, int y1, int x2, int y2) {
- Fl_Xlib_Graphics_Driver::line(x+offset_x, y+offset_y, x1+offset_x, y1+offset_y, x2+offset_x, y2+offset_y);
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::draw(const char* str, int n, int x, int y) {
- Fl_Xlib_Graphics_Driver::draw(str, n, x+offset_x, y+offset_y);
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::draw(int angle, const char *str, int n, int x, int y) {
- Fl_Xlib_Graphics_Driver::draw(angle, str, n, x+offset_x, y+offset_y);
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::rtl_draw(const char* str, int n, int x, int y) {
- Fl_Xlib_Graphics_Driver::rtl_draw(str, n, x+offset_x, y+offset_y);
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy) {
- XP += offset_x; YP += offset_y;
- translate_all(-offset_x, -offset_y);
- Fl_Xlib_Graphics_Driver::draw(pxm, XP, YP, WP,HP,cx,cy);
- untranslate_all();
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::draw(Fl_Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy) {
- XP += offset_x; YP += offset_y;
- translate_all(-offset_x, -offset_y);
- Fl_Xlib_Graphics_Driver::draw(bm, XP, YP, WP,HP,cx,cy);
- untranslate_all();
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy) {
- XP += offset_x; YP += offset_y;
- translate_all(-offset_x, -offset_y);
- Fl_Xlib_Graphics_Driver::draw(img, XP, YP, WP,HP,cx,cy);
- untranslate_all();
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::draw_image(const uchar* buf, int X,int Y,int W,int H, int D, int L) {
- X += offset_x; Y += offset_y;
- translate_all(-offset_x, -offset_y);
- Fl_Xlib_Graphics_Driver::draw_image(buf, X, Y, W,H,D,L);
- untranslate_all();
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D) {
- X += offset_x; Y += offset_y;
- translate_all(-offset_x, -offset_y);
- Fl_Xlib_Graphics_Driver::draw_image(cb, data, X, Y, W,H,D);
- untranslate_all();
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D, int L) {
- X += offset_x; Y += offset_y;
- translate_all(-offset_x, -offset_y);
- Fl_Xlib_Graphics_Driver::draw_image_mono(buf, X, Y, W,H,D,L);
- untranslate_all();
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D) {
- X += offset_x; Y += offset_y;
- translate_all(-offset_x, -offset_y);
- Fl_Xlib_Graphics_Driver::draw_image_mono(cb, data, X, Y, W,H,D);
- untranslate_all();
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy) {
- Fl_Xlib_Graphics_Driver::copy_offscreen(x+offset_x, y+offset_y, w, h,pixmap,srcx,srcy);
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::push_clip(int x, int y, int w, int h) {
- Fl_Xlib_Graphics_Driver::push_clip(x+offset_x, y+offset_y, w, h);
-}
-
-int Fl_Translated_Xlib_Graphics_Driver::not_clipped(int x, int y, int w, int h) {
- return Fl_Xlib_Graphics_Driver::not_clipped(x + offset_x, y + offset_y, w, h);
-}
-
-int Fl_Translated_Xlib_Graphics_Driver::clip_box(int x, int y, int w, int h, int& X, int& Y, int& W, int& H) {
- int retval = Fl_Xlib_Graphics_Driver::clip_box(x + offset_x, y + offset_y, w,h,X,Y,W,H);
- X -= offset_x;
- Y -= offset_y;
- return retval;
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::pie(int x, int y, int w, int h, double a1, double a2) {
- Fl_Xlib_Graphics_Driver::pie(x+offset_x,y+offset_y,w,h,a1,a2);
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::arc(int x, int y, int w, int h, double a1, double a2) {
- Fl_Xlib_Graphics_Driver::arc(x+offset_x,y+offset_y,w,h,a1,a2);
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::polygon(int x0, int y0, int x1, int y1, int x2, int y2) {
- Fl_Xlib_Graphics_Driver::polygon(x0+offset_x,y0+offset_y,x1+offset_x,y1+offset_y,x2+offset_x,y2+offset_y);
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3) {
- Fl_Xlib_Graphics_Driver::polygon(x0+offset_x,y0+offset_y,x1+offset_x,y1+offset_y,x2+offset_x,y2+offset_y,x3+offset_x,y3+offset_y);
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::loop(int x0, int y0, int x1, int y1, int x2, int y2) {
- Fl_Xlib_Graphics_Driver::loop(x0+offset_x,y0+offset_y,x1+offset_x,y1+offset_y,x2+offset_x,y2+offset_y);
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3) {
- Fl_Xlib_Graphics_Driver::loop(x0+offset_x,y0+offset_y,x1+offset_x,y1+offset_y,x2+offset_x,y2+offset_y,x3+offset_x,y3+offset_y);
-}
-
-void Fl_Translated_Xlib_Graphics_Driver::point(int x, int y) {
- Fl_Xlib_Graphics_Driver::point(x+offset_x, y+offset_y);
-}
-
-#endif // FL_DOXYGEN
-
-//
-// End of "$Id$".
-//
-
diff --git a/src/drivers/Xlib/Fl_Xlib_Copy_Surface_Driver.cxx b/src/drivers/Xlib/Fl_Xlib_Copy_Surface_Driver.cxx
index 156bd87d3..ec2d74214 100644
--- a/src/drivers/Xlib/Fl_Xlib_Copy_Surface_Driver.cxx
+++ b/src/drivers/Xlib/Fl_Xlib_Copy_Surface_Driver.cxx
@@ -23,7 +23,7 @@
#include <FL/Fl.H>
#include <FL/x.H>
#include <FL/fl_draw.H>
-#include "Fl_Translated_Xlib_Graphics_Driver.H"
+#include "Fl_Xlib_Graphics_Driver.H"
#include "../X11/Fl_X11_Screen_Driver.H"
class Fl_Xlib_Copy_Surface_Driver : public Fl_Copy_Surface_Driver {
@@ -50,7 +50,7 @@ Fl_Copy_Surface_Driver *Fl_Copy_Surface_Driver::newCopySurfaceDriver(int w, int
Fl_Xlib_Copy_Surface_Driver::Fl_Xlib_Copy_Surface_Driver(int w, int h) : Fl_Copy_Surface_Driver(w, h) {
- driver(new Fl_Translated_Xlib_Graphics_Driver());
+ driver(new Fl_Xlib_Graphics_Driver());
oldwindow = fl_window;
xid = fl_create_offscreen(w,h);
driver()->push_no_clip();
@@ -85,12 +85,12 @@ void Fl_Xlib_Copy_Surface_Driver::end_current_() {
}
void Fl_Xlib_Copy_Surface_Driver::translate(int x, int y) {
- ((Fl_Translated_Xlib_Graphics_Driver*)driver())->translate_all(x, y);
+ ((Fl_Xlib_Graphics_Driver*)driver())->translate_all(x, y);
}
void Fl_Xlib_Copy_Surface_Driver::untranslate() {
- ((Fl_Translated_Xlib_Graphics_Driver*)driver())->untranslate_all();
+ ((Fl_Xlib_Graphics_Driver*)driver())->untranslate_all();
}
#endif // FL_CFG_GFX_XLIB
diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H
index a84952aed..2735de5fc 100644
--- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H
+++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H
@@ -53,6 +53,10 @@ struct _XRegion {
This class is implemented only on the Xlib platform.
*/
class FL_EXPORT Fl_Xlib_Graphics_Driver : public Fl_Graphics_Driver {
+private:
+ int offset_x_, offset_y_; // translation between user and graphical coordinates: graphical = user + offset
+ unsigned depth_; // depth of translation stack
+ int stack_x_[20], stack_y_[20]; // translation stack allowing cumulative translations
#if USE_XFT
void drawUCS4(const void *str, int n, int x, int y);
#endif
@@ -84,6 +88,8 @@ protected:
public:
Fl_Xlib_Graphics_Driver(void);
virtual ~Fl_Xlib_Graphics_Driver();
+ void translate_all(int dx, int dy);
+ void untranslate_all();
virtual int has_feature(driver_feature mask) { return mask & NATIVE; }
virtual void *gc() { return gc_; }
virtual void gc(void *value);
diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx
index 3986f4e95..ef2e72c85 100644
--- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx
+++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx
@@ -61,6 +61,8 @@ Fl_Xlib_Graphics_Driver::Fl_Xlib_Graphics_Driver(void) {
pfd_ = pango_font_description_new();
Fl_Graphics_Driver::font(0, 0);
#endif
+ offset_x_ = 0; offset_y_ = 0;
+ depth_ = 0;
}
Fl_Xlib_Graphics_Driver::~Fl_Xlib_Graphics_Driver() {
@@ -77,7 +79,7 @@ void Fl_Xlib_Graphics_Driver::gc(void *value) {
}
void Fl_Xlib_Graphics_Driver::copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy) {
- XCopyArea(fl_display, pixmap, fl_window, gc_, srcx, srcy, w, h, x, y);
+ XCopyArea(fl_display, pixmap, fl_window, gc_, srcx, srcy, w, h, x+offset_x_, y+offset_y_);
}
#ifndef FL_DOXYGEN
@@ -102,7 +104,7 @@ void Fl_Xlib_Graphics_Driver::copy_offscreen_with_alpha(int x, int y, int w, int
XRenderSetPictureClipRegion(fl_display, dst, clipr);
XRenderComposite(fl_display, PictOpOver, src, None, dst, srcx, srcy, 0, 0,
- x, y, w, h);
+ x+offset_x_, y+offset_y_, w, h);
XRenderFreePicture(fl_display, src);
XRenderFreePicture(fl_display, dst);
@@ -231,6 +233,24 @@ void Fl_Xlib_Graphics_Driver::font_name(int num, const char *name) {
s->first = 0;
}
+void Fl_Xlib_Graphics_Driver::translate_all(int dx, int dy) { // reversibly adds dx,dy to the offset between user and graphical coordinates
+ stack_x_[depth_] = offset_x_;
+ stack_y_[depth_] = offset_y_;
+ offset_x_ = stack_x_[depth_] + dx;
+ offset_y_ = stack_y_[depth_] + dy;
+ push_matrix();
+ translate(dx, dy);
+ if (depth_ < sizeof(stack_x_)/sizeof(int)) depth_++;
+ else Fl::warning("%s: translate stack overflow!", "Fl_Xlib_Graphics_Driver");
+}
+
+void Fl_Xlib_Graphics_Driver::untranslate_all() { // undoes previous translate_all()
+ if (depth_ > 0) depth_--;
+ offset_x_ = stack_x_[depth_];
+ offset_y_ = stack_y_[depth_];
+ pop_matrix();
+}
+
//
// End of "$Id$".
//
diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_arci.cxx b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_arci.cxx
index fcad6fd5f..b1a8cd10d 100644
--- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_arci.cxx
+++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_arci.cxx
@@ -28,11 +28,13 @@
void Fl_Xlib_Graphics_Driver::arc(int x,int y,int w,int h,double a1,double a2) {
if (w <= 0 || h <= 0) return;
- XDrawArc(fl_display, fl_window, gc_, x,y,w-1,h-1, int(a1*64),int((a2-a1)*64));
+ XDrawArc(fl_display, fl_window, gc_, x+offset_x_,y+offset_y_,w-1,h-1, int(a1*64),int((a2-a1)*64));
}
void Fl_Xlib_Graphics_Driver::pie(int x,int y,int w,int h,double a1,double a2) {
if (w <= 0 || h <= 0) return;
+ x += offset_x_;
+ y += offset_y_;
XDrawArc(fl_display, fl_window, gc_, x,y,w-1,h-1, int(a1*64),int((a2-a1)*64));
XFillArc(fl_display, fl_window, gc_, x,y,w-1,h-1, int(a1*64),int((a2-a1)*64));
}
diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_x.cxx b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_x.cxx
index cdefdd262..a1da5a585 100644
--- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_x.cxx
+++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_x.cxx
@@ -655,7 +655,7 @@ void Fl_Xlib_Graphics_Driver::draw(const char* c, int n, int x, int y) {
font_gc = gc_;
XSetFont(fl_display, gc_, font_descriptor()->font->fid);
}
- if (gc_) XUtf8DrawString(fl_display, fl_window, font_descriptor()->font, gc_, x, y, c, n);
+ if (gc_) XUtf8DrawString(fl_display, fl_window, font_descriptor()->font, gc_, x+offset_x_, y+offset_y_, c, n);
}
void Fl_Xlib_Graphics_Driver::draw(int angle, const char *str, int n, int x, int y) {
@@ -674,7 +674,7 @@ void Fl_Xlib_Graphics_Driver::rtl_draw(const char* c, int n, int x, int y) {
if (!font_descriptor()) this->font(FL_HELVETICA, FL_NORMAL_SIZE);
font_gc = gc_;
}
- if (gc_) XUtf8DrawRtlString(fl_display, fl_window, font_descriptor()->font, gc_, x, y, c, n);
+ if (gc_) XUtf8DrawRtlString(fl_display, fl_window, font_descriptor()->font, gc_, x+offset_x_, y+offset_y_, c, n);
}
float Fl_Xlib_Graphics_Driver::scale_font_for_PostScript(Fl_Font_Descriptor *desc, int s) {
diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_xft.cxx b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_xft.cxx
index 167e2abe2..94451e371 100644
--- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_xft.cxx
+++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_xft.cxx
@@ -1181,12 +1181,12 @@ void Fl_Xlib_Graphics_Driver::font(Fl_Font fnum, Fl_Fontsize size) {
}
void Fl_Xlib_Graphics_Driver::draw(const char *str, int n, int x, int y) {
- do_draw(0, str, n, x, y);
+ do_draw(0, str, n, x+offset_x_, y+offset_y_);
}
void Fl_Xlib_Graphics_Driver::draw(int angle, const char *str, int n, int x, int y) {
PangoMatrix mat = PANGO_MATRIX_INIT; // 1.6
- pango_matrix_translate(&mat, x, y); // 1.6
+ pango_matrix_translate(&mat, x+offset_x_, y+offset_y_); // 1.6
pango_matrix_rotate(&mat, angle); // 1.6
pango_context_set_matrix(pctxt_, &mat); // 1.6
do_draw(0, str, n, 0, 0);
@@ -1194,7 +1194,7 @@ void Fl_Xlib_Graphics_Driver::draw(int angle, const char *str, int n, int x, int
}
void Fl_Xlib_Graphics_Driver::rtl_draw(const char* str, int n, int x, int y) {
- do_draw(1, str, n, x, y);
+ do_draw(1, str, n, x+offset_x_, y+offset_y_);
}
void Fl_Xlib_Graphics_Driver::do_draw(int from_right, const char *str, int n, int x, int y) {
diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx
index ed30b2e36..b5ad6487a 100644
--- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx
+++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx
@@ -580,7 +580,7 @@ void Fl_Xlib_Graphics_Driver::draw_image(const uchar* buf, int x, int y, int w,
if (alpha) d ^= FL_IMAGE_WITH_ALPHA;
const int mono = (d>-3 && d<3);
- innards(buf,x,y,w,h,d,l,mono,0,0,alpha,gc_);
+ innards(buf,x+offset_x_,y+offset_y_,w,h,d,l,mono,0,0,alpha,gc_);
}
void Fl_Xlib_Graphics_Driver::draw_image(Fl_Draw_Image_Cb cb, void* data,
@@ -590,16 +590,16 @@ void Fl_Xlib_Graphics_Driver::draw_image(Fl_Draw_Image_Cb cb, void* data,
if (alpha) d ^= FL_IMAGE_WITH_ALPHA;
const int mono = (d>-3 && d<3);
- innards(0,x,y,w,h,d,0,mono,cb,data,alpha,gc_);
+ innards(0,x+offset_x_,y+offset_y_,w,h,d,0,mono,cb,data,alpha,gc_);
}
void Fl_Xlib_Graphics_Driver::draw_image_mono(const uchar* buf, int x, int y, int w, int h, int d, int l){
- innards(buf,x,y,w,h,d,l,1,0,0,0,gc_);
+ innards(buf,x+offset_x_,y+offset_y_,w,h,d,l,1,0,0,0,gc_);
}
void Fl_Xlib_Graphics_Driver::draw_image_mono(Fl_Draw_Image_Cb cb, void* data,
int x, int y, int w, int h,int d) {
- innards(0,x,y,w,h,d,0,1,cb,data,0,gc_);
+ innards(0,x+offset_x_,y+offset_y_,w,h,d,0,1,cb,data,0,gc_);
}
void fl_rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b) {
@@ -624,7 +624,7 @@ void Fl_Xlib_Graphics_Driver::delete_bitmask(Fl_Bitmask bm) {
void Fl_Xlib_Graphics_Driver::draw(Fl_Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy) {
int X, Y, W, H;
- if (Fl_Graphics_Driver::prepare(bm, XP, YP, WP, HP, cx, cy, X, Y, W, H)) {
+ if (Fl_Graphics_Driver::prepare(bm, XP+offset_x_, YP+offset_y_, WP, HP, cx, cy, X, Y, W, H)) {
return;
}
@@ -717,6 +717,8 @@ static Fl_Offscreen cache_rgb(Fl_RGB_Image *img) {
void Fl_Xlib_Graphics_Driver::draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy) {
int X, Y, W, H;
+ XP += offset_x_;
+ YP += offset_y_;
// Don't draw an empty image...
if (!img->d() || !img->array) {
Fl_Graphics_Driver::draw_empty(img, XP, YP);
@@ -730,9 +732,9 @@ void Fl_Xlib_Graphics_Driver::draw(Fl_RGB_Image *img, int XP, int YP, int WP, in
}
if (*Fl_Graphics_Driver::id(img)) {
if (img->d() == 4 || img->d() == 2)
- copy_offscreen_with_alpha(X, Y, W, H, *Fl_Graphics_Driver::id(img), cx, cy);
+ copy_offscreen_with_alpha(X - offset_x_, Y - offset_y_, W, H, *Fl_Graphics_Driver::id(img), cx, cy);
else
- copy_offscreen(X, Y, W, H, *Fl_Graphics_Driver::id(img), cx, cy);
+ copy_offscreen(X - offset_x_, Y - offset_y_, W, H, *Fl_Graphics_Driver::id(img), cx, cy);
} else {
// Composite image with alpha manually each time...
alpha_blend(img, X, Y, W, H, cx, cy);
@@ -753,7 +755,7 @@ fl_uintptr_t Fl_Xlib_Graphics_Driver::cache(Fl_Bitmap*, int w, int h, const ucha
void Fl_Xlib_Graphics_Driver::draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy) {
int X, Y, W, H;
- if (Fl_Graphics_Driver::prepare(pxm, XP, YP, WP, HP, cx, cy, X, Y, W, H)) return;
+ if (Fl_Graphics_Driver::prepare(pxm, XP+offset_x_, YP+offset_y_, WP, HP, cx, cy, X, Y, W, H)) return;
if (*Fl_Graphics_Driver::mask(pxm)) {
// make X use the bitmap as a mask:
XSetClipMask(fl_display, gc_, *Fl_Graphics_Driver::mask(pxm));
@@ -776,17 +778,17 @@ void Fl_Xlib_Graphics_Driver::draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int H
Y1 = r->rects[i].y1;
W1 = r->rects[i].x2 - r->rects[i].x1;
H1 = r->rects[i].y2 - r->rects[i].y1;
- copy_offscreen(X1, Y1, W1, H1, *Fl_Graphics_Driver::id(pxm), cx + (X1 - X), cy + (Y1 - Y));
+ copy_offscreen(X1-offset_x_, Y1-offset_y_, W1, H1, *Fl_Graphics_Driver::id(pxm), cx + (X1 - X), cy + (Y1 - Y));
}
XDestroyRegion(r);
} else {
- copy_offscreen(X, Y, W, H, *Fl_Graphics_Driver::id(pxm), cx, cy);
+ copy_offscreen(X-offset_x_, Y-offset_y_, W, H, *Fl_Graphics_Driver::id(pxm), cx, cy);
}
// put the old clip region back
XSetClipOrigin(fl_display, gc_, 0, 0);
restore_clip();
}
- else copy_offscreen(X, Y, W, H, *Fl_Graphics_Driver::id(pxm), cx, cy);
+ else copy_offscreen(X-offset_x_, Y-offset_y_, W, H, *Fl_Graphics_Driver::id(pxm), cx, cy);
}
diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_rect.cxx b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_rect.cxx
index 3b0a0cae2..464420086 100644
--- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_rect.cxx
+++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_rect.cxx
@@ -164,107 +164,109 @@ void Fl_Xlib_Graphics_Driver::XDestroyRegion(Fl_Region r) {
// --- line and polygon drawing with integer coordinates
void Fl_Xlib_Graphics_Driver::point(int x, int y) {
- XDrawPoint(fl_display, fl_window, gc_, clip_x(x), clip_x(y));
+ XDrawPoint(fl_display, fl_window, gc_, clip_x(x+offset_x_), clip_x(y+offset_y_));
}
void Fl_Xlib_Graphics_Driver::rect(int x, int y, int w, int h) {
if (w<=0 || h<=0) return;
+ x+=offset_x_; y+=offset_y_;
if (!clip_to_short(x, y, w, h, line_width_))
XDrawRectangle(fl_display, fl_window, gc_, x, y, w-1, h-1);
}
void Fl_Xlib_Graphics_Driver::rectf(int x, int y, int w, int h) {
if (w<=0 || h<=0) return;
+ x+=offset_x_; y+=offset_y_;
if (!clip_to_short(x, y, w, h, line_width_))
XFillRectangle(fl_display, fl_window, gc_, x, y, w, h);
}
void Fl_Xlib_Graphics_Driver::line(int x, int y, int x1, int y1) {
- XDrawLine(fl_display, fl_window, gc_, x, y, x1, y1);
+ XDrawLine(fl_display, fl_window, gc_, x+offset_x_, y+offset_y_, x1+offset_x_, y1+offset_y_);
}
void Fl_Xlib_Graphics_Driver::line(int x, int y, int x1, int y1, int x2, int y2) {
XPoint p[3];
- p[0].x = x; p[0].y = y;
- p[1].x = x1; p[1].y = y1;
- p[2].x = x2; p[2].y = y2;
+ p[0].x = x+offset_x_; p[0].y = y+offset_y_;
+ p[1].x = x1+offset_x_; p[1].y = y1+offset_y_;
+ p[2].x = x2+offset_x_; p[2].y = y2+offset_y_;
XDrawLines(fl_display, fl_window, gc_, p, 3, 0);
}
void Fl_Xlib_Graphics_Driver::xyline(int x, int y, int x1) {
- XDrawLine(fl_display, fl_window, gc_, clip_x(x), clip_x(y), clip_x(x1), clip_x(y));
+ XDrawLine(fl_display, fl_window, gc_, clip_x(x+offset_x_), clip_x(y+offset_y_), clip_x(x1+offset_x_), clip_x(y+offset_y_));
}
void Fl_Xlib_Graphics_Driver::xyline(int x, int y, int x1, int y2) {
XPoint p[3];
- p[0].x = clip_x(x); p[0].y = p[1].y = clip_x(y);
- p[1].x = p[2].x = clip_x(x1); p[2].y = clip_x(y2);
+ p[0].x = clip_x(x+offset_x_); p[0].y = p[1].y = clip_x(y+offset_y_);
+ p[1].x = p[2].x = clip_x(x1+offset_x_); p[2].y = clip_x(y2+offset_y_);
XDrawLines(fl_display, fl_window, gc_, p, 3, 0);
}
void Fl_Xlib_Graphics_Driver::xyline(int x, int y, int x1, int y2, int x3) {
XPoint p[4];
- p[0].x = clip_x(x); p[0].y = p[1].y = clip_x(y);
- p[1].x = p[2].x = clip_x(x1); p[2].y = p[3].y = clip_x(y2);
- p[3].x = clip_x(x3);
+ p[0].x = clip_x(x+offset_x_); p[0].y = p[1].y = clip_x(y+offset_y_);
+ p[1].x = p[2].x = clip_x(x1+offset_x_); p[2].y = p[3].y = clip_x(y2+offset_y_);
+ p[3].x = clip_x(x3+offset_x_);
XDrawLines(fl_display, fl_window, gc_, p, 4, 0);
}
void Fl_Xlib_Graphics_Driver::yxline(int x, int y, int y1) {
- XDrawLine(fl_display, fl_window, gc_, clip_x(x), clip_x(y), clip_x(x), clip_x(y1));
+ XDrawLine(fl_display, fl_window, gc_, clip_x(x+offset_x_), clip_x(y+offset_y_), clip_x(x+offset_x_), clip_x(y1+offset_y_));
}
void Fl_Xlib_Graphics_Driver::yxline(int x, int y, int y1, int x2) {
XPoint p[3];
- p[0].x = p[1].x = clip_x(x); p[0].y = clip_x(y);
- p[1].y = p[2].y = clip_x(y1); p[2].x = clip_x(x2);
+ p[0].x = p[1].x = clip_x(x+offset_x_); p[0].y = clip_x(y+offset_y_);
+ p[1].y = p[2].y = clip_x(y1+offset_y_); p[2].x = clip_x(x2+offset_x_);
XDrawLines(fl_display, fl_window, gc_, p, 3, 0);
}
void Fl_Xlib_Graphics_Driver::yxline(int x, int y, int y1, int x2, int y3) {
XPoint p[4];
- p[0].x = p[1].x = clip_x(x); p[0].y = clip_x(y);
- p[1].y = p[2].y = clip_x(y1); p[2].x = p[3].x = clip_x(x2);
- p[3].y = clip_x(y3);
+ p[0].x = p[1].x = clip_x(x+offset_x_); p[0].y = clip_x(y+offset_y_);
+ p[1].y = p[2].y = clip_x(y1+offset_y_); p[2].x = p[3].x = clip_x(x2+offset_x_);
+ p[3].y = clip_x(y3+offset_y_);
XDrawLines(fl_display, fl_window, gc_, p, 4, 0);
}
void Fl_Xlib_Graphics_Driver::loop(int x, int y, int x1, int y1, int x2, int y2) {
XPoint p[4];
- p[0].x = x; p[0].y = y;
- p[1].x = x1; p[1].y = y1;
- p[2].x = x2; p[2].y = y2;
- p[3].x = x; p[3].y = y;
+ p[0].x = x+offset_x_; p[0].y = y+offset_y_;
+ p[1].x = x1+offset_x_; p[1].y = y1+offset_y_;
+ p[2].x = x2+offset_x_; p[2].y = y2+offset_y_;
+ p[3].x = x+offset_x_; p[3].y = y+offset_y_;
XDrawLines(fl_display, fl_window, gc_, p, 4, 0);
}
void Fl_Xlib_Graphics_Driver::loop(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) {
XPoint p[5];
- p[0].x = x; p[0].y = y;
- p[1].x = x1; p[1].y = y1;
- p[2].x = x2; p[2].y = y2;
- p[3].x = x3; p[3].y = y3;
- p[4].x = x; p[4].y = y;
+ p[0].x = x+offset_x_; p[0].y = y+offset_y_;
+ p[1].x = x1+offset_x_; p[1].y = y1+offset_y_;
+ p[2].x = x2+offset_x_; p[2].y = y2+offset_y_;
+ p[3].x = x3+offset_x_; p[3].y = y3+offset_y_;
+ p[4].x = x+offset_x_; p[4].y = y+offset_y_;
XDrawLines(fl_display, fl_window, gc_, p, 5, 0);
}
void Fl_Xlib_Graphics_Driver::polygon(int x, int y, int x1, int y1, int x2, int y2) {
XPoint p[4];
- p[0].x = x; p[0].y = y;
- p[1].x = x1; p[1].y = y1;
- p[2].x = x2; p[2].y = y2;
- p[3].x = x; p[3].y = y;
+ p[0].x = x+offset_x_; p[0].y = y+offset_y_;
+ p[1].x = x1+offset_x_; p[1].y = y1+offset_y_;
+ p[2].x = x2+offset_x_; p[2].y = y2+offset_y_;
+ p[3].x = x+offset_x_; p[3].y = y+offset_y_;
XFillPolygon(fl_display, fl_window, gc_, p, 3, Convex, 0);
XDrawLines(fl_display, fl_window, gc_, p, 4, 0);
}
void Fl_Xlib_Graphics_Driver::polygon(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) {
XPoint p[5];
- p[0].x = x; p[0].y = y;
- p[1].x = x1; p[1].y = y1;
- p[2].x = x2; p[2].y = y2;
- p[3].x = x3; p[3].y = y3;
- p[4].x = x; p[4].y = y;
+ p[0].x = x+offset_x_; p[0].y = y+offset_y_;
+ p[1].x = x1+offset_x_; p[1].y = y1+offset_y_;
+ p[2].x = x2+offset_x_; p[2].y = y2+offset_y_;
+ p[3].x = x3+offset_x_; p[3].y = y3+offset_y_;
+ p[4].x = x+offset_x_; p[4].y = y+offset_y_;
XFillPolygon(fl_display, fl_window, gc_, p, 4, Convex, 0);
XDrawLines(fl_display, fl_window, gc_, p, 5, 0);
}
@@ -274,7 +276,7 @@ void Fl_Xlib_Graphics_Driver::polygon(int x, int y, int x1, int y1, int x2, int
void Fl_Xlib_Graphics_Driver::push_clip(int x, int y, int w, int h) {
Fl_Region r;
if (w > 0 && h > 0) {
- r = XRectangleRegion(x,y,w,h);
+ r = XRectangleRegion(x+offset_x_,y+offset_y_,w,h);
Fl_Region current = rstack[rstackptr];
if (current) {
Fl_Region temp = XCreateRegion();
@@ -292,6 +294,8 @@ void Fl_Xlib_Graphics_Driver::push_clip(int x, int y, int w, int h) {
int Fl_Xlib_Graphics_Driver::clip_box(int x, int y, int w, int h, int& X, int& Y, int& W, int& H){
X = x; Y = y; W = w; H = h;
+ x += offset_x_;
+ y += offset_y_;
Fl_Region r = rstack[rstackptr];
if (!r) return 0;
switch (XRectInRegion(r, x, y, w, h)) {
@@ -308,13 +312,15 @@ int Fl_Xlib_Graphics_Driver::clip_box(int x, int y, int w, int h, int& X, int& Y
XIntersectRegion(r, rr, temp);
XRectangle rect;
XClipBox(temp, &rect);
- X = rect.x; Y = rect.y; W = rect.width; H = rect.height;
+ X = rect.x - offset_x_; Y = rect.y - offset_y_; W = rect.width; H = rect.height;
XDestroyRegion(temp);
XDestroyRegion(rr);
return 1;
}
int Fl_Xlib_Graphics_Driver::not_clipped(int x, int y, int w, int h) {
+ x += offset_x_;
+ y += offset_y_;
if (x+w <= 0 || y+h <= 0) return 0;
Fl_Region r = rstack[rstackptr];
if (!r) return 1;
diff --git a/src/drivers/Xlib/Fl_Xlib_Image_Surface_Driver.cxx b/src/drivers/Xlib/Fl_Xlib_Image_Surface_Driver.cxx
index 4ec2bd25d..cc2af841b 100644
--- a/src/drivers/Xlib/Fl_Xlib_Image_Surface_Driver.cxx
+++ b/src/drivers/Xlib/Fl_Xlib_Image_Surface_Driver.cxx
@@ -23,7 +23,7 @@
#ifdef FL_CFG_GFX_XLIB
#include "Fl_Xlib_Graphics_Driver.H"
#include <FL/Fl_Image_Surface.H>
-#include "Fl_Translated_Xlib_Graphics_Driver.H"
+#include "Fl_Xlib_Graphics_Driver.H"
class Fl_Xlib_Image_Surface_Driver : public Fl_Image_Surface_Driver {
friend class Fl_Image_Surface;
@@ -49,7 +49,7 @@ Fl_Xlib_Image_Surface_Driver::Fl_Xlib_Image_Surface_Driver(int w, int h, int hig
fl_open_display();
offscreen = XCreatePixmap(fl_display, RootWindow(fl_display, fl_screen), w, h, fl_visual->depth);
}
- driver(new Fl_Translated_Xlib_Graphics_Driver());
+ driver(new Fl_Xlib_Graphics_Driver());
}
Fl_Xlib_Image_Surface_Driver::~Fl_Xlib_Image_Surface_Driver() {
@@ -65,11 +65,11 @@ void Fl_Xlib_Image_Surface_Driver::set_current() {
}
void Fl_Xlib_Image_Surface_Driver::translate(int x, int y) {
- ((Fl_Translated_Xlib_Graphics_Driver*)driver())->translate_all(x, y);
+ ((Fl_Xlib_Graphics_Driver*)driver())->translate_all(x, y);
}
void Fl_Xlib_Image_Surface_Driver::untranslate() {
- ((Fl_Translated_Xlib_Graphics_Driver*)driver())->untranslate_all();
+ ((Fl_Xlib_Graphics_Driver*)driver())->untranslate_all();
}
Fl_RGB_Image* Fl_Xlib_Image_Surface_Driver::image()