summaryrefslogtreecommitdiff
path: root/src/drivers/GDI
diff options
context:
space:
mode:
authorManolo Gouy <Manolo>2018-02-07 15:34:44 +0000
committerManolo Gouy <Manolo>2018-02-07 15:34:44 +0000
commitdcc82d8926e447e422f200d01e1aa990233bc16a (patch)
treebc0d120f1381e0e8c0ef5c66262289e93d3b9a08 /src/drivers/GDI
parent90630409cbe8740d2c8b66823757a4ea5441aa21 (diff)
STR#3450: Draw text with OpenGL using textures on all platforms.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12650 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/drivers/GDI')
-rw-r--r--src/drivers/GDI/Fl_Font.H30
-rw-r--r--src/drivers/GDI/Fl_GDI_Graphics_Driver.H3
-rw-r--r--src/drivers/GDI/Fl_GDI_Graphics_Driver_font.cxx31
3 files changed, 18 insertions, 46 deletions
diff --git a/src/drivers/GDI/Fl_Font.H b/src/drivers/GDI/Fl_Font.H
index fd36aab24..b530ec422 100644
--- a/src/drivers/GDI/Fl_Font.H
+++ b/src/drivers/GDI/Fl_Font.H
@@ -3,7 +3,7 @@
//
// Font definitions for the Fast Light Tool Kit (FLTK).
//
-// Copyright 1998-2011 by Bill Spitzak and others.
+// Copyright 1998-2018 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
@@ -26,39 +26,17 @@
#include <config.h>
-/**
- This a structure for an actual system font, with junk to
- help choose it and info on character sizes. Each Fl_Fontdesc has a
- linked list of these. These are created the first time each system
- font/size combination is used.
-*/
-class Fl_Font_Descriptor {
+class Fl_GDI_Font_Descriptor : public Fl_Font_Descriptor {
public:
- /** linked list for this Fl_Fontdesc */
- Fl_Font_Descriptor *next;
- Fl_Fontsize size; /**< font size */
-#ifndef FL_DOXYGEN // don't bother with platorm dependant details in the doc.
HFONT fid;
int *width[64];
TEXTMETRIC metr;
int angle;
- FL_EXPORT Fl_Font_Descriptor(const char* fontname, Fl_Fontsize size);
+ FL_EXPORT Fl_GDI_Font_Descriptor(const char* fontname, Fl_Fontsize size);
# if HAVE_GL
- unsigned int listbase;// base of display list, 0 = none
char glok[64];
# endif // HAVE_GL
-
- FL_EXPORT ~Fl_Font_Descriptor();
-
-#endif // FL_DOXYGEN
-};
-
-//extern FL_EXPORT Fl_Font_Descriptor *fl_fontsize; // the currently selected one
-
-struct Fl_Fontdesc {
- const char *name;
- char fontname[128]; // "Pretty" font name
- Fl_Font_Descriptor *first; // linked list of sizes of this style
+ FL_EXPORT ~Fl_GDI_Font_Descriptor();
};
extern FL_EXPORT Fl_Fontdesc *fl_fonts; // the table
diff --git a/src/drivers/GDI/Fl_GDI_Graphics_Driver.H b/src/drivers/GDI/Fl_GDI_Graphics_Driver.H
index fea0ccac4..8de2a9a1d 100644
--- a/src/drivers/GDI/Fl_GDI_Graphics_Driver.H
+++ b/src/drivers/GDI/Fl_GDI_Graphics_Driver.H
@@ -4,7 +4,7 @@
// Definition of classes Fl_Graphics_Driver, Fl_Surface_Device, Fl_Display_Device
// for the Fast Light Tool Kit (FLTK).
//
-// Copyright 2010-2017 by Bill Spitzak and others.
+// Copyright 2010-2018 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
@@ -146,7 +146,6 @@ protected:
virtual const char* get_font_name(Fl_Font fnum, int* ap);
virtual const char *font_name(int num);
virtual void font_name(int num, const char *name);
- virtual unsigned font_desc_size();
void global_gc();
};
diff --git a/src/drivers/GDI/Fl_GDI_Graphics_Driver_font.cxx b/src/drivers/GDI/Fl_GDI_Graphics_Driver_font.cxx
index 360076b0f..c9d74e59e 100644
--- a/src/drivers/GDI/Fl_GDI_Graphics_Driver_font.cxx
+++ b/src/drivers/GDI/Fl_GDI_Graphics_Driver_font.cxx
@@ -189,10 +189,6 @@ int Fl_GDI_Graphics_Driver::get_font_sizes(Fl_Font fnum, int*& sizep) {
return nbSize;
}
-unsigned Fl_GDI_Graphics_Driver::font_desc_size() {
- return (unsigned)sizeof(Fl_Fontdesc);
-}
-
const char *Fl_GDI_Graphics_Driver::font_name(int num) {
return fl_fonts[num].name;
}
@@ -215,7 +211,7 @@ void Fl_GDI_Graphics_Driver::font_name(int num, const char *name) {
static int fl_angle_ = 0;
#ifndef FL_DOXYGEN
-Fl_Font_Descriptor::Fl_Font_Descriptor(const char* name, Fl_Fontsize fsize) {
+Fl_GDI_Font_Descriptor::Fl_GDI_Font_Descriptor(const char* name, Fl_Fontsize fsize) : Fl_Font_Descriptor(name,fsize) {
int weight = FW_NORMAL;
int italic = 0;
switch (*name++) {
@@ -252,13 +248,12 @@ Fl_Font_Descriptor::Fl_Font_Descriptor(const char* name, Fl_Fontsize fsize) {
int i;
memset(width, 0, 64 * sizeof(int*));
#if HAVE_GL
- listbase = 0;
for (i = 0; i < 64; i++) glok[i] = 0;
#endif
size = fsize;
}
-Fl_Font_Descriptor::~Fl_Font_Descriptor() {
+Fl_GDI_Font_Descriptor::~Fl_GDI_Font_Descriptor() {
#if HAVE_GL
// Delete list created by gl_draw(). This is not done by this code
// as it will link in GL unnecessarily. There should be some kind
@@ -296,13 +291,13 @@ static Fl_Fontdesc built_in_table[] = {
Fl_Fontdesc* fl_fonts = built_in_table;
-static Fl_Font_Descriptor* find(Fl_Font fnum, Fl_Fontsize size, int angle) {
+static Fl_GDI_Font_Descriptor* find(Fl_Font fnum, Fl_Fontsize size, int angle) {
Fl_Fontdesc* s = fl_fonts+fnum;
if (!s->name) s = fl_fonts; // use 0 if fnum undefined
- Fl_Font_Descriptor* f;
- for (f = s->first; f; f = f->next)
+ Fl_GDI_Font_Descriptor* f;
+ for (f = (Fl_GDI_Font_Descriptor*)s->first; f; f = (Fl_GDI_Font_Descriptor*)f->next)
if (f->size == size && f->angle == angle) return f;
- f = new Fl_Font_Descriptor(s->name, size);
+ f = new Fl_GDI_Font_Descriptor(s->name, size);
f->next = s->first;
s->first = f;
return f;
@@ -328,13 +323,13 @@ void Fl_GDI_Graphics_Driver::font_unscaled(Fl_Font fnum, Fl_Fontsize size) {
}
int Fl_GDI_Graphics_Driver::height_unscaled() {
- Fl_Font_Descriptor *fl_fontsize = font_descriptor();
+ Fl_GDI_Font_Descriptor *fl_fontsize = (Fl_GDI_Font_Descriptor*)font_descriptor();
if (fl_fontsize) return (fl_fontsize->metr.tmAscent + fl_fontsize->metr.tmDescent);
else return -1;
}
int Fl_GDI_Graphics_Driver::descent_unscaled() {
- Fl_Font_Descriptor *fl_fontsize = font_descriptor();
+ Fl_GDI_Font_Descriptor *fl_fontsize = (Fl_GDI_Font_Descriptor*)font_descriptor();
if (fl_fontsize) return fl_fontsize->metr.tmDescent;
else return -1;
}
@@ -369,7 +364,7 @@ double Fl_GDI_Graphics_Driver::width_unscaled(const char* c, int n) {
}
double Fl_GDI_Graphics_Driver::width_unscaled(unsigned int c) {
- Fl_Font_Descriptor *fl_fontsize = font_descriptor();
+ Fl_GDI_Font_Descriptor *fl_fontsize = (Fl_GDI_Font_Descriptor*)font_descriptor();
unsigned int r;
SIZE s;
// Special Case Handling of Unicode points over U+FFFF.
@@ -468,7 +463,7 @@ static void on_printer_extents_update(int &dx, int &dy, int &w, int &h, HDC gc)
// Function to determine the extent of the "inked" area of the glyphs in a string
void Fl_GDI_Graphics_Driver::text_extents_unscaled(const char *c, int n, int &dx, int &dy, int &w, int &h) {
- Fl_Font_Descriptor *fl_fontsize = font_descriptor();
+ Fl_GDI_Font_Descriptor *fl_fontsize = (Fl_GDI_Font_Descriptor*)font_descriptor();
if (!fl_fontsize) { // no valid font, nothing to measure
w = 0; h = 0;
dx = dy = 0;
@@ -582,7 +577,7 @@ void Fl_GDI_Graphics_Driver::draw_unscaled(const char* str, int n, int x, int y)
COLORREF oldColor = SetTextColor(gc_, fl_RGB());
// avoid crash if no font has been set yet
if (!font_descriptor()) this->font(FL_HELVETICA, FL_NORMAL_SIZE);
- SelectObject(gc_, font_descriptor()->fid);
+ SelectObject(gc_, ((Fl_GDI_Font_Descriptor*)font_descriptor())->fid);
int wn = fl_utf8toUtf16(str, n, wstr, wstr_len);
if(wn >= wstr_len) {
wstr = (unsigned short*) realloc(wstr, sizeof(unsigned short) * (wn + 1));
@@ -597,7 +592,7 @@ void Fl_GDI_Graphics_Driver::draw_unscaled(int angle, const char* str, int n, in
fl_font(this, Fl_Graphics_Driver::font(), size_unscaled(), angle);
int wn = 0; // count of UTF16 cells to render full string
COLORREF oldColor = SetTextColor(gc_, fl_RGB());
- SelectObject(gc_, font_descriptor()->fid);
+ SelectObject(gc_, ((Fl_GDI_Font_Descriptor*)font_descriptor())->fid);
wn = fl_utf8toUtf16(str, n, wstr, wstr_len);
if(wn >= wstr_len) { // Array too small
wstr = (unsigned short*) realloc(wstr, sizeof(unsigned short) * (wn + 1));
@@ -619,7 +614,7 @@ void Fl_GDI_Graphics_Driver::rtl_draw_unscaled(const char* c, int n, int x, int
}
COLORREF oldColor = SetTextColor(gc_, fl_RGB());
- SelectObject(gc_, font_descriptor()->fid);
+ SelectObject(gc_, ((Fl_GDI_Font_Descriptor*)font_descriptor())->fid);
#ifdef RTL_CHAR_BY_CHAR
int i = 0;
int lx = 0;