PieDock  1.6.3
Text.h
1 /*
2  * O ,-
3  * o . - ' ,-
4  * . ` . ,
5  * ( )) . (
6  * `-;_ . - `.`.
7  * `._'
8  *
9  * Copyright (c) 2007-2012 Markus Fisch <mf@markusfisch.de>
10  *
11  * Licensed under the MIT license:
12  * http://www.opensource.org/licenses/mit-license.php
13  */
14 #ifndef _PieDock_Text_
15 #define _PieDock_Text_
16 
17 #include <X11/Xlib.h>
18 
19 #ifdef HAVE_XFT
20 #include <X11/Xft/Xft.h>
21 #endif
22 
23 #include <string>
24 
25 namespace PieDock
26 {
32  class Text
33  {
34  public:
38  class Color
39  {
40  public:
41  Color() :
42  alpha( 0 ),
43  red( 0 ),
44  green( 0 ),
45  blue( 0 ) {}
46  Color( int r, int g, int b, int a = 0xff ) :
47  alpha( a ),
48  red( r ),
49  green( g ),
50  blue( b ) {}
51  Color( const char * );
52  virtual ~Color() {}
53  inline const int &getAlpha() const { return alpha; }
54  inline const int &getRed() const { return red; }
55  inline const int &getGreen() const { return green; }
56  inline const int &getBlue() const { return blue; }
57  inline const unsigned int getColor() const { return
58  alpha<<24 |
59  red<<16 |
60  green<<8 |
61  blue; }
62 
63  private:
64  int alpha;
65  int red;
66  int green;
67  int blue;
68  };
69 
73  class Font
74  {
75  public:
76  Font() { reset(); }
77  Font( const std::string f, const double s, const Color c ) :
78  family( f ),
79  size( s ),
80  color( c ) {}
81  virtual ~Font() {}
82  inline const std::string &getFamily() const {
83  return family; }
84  inline void setFamily( const std::string &s ) {
85  family = s; }
86  inline const double &getSize() const { return size; }
87  inline void setSize( const double s ) { size = s; }
88  inline const Color &getColor() const { return color; }
89  inline void setColor( const Color c ) { color = c; }
90  inline void reset()
91  {
92 #ifdef HAVE_XFT
93  family = "Sans";
94 #else
95  family = "6x10";
96 #endif
97  size = 9.0;
98  color = Color( 0xff, 0xff, 0xff, 0xff );
99  }
100 
101  private:
102  std::string family;
103  double size;
104  Color color;
105  };
106 
110  class Metrics
111  {
112  public:
113  Metrics() : x( 0 ), y( 0 ), width( 0 ), height( 0 ) {}
114  Metrics( int xx, int yy, int w, int h ) :
115  x( xx ),
116  y( yy ),
117  width( w ),
118  height( h ) {}
119  virtual ~Metrics() {}
120  inline const int &getX() const { return x; }
121  inline void setX( int xx ) { x = xx; }
122  inline const int &getY() const { return y; }
123  inline void setY( int yy ) { y = yy; }
124  inline const int &getWidth() const { return width; }
125  inline void setWidth( int w ) { width = w; }
126  inline const int &getHeight() const { return height; }
127  inline void setHeight( int h ) { height = h; }
128 
129  private:
130  int x;
131  int y;
132  int width;
133  int height;
134  };
135 
136  Text( Display *, Drawable, Visual *, Font );
137  virtual ~Text() {}
138  virtual void setColor( const Color );
139  virtual void draw( const int, const int, const std::string ) const;
140  virtual Metrics getMetrics( const std::string ) const;
141 
142  private:
143  Display *display;
144 #ifdef HAVE_XFT
145  XftFont *xftFont;
146  XftDraw *xftDraw;
147  XftColor xftColor;
148 #else
149  Drawable drawable;
150  XFontStruct *fontInfo;
151  XColor xColor;
152  GC gc;
153 #endif
154 
155 #ifdef HAVE_XFT
156  void translateColor( const Color &, XftColor * );
157 #else
158  void translateColor( const Color &, XColor * );
159 #endif
160  };
161 }
162 
163 #endif