Removed global variables fl_font_ and fl_size_ that are now distinct for each graphics device.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@8374 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
parent
668dfd109f
commit
777ee1b822
@ -59,6 +59,8 @@ typedef void (*Fl_Draw_Image_Cb)(void* data,int x,int y,int w,uchar* buf);
|
||||
|
||||
#define MATRIX_STACK_SIZE 32
|
||||
#define MATRIX_STACK_MAX (MATRIX_STACK_SIZE - 1)
|
||||
/** A 2D coordinate transformation matrix
|
||||
*/
|
||||
struct matrix {double a, b, c, d, x, y;};
|
||||
|
||||
// typedef what the x,y fields in a point are:
|
||||
@ -110,6 +112,8 @@ public:
|
||||
in the \ref fl_drawings and \ref fl_attributes modules.
|
||||
*/
|
||||
class FL_EXPORT Fl_Graphics_Driver : public Fl_Device {
|
||||
Fl_Font font_; // current font
|
||||
Fl_Fontsize size_; // current font size
|
||||
enum {LINE, LOOP, POLYGON, POINT_};
|
||||
int sptr;
|
||||
matrix stack[MATRIX_STACK_SIZE];
|
||||
@ -199,7 +203,7 @@ protected:
|
||||
friend FL_EXPORT void fl_draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D);
|
||||
friend void gl_start();
|
||||
|
||||
matrix *fl_matrix;
|
||||
matrix *fl_matrix; /**< Points to the current coordinate transformation matrix */
|
||||
|
||||
/** \brief The constructor. */
|
||||
Fl_Graphics_Driver();
|
||||
@ -345,7 +349,11 @@ protected:
|
||||
public:
|
||||
static const char *class_id;
|
||||
/** \brief see fl_font(Fl_Font face, Fl_Fontsize size). */
|
||||
virtual void font(Fl_Font face, Fl_Fontsize size) = 0;
|
||||
virtual void font(Fl_Font face, Fl_Fontsize size) {font_ = face; size_ = size;}
|
||||
/** \brief see fl_font(). */
|
||||
Fl_Font font() {return font_; }
|
||||
/** \brief see fl_size(). */
|
||||
Fl_Fontsize size() {return size_; }
|
||||
/** \brief The destructor */
|
||||
virtual ~Fl_Graphics_Driver() {};
|
||||
};
|
||||
|
@ -76,8 +76,6 @@ class Clip {
|
||||
Clip * clip_;
|
||||
|
||||
int lang_level_;
|
||||
int font_;
|
||||
int size_;
|
||||
int gap_;
|
||||
int pages_;
|
||||
|
||||
@ -182,8 +180,6 @@ class Clip {
|
||||
void transformed_vertex(double x, double y);
|
||||
|
||||
void font(int face, int size);
|
||||
int font(){return font_;};
|
||||
int size(){return size_;};
|
||||
|
||||
void draw_image(const uchar* d, int x,int y,int w,int h, int delta=3, int ldelta=0){draw_scaled_image(d,x,y,w,h,w,h,delta,ldelta);};
|
||||
void draw_image_mono(const uchar* d, int x,int y,int w,int h, int delta=1, int ld=0){draw_scaled_image_mono(d,x,y,w,h,w,h,delta,ld);};
|
||||
|
@ -480,20 +480,17 @@ inline void fl_transformed_vertex(double xf, double yf) {fl_graphics_driver->tra
|
||||
Lines should be spaced \p size pixels apart or more.
|
||||
*/
|
||||
inline void fl_font(Fl_Font face, Fl_Fontsize size) { fl_graphics_driver->font(face,size); }
|
||||
extern FL_EXPORT Fl_Font fl_font_; ///< current font index
|
||||
|
||||
/**
|
||||
Returns the \p face set by the most recent call to fl_font().
|
||||
This can be used to save/restore the font.
|
||||
*/
|
||||
inline Fl_Font fl_font() {return fl_font_;}
|
||||
/** \brief current font size */
|
||||
extern FL_EXPORT Fl_Fontsize fl_size_;
|
||||
inline Fl_Font fl_font() {return fl_graphics_driver->font();}
|
||||
/**
|
||||
Returns the \p size set by the most recent call to fl_font().
|
||||
This can be used to save/restore the font.
|
||||
*/
|
||||
inline Fl_Fontsize fl_size() {return fl_size_;}
|
||||
inline Fl_Fontsize fl_size() {return fl_graphics_driver->size();}
|
||||
|
||||
// information you can get about the current font:
|
||||
/**
|
||||
|
@ -54,11 +54,13 @@ void Fl_Surface_Device::set_current(void)
|
||||
static matrix m0 = {1, 0, 0, 1, 0, 0};
|
||||
|
||||
Fl_Graphics_Driver::Fl_Graphics_Driver() {
|
||||
sptr=0; rstackptr=0;
|
||||
fl_clip_state_number=0;
|
||||
m = m0;
|
||||
fl_matrix = &m;
|
||||
p = (XPOINT *)0;
|
||||
font_ = 0;
|
||||
size_ = 0;
|
||||
sptr=0; rstackptr=0;
|
||||
fl_clip_state_number=0;
|
||||
m = m0;
|
||||
fl_matrix = &m;
|
||||
p = (XPOINT *)0;
|
||||
};
|
||||
|
||||
//
|
||||
|
@ -589,15 +589,14 @@ int Fl_PostScript_Graphics_Driver::start_postscript (int pagecount,
|
||||
void Fl_PostScript_Graphics_Driver::recover(){
|
||||
color(cr_,cg_,cb_);
|
||||
line_style(linestyle_,linewidth_,linedash_);
|
||||
font(font_,size_);
|
||||
font(Fl_Graphics_Driver::font(), Fl_Graphics_Driver::size());
|
||||
}
|
||||
|
||||
void Fl_PostScript_Graphics_Driver::reset(){
|
||||
gap_=1;
|
||||
clip_=0;
|
||||
cr_=cg_=cb_=0;
|
||||
font_=FL_HELVETICA;
|
||||
size_=12;
|
||||
Fl_Graphics_Driver::font(FL_HELVETICA, 12);
|
||||
linewidth_=0;
|
||||
linestyle_=FL_SOLID;
|
||||
strcpy(linedash_,"");
|
||||
@ -932,7 +931,7 @@ void Fl_PostScript_Graphics_Driver::font(int f, int s) {
|
||||
fprintf(output, "/%s SF\n" , _fontNames[f]);
|
||||
fprintf(output,"%i FS\n", s);
|
||||
Fl_Display_Device::display_device()->driver()->font(f,s); // Use display fonts for font measurement
|
||||
font_ = f; size_ = s;
|
||||
Fl_Graphics_Driver::font(f, s);
|
||||
}
|
||||
|
||||
void Fl_PostScript_Graphics_Driver::color(Fl_Color c) {
|
||||
|
@ -250,18 +250,12 @@ static Fl_Font_Descriptor* find(Fl_Font fnum, Fl_Fontsize size) {
|
||||
////////////////////////////////////////////////////////////////
|
||||
// Public interface:
|
||||
|
||||
Fl_Font fl_font_ = 0;
|
||||
Fl_Fontsize fl_size_ = 0;
|
||||
|
||||
|
||||
void Fl_Quartz_Graphics_Driver::font(Fl_Font fnum, Fl_Fontsize size) {
|
||||
if (fnum==-1) {
|
||||
fl_font_ = 0;
|
||||
fl_size_ = 0;
|
||||
Fl_Graphics_Driver::font(0, 0);
|
||||
return;
|
||||
}
|
||||
fl_font_ = fnum;
|
||||
fl_size_ = size;
|
||||
Fl_Graphics_Driver::font(fnum, size);
|
||||
fl_font(find(fnum, size));
|
||||
}
|
||||
|
||||
|
@ -132,11 +132,11 @@ static Fl_Font_Descriptor* find(Fl_Font fnum, Fl_Fontsize size, int angle) {
|
||||
////////////////////////////////////////////////////////////////
|
||||
// Public interface:
|
||||
|
||||
Fl_Font fl_font_ = 0;
|
||||
Fl_Fontsize fl_size_ = 0;
|
||||
static Fl_Font fl_font_ = 0;
|
||||
static Fl_Fontsize fl_size_ = 0;
|
||||
//static HDC font_gc;
|
||||
|
||||
void fl_font(Fl_Font fnum, Fl_Fontsize size, int angle) {
|
||||
static void fl_font(Fl_Font fnum, Fl_Fontsize size, int angle) {
|
||||
if (fnum==-1) { // just make sure that we will load a new font next time
|
||||
fl_font_ = 0; fl_size_ = 0; fl_angle_ = 0;
|
||||
return;
|
||||
@ -148,6 +148,7 @@ void fl_font(Fl_Font fnum, Fl_Fontsize size, int angle) {
|
||||
|
||||
void Fl_GDI_Graphics_Driver::font(Fl_Font fnum, Fl_Fontsize size) {
|
||||
fl_font(fnum, size, 0);
|
||||
Fl_Graphics_Driver::font(fl_font_, fl_size_);
|
||||
}
|
||||
|
||||
int fl_height() {
|
||||
|
@ -260,8 +260,6 @@ static Fl_Font_Descriptor* find(int fnum, int size) {
|
||||
////////////////////////////////////////////////////////////////
|
||||
// Public interface:
|
||||
|
||||
Fl_Font fl_font_ = 0;
|
||||
Fl_Fontsize fl_size_ = 0;
|
||||
void *fl_xftfont = 0;
|
||||
static GC font_gc;
|
||||
|
||||
@ -271,11 +269,11 @@ XFontStruct* Fl_XFont_On_Demand::value() {
|
||||
|
||||
void Fl_Xlib_Graphics_Driver::font(Fl_Font fnum, Fl_Fontsize size) {
|
||||
if (fnum==-1) {
|
||||
fl_font_ = 0; fl_size_ = 0;
|
||||
Fl_Graphics_Driver::font(0, 0);
|
||||
return;
|
||||
}
|
||||
if (fnum == fl_font_ && size == fl_size_) return;
|
||||
fl_font_ = fnum; fl_size_ = size;
|
||||
if (fnum == Fl_Graphics_Driver::font() && size == Fl_Graphics_Driver::size()) return;
|
||||
Fl_Graphics_Driver::font(fnum, size);
|
||||
Fl_Font_Descriptor* f = find(fnum, size);
|
||||
if (f != fl_fontsize) {
|
||||
fl_fontsize = f;
|
||||
|
@ -110,8 +110,8 @@ Fl_Fontdesc* fl_fonts = built_in_table;
|
||||
|
||||
#define current_font (fl_fontsize->font)
|
||||
|
||||
Fl_Font fl_font_ = 0;
|
||||
Fl_Fontsize fl_size_ = 0;
|
||||
static Fl_Font fl_font_ = 0;
|
||||
static Fl_Fontsize fl_size_ = 0;
|
||||
int fl_angle_ = 0; // internal for rotating text support
|
||||
Fl_XFont_On_Demand fl_xfont;
|
||||
void *fl_xftfont = 0;
|
||||
@ -154,6 +154,7 @@ void fl_font(Fl_Font fnum, Fl_Fontsize size, int angle) {
|
||||
|
||||
void Fl_Xlib_Graphics_Driver::font(Fl_Font fnum, Fl_Fontsize size) {
|
||||
fl_font(fnum,size,0);
|
||||
Fl_Graphics_Driver::font(fl_font_, fl_size_);
|
||||
}
|
||||
|
||||
static XftFont* fontopen(const char* name, bool core, int angle) {
|
||||
|
@ -35,6 +35,7 @@
|
||||
#include <FL/gl.h>
|
||||
#include <FL/x.H>
|
||||
#include <FL/fl_draw.H>
|
||||
#include <FL/Fl_Device.H>
|
||||
#include "Fl_Gl_Choice.H"
|
||||
#include "Fl_Font.H"
|
||||
#include <FL/fl_utf8.h>
|
||||
@ -161,8 +162,7 @@ void gl_remove_displaylist_fonts()
|
||||
# if HAVE_GL
|
||||
|
||||
// clear variables used mostly in fl_font
|
||||
fl_font_ = 0;
|
||||
fl_size_ = 0;
|
||||
fl_graphics_driver->font(0, 0);
|
||||
|
||||
for (int j = 0 ; j < FL_FREE_FONT ; ++j)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user