]> www.fi.muni.cz Git - evince.git/blob - dvi/dvilib/dl-pkfont.hh
Auto*ify dvi and dvi/dvilib
[evince.git] / dvi / dvilib / dl-pkfont.hh
1 #ifndef DL_PKFONT_HH__
2 #define DL_PKFONT_HH__
3
4 #include "dl-loader.hh"
5 #include "dl-refcounted.hh"
6 #include "dl-font.hh"
7
8 #include <vector>
9 #include <map>
10
11 namespace DviLib {
12     
13     class RleContext;
14     
15     enum CountType {
16         RUN_COUNT,
17         REPEAT_COUNT
18     };
19     
20     class PkChar : public AbstractCharacter
21     {
22         uint dyn_f;
23         bool first_is_black;    // if first run count is black or white
24         int character_code;
25         int tfm_width;          // in what units? FIXME
26         uint dx;                // escapement - what is this? FIXME
27         uint dy;
28         uint width;             // in pixels
29         uint height;            // in pixels
30         int hoffset;
31         int voffset;
32         
33         bool unpacked;
34         union {
35             unsigned char *bitmap;  // 32 bit/pixel ARGB format
36             unsigned char *packed;
37         } data;
38         
39         CountType get_count (RleContext& nr, uint *count);
40         void unpack_rle (RleContext& nr);
41         void unpack_bitmap (void);
42         void unpack (void);
43
44     public:
45         PkChar (AbstractLoader &l);
46         virtual void paint (DviRuntime &runtime);
47         const unsigned char *get_bitmap (void) 
48         { 
49             if (!unpacked)
50                 unpack ();
51             return data.bitmap;
52         }
53         uint get_width (void)
54         {
55             return width;
56         }
57         uint get_height (void)
58         {
59             return height;
60         }
61         virtual int get_tfm_width (void)
62         {
63             return tfm_width;
64         }
65         int get_hoffset (void) 
66         {
67             return hoffset;
68         }
69         int get_voffset (void)
70         {
71             return voffset;
72         }
73         int get_character_code (void) { return character_code; }
74     };
75     
76     class PkFont : public AbstractFont {
77         AbstractLoader& loader;
78         uint id;
79         string comment;
80         uint design_size;
81         uint checksum;
82         uint hppp;              /* horizontal pixels per point */
83         uint vppp;              /* vertical  pixels per point */
84         map <uint, PkChar *> chars;
85         int at_size;
86         void load (void);
87     public:
88         PkFont (AbstractLoader& l);
89         PkFont (AbstractLoader& l, int at_size);
90         virtual PkChar *get_char (int ccode)
91         {
92             return chars[ccode]; 
93         }
94         virtual int get_design_size (void)
95         {
96             return design_size; 
97         }
98         virtual int get_at_size (void)
99         {
100             return at_size;
101         }
102         virtual ~PkFont () {}
103     };
104 }
105
106 #endif /* DL_PKFONT_HH__ */