summaryrefslogtreecommitdiff
path: root/src/Fl_Font.H
blob: a66d7fee999a2b74af1280e7a06ce6a1627c67f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
//
// "$Id$"
//
// Font definitions for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2011 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
//

// Two internal fltk data structures:
//
// Fl_Fontdesc: an entry into the fl_font() table.  There is one of these
// for each fltk font number.
//
#ifndef FL_FONT_
#define FL_FONT_

#include <config.h>

#if defined(WIN32) || defined(__APPLE__) // PORTME: platform font stuff
#elif defined(FL_PORTING)
#  pragma message "FL_PORTING: implement font descriptor details here"
#else
#endif


#if USE_XFT
typedef struct _XftFont XftFont;
#elif defined(WIN32)
#elif defined(__APPLE__) // PORTME: platform font stuff
#elif defined(FL_PORTING)
#  pragma message "FL_PORTING: do you want to include Xutf8.h?"
#else
#  include "Xutf8.h"
#endif // USE_XFT

/**
   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 {
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. 
#  ifdef WIN32
  HFONT fid;
  int *width[64];
  TEXTMETRIC metr;
  int angle;
  FL_EXPORT Fl_Font_Descriptor(const char* fontname, Fl_Fontsize size);
#  elif defined(__APPLE_QUARTZ__) // PORTME: platform font stuff
  FL_EXPORT Fl_Font_Descriptor(const char* fontname, Fl_Fontsize size);
  ATSUTextLayout layout;
#     if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
  CTFontRef fontref;
  // the unicode span is divided in 512 blocks of 128 characters
  float *width[512]; // array of arrays of character widths
#     endif
  ATSUStyle style;
  short ascent, descent, q_width;
#  elif USE_XFT
  XftFont* font;
  //const char* encoding;
  int angle;
  FL_EXPORT Fl_Font_Descriptor(const char* xfontname, Fl_Fontsize size, int angle);
#  elif defined(FL_PORTING)
#    pragma message "FL_PORTING: define variables and storage types for font handling"
#  else
  XUtf8FontStruct* font;	// X UTF-8 font information
  FL_EXPORT Fl_Font_Descriptor(const char* xfontname);
#  endif
#  if HAVE_GL
  unsigned int listbase;// base of display list, 0 = none
#ifndef __APPLE_QUARTZ__ // PORTME: platform font stuff
  char glok[64];
#endif // __APPLE_QUARTZ__ // PORTME: platform font stuff
#  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
#ifdef WIN32
#elif defined(__APPLE__) // PORTME: platform font stuff
  char **xlist;		// matched X font names
  int n;		// size of xlist, negative = don't free xlist!
#elif defined(FL_PORTING)
#  pragma message "FL_PORTING: do you need additional storage in Fl_Fontdesc?"
#else
  char **xlist;		// matched X font names
  int n;		// size of xlist, negative = don't free xlist!
#endif
};

extern FL_EXPORT Fl_Fontdesc *fl_fonts; // the table

#ifdef WIN32
#elif defined(__APPLE__) // PORTME: platform font stuff
// functions for parsing X font names:
FL_EXPORT const char* fl_font_word(const char *p, int n);
FL_EXPORT char *fl_find_fontsize(char *name);
#elif defined(FL_PORTING)
#  pragma message "FL_PORTING: do you need additional functions for font handling?"
#else
// functions for parsing X font names:
FL_EXPORT const char* fl_font_word(const char *p, int n);
FL_EXPORT char *fl_find_fontsize(char *name);
#  endif

#endif

//
// End of "$Id$".
//