ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/rxvtimg.h
Revision: 1.38
Committed: Thu Jun 14 19:31:17 2012 UTC (11 years, 11 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.37: +4 -4 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 #ifndef IMG_H),
2 #define IMG_H
3
4 #if HAVE_BG_PIXMAP
5 #define HAVE_IMG 1
6 #endif
7
8 #if HAVE_IMG
9
10 #define float_to_component(d) (int32_t)((d) * 65535.99)
11
12 #include <X11/extensions/Xrender.h>
13
14 class rxvt_img
15 {
16 void destroy ();
17 Picture picture ();
18
19 public:
20 typedef double nv;
21
22 // *could* also hold the Pixmap itself
23 struct pixref
24 {
25 int cnt;
26 int w, h;
27 bool ours; // false if we don't own the pixmap at all
28
29 pixref (int w, int h)
30 : cnt(1), w(w), h(h), ours(true)
31 {
32 }
33 };
34
35 rxvt_screen *s;
36 Pixmap pm;
37 pixref *ref; // shared refcnt
38 int x, y, w, h, repeat;
39 XRenderPictFormat *format;
40
41 rxvt_img (rxvt_screen *screen, XRenderPictFormat *format, int x, int y, int width, int height, int repeat = RepeatNormal);
42 rxvt_img (const rxvt_img &img);
43 void alloc ();
44
45 # if HAVE_PIXBUF
46 static rxvt_img *new_from_pixbuf (rxvt_screen *s, GdkPixbuf *pb); // from pixbuf
47 static rxvt_img *new_from_file (rxvt_screen *s, const char *filename); // via pixbuf
48 # endif
49 static rxvt_img *new_from_root (rxvt_screen *s); // get root pixmap
50
51 ~rxvt_img ();
52
53 Pixmap steal ()
54 {
55 ref->ours = false;
56 return pm;
57 }
58
59 // inplace
60 void move (int dx, int dy)
61 {
62 x += dx;
63 y += dy;
64 }
65
66 void repeat_mode (int repeat)
67 {
68 this->repeat = repeat;
69 }
70
71 void unshare (); // prepare for write
72 void fill (const rgba &c);
73 void add_alpha ();
74 //void linear_gradient (const XLinearGradient *gradient, const XFixed *stops, const XRenderColor *colors, int nstops);
75 //void radial_gradient (const XRadialGradient *gradient, const XFixed *stops, const XRenderColor *colors, int nstops);
76 //void conical_gradient (const XConicalGradient *gradient, const XFixed *stops, const XRenderColor *colors, int nstops);
77 void brightness (int32_t r, int32_t g, int32_t b, int32_t a);
78 void contrast (int32_t r, int32_t g, int32_t b, int32_t a);
79
80 void brightness (nv r, nv g, nv b, nv a = 1.)
81 {
82 brightness (float_to_component (r),
83 float_to_component (g),
84 float_to_component (b),
85 float_to_component (a));
86 }
87
88 void contrast (nv r, nv g, nv b, nv a = 1.)
89 {
90 contrast (float_to_component (r),
91 float_to_component (g),
92 float_to_component (b),
93 float_to_component (a));
94 }
95
96 void draw (rxvt_img *img, int op = PictOpOver, nv mask = 1.);
97
98 // copy
99 rxvt_img *reify (); // make x, y 0, make real width/height
100 rxvt_img *blur (int rh, int rv);
101 rxvt_img *clone ();
102 rxvt_img *sub_rect (int x, int y, int width, int height);
103 rxvt_img *transform (nv matrix[3][3]);
104 rxvt_img *scale (int new_width, int new_height);
105 rxvt_img *rotate (int cx, int cy, nv phi);
106 rxvt_img *convert_format (XRenderPictFormat *format, const rgba &bg);
107 rxvt_img *blend (rxvt_img *img, nv factor = 1.);
108
109 // egregiuous helper category
110 rxvt_img *replace (rxvt_img *&p)
111 {
112 delete p;
113 p = this;
114 return this;
115 }
116 };
117
118 #endif
119
120 #endif
121