ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/rxvtfont.h
Revision: 1.12
Committed: Wed Aug 25 05:03:33 2004 UTC (19 years, 9 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: rel-3_8
Changes since 1.1: +22 -29 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 #ifndef DEFAULTFONT_H_
2     #define DEFAULTFONT_H_
3    
4     #include <X11/Xlib.h>
5     #if XFT
6     # include <X11/Xft/Xft.h>
7     #endif
8    
9     #ifdef HAVE_XSETLOCALE
10     # define X_LOCALE
11     # include <X11/Xlocale.h>
12     #else
13     # ifdef HAVE_SETLOCALE
14     # include <clocale>
15     # endif
16     #endif /* HAVE_XLOCALE */
17    
18     #ifdef HAVE_NL_LANGINFO
19     # include <langinfo.h>
20     #endif
21    
22     #include <inttypes.h>
23    
24     #include "feature.h"
25     #include "encoding.h"
26     #include "rxvtutil.h"
27 root 1.12 #include "rxvttoolkit.h"
28    
29     struct rxvt_term;
30 root 1.1
31     struct rxvt_fontprop {
32     enum {
33 root 1.12 unset = -1,
34 root 1.1 medium = 100, bold = 200,
35     roman = 0, italic = 100,
36     };
37     int width, height;
38     int weight, slant;
39     };
40    
41     struct rxvt_drawable {
42     rxvt_display *display;
43     Drawable drawable;
44     #if XFT
45     XftDraw *xftdrawable;
46     operator XftDraw *();
47     #endif
48    
49     rxvt_drawable (rxvt_display *display, Drawable drawable)
50     : display(display),
51     #if XFT
52     xftdrawable(0),
53     #endif
54     drawable(drawable)
55     { }
56    
57     #if XFT
58     ~rxvt_drawable ();
59     #endif
60    
61     operator Drawable() { return drawable; }
62     };
63    
64     struct rxvt_font {
65     // managed by the fontset
66 root 1.12 rxvt_term *r;
67     void set_term (rxvt_term *r) { this->r = r; }
68 root 1.1
69     char *name;
70     codeset cs;
71     bool loaded; // wether we tried loading it before (not wether it's loaded)
72    
73     // managed by the font object
74     int ascent, descent,
75     width, height;
76    
77 root 1.12 void set_name (char *name);
78 root 1.1
79     rxvt_font () { name = 0; }
80 root 1.12 virtual ~rxvt_font () { free (name); };
81    
82     virtual void clear () { };
83 root 1.1
84     void clear_rect (rxvt_drawable &d, int x, int y, int w, int h, int color);
85    
86     virtual rxvt_fontprop properties () = 0;
87    
88 root 1.12 virtual bool load (const rxvt_fontprop &morph) = 0;
89     virtual bool has_char (uint32_t unicode, const rxvt_fontprop *prop, bool &careful) = 0;
90 root 1.1
91     virtual void draw (rxvt_drawable &d,
92     int x, int y,
93     const text_t *text, int len,
94     int fg, int bg) = 0;
95     };
96    
97     #define FONT_UNREF(f) do { (f)->clear (); delete (f); } while (0)
98    
99     struct rxvt_fallback_font;
100    
101     struct rxvt_fontset {
102     char *fontdesc;
103 root 1.12 rxvt_fontprop prop;
104 root 1.1
105 root 1.12 rxvt_fontset (rxvt_term *r);
106 root 1.1 ~rxvt_fontset ();
107    
108     rxvt_font *new_font (const char *name, codeset cs);
109    
110 root 1.12 bool populate (const char *desc, const rxvt_fontprop &prop);
111     int find_font (uint32_t unicode);
112 root 1.1 int find_font (const char *name) const;
113 root 1.12 bool realize_font (int i);
114 root 1.1
115 root 1.12 // font-id's MUST fit into a signed 16 bit integer, and within 0..255
116 root 1.1 rxvt_font *operator [] (int id) const
117     {
118 root 1.12 return fonts[id & 0x7f];
119 root 1.1 }
120    
121     private:
122 root 1.12 rxvt_term *r;
123 root 1.1 simplevec<rxvt_font *> fonts;
124     const rxvt_fallback_font *fallback;
125    
126 root 1.12 typedef unsigned char pagemap[256];
127     vector<pagemap *> fmap;
128 root 1.1
129     void add_fonts (const char *desc);
130     void clear ();
131     };
132    
133     #endif /* _DEFAULTFONT_H_ */
134