summaryrefslogtreecommitdiff
path: root/src/cfg_gfx
diff options
context:
space:
mode:
authorMatthias Melcher <fltk@matthiasm.com>2016-01-26 20:17:47 +0000
committerMatthias Melcher <fltk@matthiasm.com>2016-01-26 20:17:47 +0000
commit5892993cbcf77e322f51475820d19f8307375df7 (patch)
tree314dd6627e5a44a6027febf8b2f9ea53fc8fdfb9 /src/cfg_gfx
parent12e85b882aedccfae4836dd8c72bd546e1be408e (diff)
Preliminary commit of porting Xlib drivers to the new naming scheme
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11053 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/cfg_gfx')
-rw-r--r--src/cfg_gfx/xlib.H112
-rw-r--r--src/cfg_gfx/xlib_arci.cxx42
-rw-r--r--src/cfg_gfx/xlib_color.cxx351
-rw-r--r--src/cfg_gfx/xlib_line_style.cxx71
-rw-r--r--src/cfg_gfx/xlib_rect.cxx339
-rw-r--r--src/cfg_gfx/xlib_vertex.cxx116
6 files changed, 0 insertions, 1031 deletions
diff --git a/src/cfg_gfx/xlib.H b/src/cfg_gfx/xlib.H
deleted file mode 100644
index 4ce00b426..000000000
--- a/src/cfg_gfx/xlib.H
+++ /dev/null
@@ -1,112 +0,0 @@
-//
-// "$Id$"
-//
-// Definition of classes Fl_Device, Fl_Graphics_Driver, Fl_Surface_Device, Fl_Display_Device
-// for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2010-2014 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
-//
-
-/**
- \file xlib.H
- \brief Definition of X11 Xlib graphics driver.
- */
-
-#ifndef FL_CFG_GFX_XLIB_H
-#define FL_CFG_GFX_XLIB_H
-
-#include <FL/Fl_Device.H>
-
-/**
- \brief The Xlib-specific graphics class.
- *
- This class is implemented only on the Xlib platform.
- */
-class FL_EXPORT Fl_Xlib_Graphics_Driver : public Fl_Graphics_Driver {
-public:
- static const char *class_id;
- const char *class_name() {return class_id;};
- 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 font(Fl_Font face, Fl_Fontsize size);
- void draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
- void draw(Fl_Bitmap *pxm, 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);
- double width(const char *str, int n);
- double width(unsigned int c);
- void text_extents(const char*, int n, int& dx, int& dy, int& w, int& h);
- int height();
- int descent();
- void copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
-#if ! defined(FL_DOXYGEN)
- void copy_offscreen_with_alpha(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
-#endif
-protected:
- // --- implementation is in src/fl_rect.cxx which includes src/cfg_gfx/xlib_rect.cxx
- void point(int x, int y);
- void rect(int x, int y, int w, int h);
- void rectf(int x, int y, int w, int h);
- 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 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 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 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);
- // --- clipping
- void push_clip(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);
- int not_clipped(int x, int y, int w, int h);
- void push_no_clip();
- void pop_clip();
- void restore_clip();
- // --- implementation is in src/fl_vertex.cxx which includes src/cfg_gfx/xxx_rect.cxx
- void begin_complex_polygon();
- void transformed_vertex(double xf, double yf);
- void vertex(double x, double y);
- void end_points();
- void end_line();
- void end_loop();
- void end_polygon();
- void end_complex_polygon();
- void gap();
- void circle(double x, double y, double r);
- // --- implementation is in src/fl_arc.cxx which includes src/cfg_gfx/xxx_arc.cxx if needed
- // using void Fl_Graphics_Driver::arc(double x, double y, double r, double start, double end);
- // --- implementation is in src/fl_arci.cxx which includes src/cfg_gfx/xxx_arci.cxx
- void arc(int x, int y, int w, int h, double a1, double a2);
- void pie(int x, int y, int w, int h, double a1, double a2);
- // --- implementation is in src/fl_line_style.cxx which includes src/cfg_gfx/xxx_line_style.cxx
- void line_style(int style, int width=0, char* dashes=0);
- // --- implementation is in src/fl_color.cxx which includes src/cfg_gfx/xxx_color.cxx
- void color(Fl_Color c);
- Fl_Color color() { return color_; }
- void color(uchar r, uchar g, uchar b);
-};
-
-
-#endif // FL_CFG_GFX_XLIB_H
-
-//
-// End of "$Id$".
-//
diff --git a/src/cfg_gfx/xlib_arci.cxx b/src/cfg_gfx/xlib_arci.cxx
deleted file mode 100644
index 118e683a1..000000000
--- a/src/cfg_gfx/xlib_arci.cxx
+++ /dev/null
@@ -1,42 +0,0 @@
-//
-// "$Id$"
-//
-// Arc (integer) drawing functions for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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_CFG_GFX_XLIB_ARCI_CXX
-#define FL_CFG_GFX_XLIB_ARCI_CXX
-
-/**
- \file xlib_arci.cxx
- \brief Utility functions for drawing circles using integers
-*/
-
-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, fl_gc, x,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;
- XDrawArc(fl_display, fl_window, fl_gc, x,y,w-1,h-1, int(a1*64),int((a2-a1)*64));
- XFillArc(fl_display, fl_window, fl_gc, x,y,w-1,h-1, int(a1*64),int((a2-a1)*64));
-}
-
-#endif // FL_CFG_GFX_XLIB_ARCI_CXX
-
-//
-// End of "$Id$".
-//
diff --git a/src/cfg_gfx/xlib_color.cxx b/src/cfg_gfx/xlib_color.cxx
deleted file mode 100644
index e7e9d0cf7..000000000
--- a/src/cfg_gfx/xlib_color.cxx
+++ /dev/null
@@ -1,351 +0,0 @@
-//
-// "$Id$"
-//
-// Color functions for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-//
-
-// Implementation of fl_color(i), fl_color(r,g,b).
-
-// FIXME: all the global functions in this file should probably be protected
-// members of the driver class. Starting with 1.4 we will allow multiple drivers
-// to co-exist, creating conflicts with multipe mapping.
-
-// FIXME: maybe we can forget about color mapping and assume RGB?
-
-// Also code to look at the X visual and figure out the best way to turn
-// a color into a pixel value.
-
-// SGI compiler seems to have problems with unsigned char arguments
-// being used to index arrays. So I always copy them to an integer
-// before use.
-
-# include "../Fl_XColor.H"
-# include <FL/Fl.H>
-# include <FL/x.H>
-# include <FL/fl_draw.H>
-
-////////////////////////////////////////////////////////////////
-// figure_out_visual() calculates masks & shifts for generating
-// pixels in true-color visuals:
-
-uchar fl_redmask; /**< color mask used in current color map handling */
-uchar fl_greenmask; /**< color mask used in current color map handling */
-uchar fl_bluemask; /**< color mask used in current color map handling */
-
-int fl_redshift; /**< color shift used in current color map handling */
-int fl_greenshift; /**< color shift used in current color map handling */
-int fl_blueshift; /**< color shift used in current color map handling */
-int fl_extrashift; /**< color shift used in current color map handling */
-
-static uchar beenhere;
-
-static void figure_out_visual() {
- beenhere = 1;
- if (!fl_visual->red_mask || !fl_visual->green_mask || !fl_visual->blue_mask){
-# if USE_COLORMAP
- fl_redmask = 0;
- return;
-# else
- Fl::fatal("Requires true color visual");
-# endif
- }
-
- // get the bit masks into a more useful form:
- int i,j,m;
-
- for (i = 0, m = 1; m; i++, m<<=1) if (fl_visual->red_mask & m) break;
- for (j = i; m; j++, m<<=1) if (!(fl_visual->red_mask & m)) break;
- fl_redshift = j-8;
- fl_redmask = (j-i >= 8) ? 0xFF : 0xFF-(255>>(j-i));
-
- for (i = 0, m = 1; m; i++, m<<=1) if (fl_visual->green_mask & m) break;
- for (j = i; m; j++, m<<=1) if (!(fl_visual->green_mask & m)) break;
- fl_greenshift = j-8;
- fl_greenmask = (j-i >= 8) ? 0xFF : 0xFF-(255>>(j-i));
-
- for (i = 0, m = 1; m; i++, m<<=1) if (fl_visual->blue_mask & m) break;
- for (j = i; m; j++, m<<=1) if (!(fl_visual->blue_mask & m)) break;
- fl_blueshift = j-8;
- fl_bluemask = (j-i >= 8) ? 0xFF : 0xFF-(255>>(j-i));
-
- i = fl_redshift;
- if (fl_greenshift < i) i = fl_greenshift;
- if (fl_blueshift < i) i = fl_blueshift;
- if (i < 0) {
- fl_extrashift = -i;
- fl_redshift -= i; fl_greenshift -= i; fl_blueshift -= i;
- } else
- fl_extrashift = 0;
-
-}
-
-static unsigned fl_cmap[256] = {
-#include "../fl_cmap.h" // this is a file produced by "cmap.cxx":
-};
-
-# if HAVE_OVERLAY
-/** HAVE_OVERLAY determines whether fl_xmap is one or two planes */
-Fl_XColor fl_xmap[2][256];
-/** HAVE_OVERLAY determines whether fl_overlay is variable or defined as 0 */
-uchar fl_overlay;
-Colormap fl_overlay_colormap;
-XVisualInfo* fl_overlay_visual;
-ulong fl_transparent_pixel;
-# else
-/** HAVE_OVERLAY determines whether fl_xmap is one or two planes */
-Fl_XColor fl_xmap[1][256];
-/** HAVE_OVERLAY determines whether fl_overlay is variable or defined as 0 */
-# define fl_overlay 0
-# endif
-
-void Fl_Xlib_Graphics_Driver::color(Fl_Color i) {
- if (i & 0xffffff00) {
- unsigned rgb = (unsigned)i;
- fl_color((uchar)(rgb >> 24), (uchar)(rgb >> 16), (uchar)(rgb >> 8));
- } else {
- Fl_Graphics_Driver::color(i);
- if(!fl_gc) return; // don't get a default gc if current window is not yet created/valid
- XSetForeground(fl_display, fl_gc, fl_xpixel(i));
- }
-}
-
-void Fl_Xlib_Graphics_Driver::color(uchar r,uchar g,uchar b) {
- Fl_Graphics_Driver::color( fl_rgb_color(r, g, b) );
- if(!fl_gc) return; // don't get a default gc if current window is not yet created/valid
- XSetForeground(fl_display, fl_gc, fl_xpixel(r,g,b));
-}
-
-/** \addtogroup fl_attributes
- @{ */
-////////////////////////////////////////////////////////////////
-// Get an rgb color. This is easy for a truecolor visual. For
-// colormapped it picks the closest color out of the cube in the
-// fltk colormap. However if this color cube entry has been
-// requested before, you will get the earlier requested color, and
-// even this may be approximated if the X colormap was full.
-
-/**
- Returns the X pixel number used to draw the given rgb color.
- This is the X pixel that fl_color() would use.
- \param[in] r,g,b color components
- \return X pixel number
-*/
-ulong fl_xpixel(uchar r,uchar g,uchar b) {
- if (!beenhere) figure_out_visual();
-# if USE_COLORMAP
- if (!fl_redmask) {
- // find closest entry in the colormap:
- Fl_Color i =
- fl_color_cube(r*FL_NUM_RED/256,g*FL_NUM_GREEN/256,b*FL_NUM_BLUE/256);
- Fl_XColor &xmap = fl_xmap[fl_overlay][i];
- if (xmap.mapped) return xmap.pixel;
- // if not black or white, change the entry to be an exact match:
- if (i != FL_COLOR_CUBE && i != 0xFF)
- fl_cmap[i] = (r<<24)|(g<<16)|(b<<8);
- return fl_xpixel(i); // allocate an X color
- }
-# endif
- return
- (((r&fl_redmask) << fl_redshift)+
- ((g&fl_greenmask)<<fl_greenshift)+
- ((b&fl_bluemask)<< fl_blueshift)
- ) >> fl_extrashift;
-}
-
-////////////////////////////////////////////////////////////////
-// Get a color out of the fltk colormap. Again for truecolor
-// visuals this is easy. For colormap this actually tries to allocate
-// an X color, and does a least-squares match to find the closest
-// color if X cannot allocate that color.
-
-// calculate what color is actually on the screen for a mask:
-static inline uchar realcolor(uchar color, uchar mask) {
-# if 0
- // accurate version if the display has linear gamma, but fl_draw_image
- // works better with the simpler version on most screens...
- uchar m = mask;
- uchar result = color&m;
- for (;;) {
- while (m&mask) {m>>=1; color>>=1;}
- if (!m) break;
- mask = m;
- result |= color&m;
- }
- return result;
-# else
- return (color&mask) | ( (~mask)&(mask>>1) );
-# endif
-}
-
-/**
- Returns the X pixel number used to draw the given FLTK color index.
- This is the X pixel that fl_color() would use.
- \param[in] i color index
- \return X pixel number
-*/
-ulong fl_xpixel(Fl_Color i) {
- if (i & 0xffffff00) {
- return fl_xpixel((i >> 24) & 255, (i >> 16) & 255, (i >> 8) & 255);
- }
-
- Fl_XColor &xmap = fl_xmap[fl_overlay][i];
- if (xmap.mapped) return xmap.pixel;
-
- if (!beenhere) figure_out_visual();
-
- uchar r,g,b;
- {unsigned c = fl_cmap[i]; r=uchar(c>>24); g=uchar(c>>16); b=uchar(c>>8);}
-
-# if USE_COLORMAP
- Colormap colormap = fl_colormap;
-# if HAVE_OVERLAY
- if (fl_overlay) colormap = fl_overlay_colormap; else
-# endif
- if (fl_redmask) {
-# endif
- // return color for a truecolor visual:
- xmap.mapped = 2; // 2 prevents XFreeColor from being called
- xmap.r = realcolor(r, fl_redmask);
- xmap.g = realcolor(g, fl_greenmask);
- xmap.b = realcolor(b, fl_bluemask);
- return xmap.pixel =
- (((r&fl_redmask) << fl_redshift)+
- ((g&fl_greenmask)<<fl_greenshift)+
- ((b&fl_bluemask)<< fl_blueshift)
- ) >> fl_extrashift;
-# if USE_COLORMAP
- }
-# if HAVE_OVERLAY
- static XColor* ac[2];
- XColor*& allcolors = ac[fl_overlay];
- static int nc[2];
- int& numcolors = nc[fl_overlay];
-# else
- static XColor *allcolors;
- static int numcolors;
-# endif
-
- // I don't try to allocate colors with XAllocColor once it fails
- // with any color. It is possible that it will work, since a color
- // may have been freed, but some servers are extremely slow and this
- // avoids one round trip:
- if (!numcolors) { // don't try after a failure
- XColor xcol;
- xcol.red = r<<8; xcol.green = g<<8; xcol.blue = b<<8;
- if (XAllocColor(fl_display, colormap, &xcol)) {
- xmap.mapped = 1;
- xmap.r = xcol.red>>8;
- xmap.g = xcol.green>>8;
- xmap.b = xcol.blue>>8;
- return xmap.pixel = xcol.pixel;
- }
-
- // I only read the colormap once. Again this is due to the slowness
- // of round-trips to the X server, even though other programs may alter
- // the colormap after this and make decisions here wrong.
-# if HAVE_OVERLAY
- if (fl_overlay) numcolors = fl_overlay_visual->colormap_size; else
-# endif
- numcolors = fl_visual->colormap_size;
- if (!allcolors) allcolors = new XColor[numcolors];
- for (int p = numcolors; p--;) allcolors[p].pixel = p;
- XQueryColors(fl_display, colormap, allcolors, numcolors);
- }
-
- // find least-squares match:
- int mindist = 0x7FFFFFFF;
- unsigned int bestmatch = 0;
- for (unsigned int n = numcolors; n--;) {
-# if HAVE_OVERLAY
- if (fl_overlay && n == fl_transparent_pixel) continue;
-# endif
- XColor &a = allcolors[n];
- int d, t;
- t = int(r)-int(a.red>>8); d = t*t;
- t = int(g)-int(a.green>>8); d += t*t;
- t = int(b)-int(a.blue>>8); d += t*t;
- if (d <= mindist) {bestmatch = n; mindist = d;}
- }
- XColor &p = allcolors[bestmatch];
-
- // It appears to "work" to not call this XAllocColor, which will
- // avoid another round-trip to the server. But then X does not
- // know that this program "owns" this value, and can (and will)
- // change it when the program that did allocate it exits:
- if (XAllocColor(fl_display, colormap, &p)) {
- xmap.mapped = 1;
- xmap.pixel = p.pixel;
- } else {
- // However, if that XAllocColor fails, I have to give up and
- // assume the pixel is ok for the duration of the program. This
- // is due to bugs (?) in the Solaris X and some X terminals
- // where XAllocColor *always* fails when the colormap is full,
- // even if we ask for a color already in it...
- xmap.mapped = 2; // 2 prevents XFreeColor from being called
- xmap.pixel = bestmatch;
- }
- xmap.r = p.red>>8;
- xmap.g = p.green>>8;
- xmap.b = p.blue>>8;
- return xmap.pixel;
-# endif
-}
-
-/**
- Free color \p i if used, and clear mapping table entry.
- \param[in] i color index
- \param[in] overlay 0 for normal, 1 for overlay color
-*/
-void Fl::free_color(Fl_Color i, int overlay) {
-# if HAVE_OVERLAY
-# else
- if (overlay) return;
-# endif
- if (fl_xmap[overlay][i].mapped) {
-# if USE_COLORMAP
-# if HAVE_OVERLAY
- Colormap colormap = overlay ? fl_overlay_colormap : fl_colormap;
-# else
- Colormap colormap = fl_colormap;
-# endif
- if (fl_xmap[overlay][i].mapped == 1)
- XFreeColors(fl_display, colormap, &(fl_xmap[overlay][i].pixel), 1, 0);
-# endif
- fl_xmap[overlay][i].mapped = 0;
- }
-}
-
-/**
- Set color mapping table entry \p i to color \p c
- \param[in] i color index
- \param[in] c color
-*/
-void Fl::set_color(Fl_Color i, unsigned c) {
- if (fl_cmap[i] != c) {
- free_color(i,0);
-# if HAVE_OVERLAY
- free_color(i,1);
-# endif
- fl_cmap[i] = c;
- }
-}
-
-/**
- @}
- */
-
-//
-// End of "$Id$".
-//
diff --git a/src/cfg_gfx/xlib_line_style.cxx b/src/cfg_gfx/xlib_line_style.cxx
deleted file mode 100644
index 55e759a61..000000000
--- a/src/cfg_gfx/xlib_line_style.cxx
+++ /dev/null
@@ -1,71 +0,0 @@
-//
-// "$Id$"
-//
-// Line style 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_CFG_GFX_XLIB_LINE_STYLE_CXX
-#define FL_CFG_GFX_XLIB_LINE_STYLE_CXX
-
-/**
- \file xlib_line_style.cxx
- \brief Line style drawing utility hiding different platforms.
-*/
-
-#include "xlib.H"
-
-void Fl_Xlib_Graphics_Driver::line_style(int style, int width, char* dashes) {
-
- // save line width in global variable for X11 clipping
- if (width == 0) fl_line_width_ = 1;
- else fl_line_width_ = width>0 ? width : -width;
-
- int ndashes = dashes ? strlen(dashes) : 0;
- // emulate the WIN32 dash patterns on X
- char buf[7];
- if (!ndashes && (style&0xff)) {
- int w = width ? width : 1;
- char dash, dot, gap;
- // adjust lengths to account for cap:
- if (style & 0x200) {
- dash = char(2*w);
- dot = 1; // unfortunately 0 does not work
- gap = char(2*w-1);
- } else {
- dash = char(3*w);
- dot = gap = char(w);
- }
- char* p = dashes = buf;
- switch (style & 0xff) {
- case FL_DASH: *p++ = dash; *p++ = gap; break;
- case FL_DOT: *p++ = dot; *p++ = gap; break;
- case FL_DASHDOT: *p++ = dash; *p++ = gap; *p++ = dot; *p++ = gap; break;
- case FL_DASHDOTDOT: *p++ = dash; *p++ = gap; *p++ = dot; *p++ = gap; *p++ = dot; *p++ = gap; break;
- }
- ndashes = p-buf;
- }
- static int Cap[4] = {CapButt, CapButt, CapRound, CapProjecting};
- static int Join[4] = {JoinMiter, JoinMiter, JoinRound, JoinBevel};
- XSetLineAttributes(fl_display, fl_gc, width,
- ndashes ? LineOnOffDash : LineSolid,
- Cap[(style>>8)&3], Join[(style>>12)&3]);
- if (ndashes) XSetDashes(fl_display, fl_gc, 0, dashes, ndashes);
-}
-
-#endif // FL_CFG_GFX_XLIB_LINE_STYLE_CXX
-
-//
-// End of "$Id$".
-//
diff --git a/src/cfg_gfx/xlib_rect.cxx b/src/cfg_gfx/xlib_rect.cxx
deleted file mode 100644
index fc5ff1474..000000000
--- a/src/cfg_gfx/xlib_rect.cxx
+++ /dev/null
@@ -1,339 +0,0 @@
-//
-// "$Id$"
-//
-// Rectangle drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2012 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_CFG_GFX_XLIB_RECT_CXX
-#define FL_CFG_GFX_XLIB_RECT_CXX
-
-
-/**
- \file xlib_rect.cxx
- \brief X11 Xlib specific line and polygon drawing with integer coordinates.
- */
-
-
-#include "xlib.H"
-
-
-#ifndef SHRT_MAX
-#define SHRT_MAX (32767)
-#endif
-
-/*
- We need to check some coordinates for areas for clipping before we
- use X functions, because X can't handle coordinates outside the 16-bit
- range. Since all windows use relative coordinates > 0, we do also
- check for negative values. X11 only, see also STR #2304.
-
- Note that this is only necessary for large objects, where only a
- part of the object is visible. The draw() functions (e.g. box
- drawing) must be clipped correctly. This is usually only a matter
- for large container widgets. The individual child widgets will be
- clipped completely.
-
- We define the usable X coordinate space as [ -LW : SHRT_MAX - LW ]
- where LW = current line width for drawing. This is done so that
- horizontal and vertical line drawing works correctly, even in real
- border cases, e.g. drawing a rectangle slightly outside the top left
- window corner, but with a line width so that a part of the line should
- be visible (in this case 2 of 5 pixels):
-
- fl_line_style (FL_SOLID,5); // line width = 5
- fl_rect (-1,-1,100,100); // top/left: 2 pixels visible
-
- In this example case, no clipping would be done, because X can
- handle it and clip unneeded pixels.
-
- Note that we must also take care of the case where fl_line_width_
- is zero (maybe unitialized). If this is the case, we assume a line
- width of 1.
-
- Todo: Arbitrary line drawings (e.g. polygons) and clip regions
- are not yet done.
-
- Note:
-
- We could use max. screen coordinates instead of SHRT_MAX, but that
- would need more work and would probably be slower. We assume that
- all window coordinates are >= 0 and that no window extends up to
- 32767 - LW (where LW = current line width). Thus it is safe to clip
- all coordinates to this range before calling X functions. If this
- is not true, then clip_to_short() and clip_x() must be redefined.
-
- It would be somewhat easier if we had fl_clip_w and fl_clip_h, as
- defined in FLTK 2.0 (for the upper clipping bounds)...
- */
-
-/*
- clip_to_short() returns 1, if the area is invisible (clipped),
- because ...
-
- (a) w or h are <= 0 i.e. nothing is visible
- (b) x+w or y+h are < kmin i.e. left of or above visible area
- (c) x or y are > kmax i.e. right of or below visible area
-
- kmin and kmax are the minimal and maximal X coordinate values,
- as defined above. In this case x, y, w, and h are not changed.
-
- It returns 0, if the area is potentially visible and X can handle
- clipping. x, y, w, and h may have been adjusted to fit into the
- X coordinate space.
-
- Use this for clipping rectangles, as used in fl_rect() and
- fl_rectf().
- */
-static int clip_to_short(int &x, int &y, int &w, int &h) {
-
- int lw = (fl_line_width_ > 0) ? fl_line_width_ : 1;
- int kmin = -lw;
- int kmax = SHRT_MAX - lw;
-
- if (w <= 0 || h <= 0) return 1; // (a)
- if (x+w < kmin || y+h < kmin) return 1; // (b)
- if (x > kmax || y > kmax) return 1; // (c)
-
- if (x < kmin) { w -= (kmin-x); x = kmin; }
- if (y < kmin) { h -= (kmin-y); y = kmin; }
- if (x+w > kmax) w = kmax - x;
- if (y+h > kmax) h = kmax - y;
-
- return 0;
-}
-
-/*
- clip_x() returns a coordinate value clipped to the 16-bit coordinate
- space (see above). This can be used to draw horizontal and vertical
- lines that can be handled by X11. Each single coordinate value can
- be clipped individually, and the result can be used directly, e.g.
- in fl_xyline() and fl_yxline(). Note that this can't be used for
- arbitrary lines (not horizontal or vertical).
- */
-static int clip_x (int x) {
-
- int lw = (fl_line_width_ > 0) ? fl_line_width_ : 1;
- int kmin = -lw;
- int kmax = SHRT_MAX - lw;
-
- if (x < kmin)
- x = kmin;
- else if (x > kmax)
- x = kmax;
- return x;
-}
-
-// Missing X call: (is this the fastest way to init a 1-rectangle region?)
-// MSWindows equivalent exists, implemented inline in win32.H
-Fl_Region XRectangleRegion(int x, int y, int w, int h) {
- XRectangle R;
- clip_to_short(x, y, w, h);
- R.x = x; R.y = y; R.width = w; R.height = h;
- Fl_Region r = XCreateRegion();
- XUnionRectWithRegion(&R, r, r);
- return r;
-}
-
-// --- line and polygon drawing with integer coordinates
-
-void Fl_Xlib_Graphics_Driver::point(int x, int y) {
- XDrawPoint(fl_display, fl_window, fl_gc, clip_x(x), clip_x(y));
-}
-
-void Fl_Xlib_Graphics_Driver::rect(int x, int y, int w, int h) {
- if (w<=0 || h<=0) return;
- if (!clip_to_short(x, y, w, h))
- XDrawRectangle(fl_display, fl_window, fl_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;
- if (!clip_to_short(x, y, w, h))
- XFillRectangle(fl_display, fl_window, fl_gc, x, y, w, h);
-}
-
-void Fl_Xlib_Graphics_Driver::line(int x, int y, int x1, int y1) {
- XDrawLine(fl_display, fl_window, fl_gc, x, y, x1, y1);
-}
-
-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;
- XDrawLines(fl_display, fl_window, fl_gc, p, 3, 0);
-}
-
-void Fl_Xlib_Graphics_Driver::xyline(int x, int y, int x1) {
- XDrawLine(fl_display, fl_window, fl_gc, clip_x(x), clip_x(y), clip_x(x1), clip_x(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);
- XDrawLines(fl_display, fl_window, fl_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);
- XDrawLines(fl_display, fl_window, fl_gc, p, 4, 0);
-}
-
-void Fl_Xlib_Graphics_Driver::yxline(int x, int y, int y1) {
- XDrawLine(fl_display, fl_window, fl_gc, clip_x(x), clip_x(y), clip_x(x), clip_x(y1));
-}
-
-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);
- XDrawLines(fl_display, fl_window, fl_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);
- XDrawLines(fl_display, fl_window, fl_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;
- XDrawLines(fl_display, fl_window, fl_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;
- XDrawLines(fl_display, fl_window, fl_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;
- XFillPolygon(fl_display, fl_window, fl_gc, p, 3, Convex, 0);
- XDrawLines(fl_display, fl_window, fl_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;
- XFillPolygon(fl_display, fl_window, fl_gc, p, 4, Convex, 0);
- XDrawLines(fl_display, fl_window, fl_gc, p, 5, 0);
-}
-
-// --- clipping
-
-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);
- Fl_Region current = rstack[rstackptr];
- if (current) {
- Fl_Region temp = XCreateRegion();
- XIntersectRegion(current, r, temp);
- XDestroyRegion(r);
- r = temp;
- }
- } else { // make empty clip region:
- r = XCreateRegion();
- }
- if (rstackptr < region_stack_max) rstack[++rstackptr] = r;
- else Fl::warning("Fl_Xlib_Graphics_Driver::push_clip: clip stack overflow!\n");
- fl_restore_clip();
-}
-
-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;
- Fl_Region r = rstack[rstackptr];
- if (!r) return 0;
- switch (XRectInRegion(r, x, y, w, h)) {
- case 0: // completely outside
- W = H = 0;
- return 2;
- case 1: // completely inside:
- return 0;
- default: // partial:
- break;
- }
- Fl_Region rr = XRectangleRegion(x,y,w,h);
- Fl_Region temp = XCreateRegion();
- XIntersectRegion(r, rr, temp);
- XRectangle rect;
- XClipBox(temp, &rect);
- X = rect.x; Y = rect.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) {
- if (x+w <= 0 || y+h <= 0) return 0;
- Fl_Region r = rstack[rstackptr];
- if (!r) return 1;
- // get rid of coordinates outside the 16-bit range the X calls take.
- if (clip_to_short(x,y,w,h)) return 0; // clipped
- return XRectInRegion(r, x, y, w, h);
-}
-
-// make there be no clip (used by fl_begin_offscreen() only!)
-void Fl_Xlib_Graphics_Driver::push_no_clip() {
- if (rstackptr < region_stack_max) rstack[++rstackptr] = 0;
- else Fl::warning("fl_push_no_cFl_Xlib_Graphics_Driver::push_no_cliplip: clip stack overflow!\n");
- fl_restore_clip();
-}
-
-// pop back to previous clip:
-void Fl_Xlib_Graphics_Driver::pop_clip() {
- if (rstackptr > 0) {
- Fl_Region oldr = rstack[rstackptr--];
- if (oldr) XDestroyRegion(oldr);
- } else Fl::warning("Fl_Xlib_Graphics_Driver::pop_clip: clip stack underflow!\n");
- fl_restore_clip();
-}
-
-void Fl_Xlib_Graphics_Driver::restore_clip() {
- fl_clip_state_number++;
- Fl_Region r = rstack[rstackptr];
- if (r) XSetRegion(fl_display, fl_gc, r);
- else XSetClipMask(fl_display, fl_gc, 0);
-}
-
-#endif // FL_CFG_GFX_XLIB_RECT_CXX
-
-//
-// End of "$Id$".
-//
diff --git a/src/cfg_gfx/xlib_vertex.cxx b/src/cfg_gfx/xlib_vertex.cxx
deleted file mode 100644
index 9fe73a27c..000000000
--- a/src/cfg_gfx/xlib_vertex.cxx
+++ /dev/null
@@ -1,116 +0,0 @@
-//
-// "$Id$"
-//
-// Portable drawing routines 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_CFG_GFX_XLIB_VERTEX_CXX
-#define FL_CFG_GFX_XLIB_VERTEX_CXX
-
-/**
- \file xlib_vertex.cxx
- \brief Portable drawing code for drawing arbitrary shapes with
- simple 2D transformations, implemented for X11 Xlib.
- */
-
-#include "xlib.H"
-
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-#include <FL/math.h>
-
-
-void Fl_Xlib_Graphics_Driver::transformed_vertex(double xf, double yf) {
- transformed_vertex0(COORD_T(rint(xf)), COORD_T(rint(yf)));
-}
-
-void Fl_Xlib_Graphics_Driver::vertex(double x,double y) {
- transformed_vertex0(COORD_T(x*m.a + y*m.c + m.x), COORD_T(x*m.b + y*m.d + m.y));
-}
-
-void Fl_Xlib_Graphics_Driver::end_points() {
- if (n>1) XDrawPoints(fl_display, fl_window, fl_gc, p, n, 0);
-}
-
-void Fl_Xlib_Graphics_Driver::end_line() {
- if (n < 2) {
- end_points();
- return;
- }
- if (n>1) XDrawLines(fl_display, fl_window, fl_gc, p, n, 0);
-}
-
-void Fl_Xlib_Graphics_Driver::end_loop() {
- fixloop();
- if (n>2) transformed_vertex((COORD_T)p[0].x, (COORD_T)p[0].y);
- end_line();
-}
-
-void Fl_Xlib_Graphics_Driver::end_polygon() {
- fixloop();
- if (n < 3) {
- end_line();
- return;
- }
- if (n>2) XFillPolygon(fl_display, fl_window, fl_gc, p, n, Convex, 0);
-}
-
-void Fl_Xlib_Graphics_Driver::begin_complex_polygon() {
- begin_polygon();
- gap_ = 0;
-}
-
-void Fl_Xlib_Graphics_Driver::gap() {
- while (n>gap_+2 && p[n-1].x == p[gap_].x && p[n-1].y == p[gap_].y) n--;
- if (n > gap_+2) {
- transformed_vertex((COORD_T)p[gap_].x, (COORD_T)p[gap_].y);
- gap_ = n;
- } else {
- n = gap_;
- }
-}
-
-void Fl_Xlib_Graphics_Driver::end_complex_polygon() {
- gap();
- if (n < 3) {
- end_line();
- return;
- }
- if (n>2) XFillPolygon(fl_display, fl_window, fl_gc, p, n, 0, 0);
-}
-
-// shortcut the closed circles so they use XDrawArc:
-// warning: these do not draw rotated ellipses correctly!
-// See fl_arc.c for portable version.
-
-void Fl_Xlib_Graphics_Driver::circle(double x, double y,double r) {
- double xt = transform_x(x,y);
- double yt = transform_y(x,y);
- double rx = r * (m.c ? sqrt(m.a*m.a+m.c*m.c) : fabs(m.a));
- double ry = r * (m.b ? sqrt(m.b*m.b+m.d*m.d) : fabs(m.d));
- int llx = (int)rint(xt-rx);
- int w = (int)rint(xt+rx)-llx;
- int lly = (int)rint(yt-ry);
- int h = (int)rint(yt+ry)-lly;
-
- (what == POLYGON ? XFillArc : XDrawArc)
- (fl_display, fl_window, fl_gc, llx, lly, w, h, 0, 360*64);
-}
-
-#endif // FL_CFG_GFX_XLIB_VERTEX_CXX
-
-//
-// End of "$Id$".
-//