Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pdf/xpdf/SFont.h
blob: 4758664fa1327d817bcc4a02a3e492eb9282e8f1 (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
//========================================================================
//
// SFont.h
//
// Base class for font rasterizers.
//
//========================================================================

#ifndef SFONT_H
#define SFONT_H

#ifdef __GNUC__
#pragma interface
#endif

#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include "gtypes.h"

//------------------------------------------------------------------------

class SFontEngine {
public:

  SFontEngine(Display *display, Visual *visual, int depth,
	      Colormap colormap);
  virtual ~SFontEngine();

  // Use a TrueColor visual.  Pixel values are computed as:
  //
  //     (r << rShift) + (g << gShift) + (b << bShift)
  //
  // where r, g, and b are scaled to the ranges [0,rMax], [0,gMax],
  // and [0,bMax], respectively.
  virtual void useTrueColor(int rMax, int rShift, int gMax, int gShift,
			    int bMax, int bShift);

  // Use an RGB color cube.  <colors> is an array containing
  // <nRGB>*<nRGB>*<nRGB> pixel values in red,green,blue order, e.g.,
  // for <nRGB>=2, there will be 8 entries:
  //
  //        |--- colors[i] ---|
  //     i  red    green  blue
  //     -  -----  -----  -----
  //     0  0000   0000   0000
  //     1  0000   0000   ffff
  //     2  0000   ffff   0000
  //     3  0000   ffff   ffff
  //     4  ffff   0000   0000
  //     5  ffff   0000   ffff
  //     6  ffff   ffff   0000
  //     7  ffff   ffff   ffff
  //
  // The <colors> array is not copied and must remain valid for the
  // lifetime of this SFont object.
  virtual void useColorCube(Gulong *colors, int nRGB);

protected:

  // Find the closest match to (<r>,<g>,<b>).
  Gulong findColor(int r, int g, int b);

  //----- X parameters
  Display *display;
  Visual *visual;
  int depth;
  Colormap colormap;

  GBool trueColor;		// true for TrueColor, false for RGB cube

  //----- TrueColor parameters
  int rMax, gMax, bMax;
  int rShift, gShift, bShift;

  //----- RGB color cube parameters
  Gulong *colors;
  int nRGB;
};

//------------------------------------------------------------------------

class SFontFile {
public:

  // A typical subclass will provide a constructor along the lines of:
  //
  //     SomeFontFile(SomeFontEngine *engine, char *fontFileName);
  SFontFile();

  virtual ~SFontFile();

private:
};

//------------------------------------------------------------------------

class SFont {
public:

  // A typical subclass will provide a constructor along the lines of:
  //
  //     SomeFont(SomeFontFile *fontFile, double *m);
  //
  // where <m> is a transform matrix consisting of four elements,
  // using the PostScript ordering conventions (without any
  // translation):
  //
  //   [x' y'] = [x y] * [m0 m1]
  //                     [m2 m3]
  //
  // This is the level at which fonts are cached, and so the font
  // cannot be transformed after it is created.
  SFont();

  virtual ~SFont();

  // Draw a character <c> at <x>,<y> in color (<r>,<g>,<b>).  The RGB
  // values should each be in the range [0,65535].  Draws into <d>,
  // clipped to the rectangle (0,0)-(<w>-1,<h>-1).  Returns true if
  // the character was drawn successfully.
  virtual GBool drawChar(Drawable d, int w, int h, GC gc,
			 int x, int y, int r, int g, int b, Gushort c) = 0;

protected:
};

#endif