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

File Contents

# User Rev Content
1 root 1.1 #ifndef IMG_H
2     #define IMG_H
3    
4 sf-exg 1.29 #if HAVE_BG_PIXMAP
5 root 1.1 #define HAVE_IMG 1
6     #endif
7    
8     #if HAVE_IMG
9    
10 root 1.28 #define float_to_component(d) (int32_t)((d) * 65535.99)
11 sf-exg 1.16
12 root 1.1 #include <X11/extensions/Xrender.h>
13    
14 root 1.17 class rxvt_img
15 root 1.1 {
16 root 1.17 void destroy ();
17 root 1.37 Picture picture ();
18 root 1.17
19     public:
20 root 1.36 typedef double nv;
21    
22 root 1.19 // *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 root 1.1 rxvt_screen *s;
36     Pixmap pm;
37 root 1.19 pixref *ref; // shared refcnt
38 root 1.15 int x, y, w, h, repeat;
39 root 1.1 XRenderPictFormat *format;
40    
41 root 1.21 rxvt_img (rxvt_screen *screen, XRenderPictFormat *format, int x, int y, int width, int height, int repeat = RepeatNormal);
42 root 1.17 rxvt_img (const rxvt_img &img);
43 root 1.30 void alloc ();
44 root 1.17
45 sf-exg 1.29 # if HAVE_PIXBUF
46 root 1.23 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 sf-exg 1.29 # endif
49 root 1.5 static rxvt_img *new_from_root (rxvt_screen *s); // get root pixmap
50 root 1.4
51 root 1.1 ~rxvt_img ();
52    
53     Pixmap steal ()
54     {
55 root 1.19 ref->ours = false;
56     return pm;
57 root 1.1 }
58    
59     // inplace
60 root 1.15 void move (int dx, int dy)
61     {
62 root 1.20 x -= dx;
63     y -= dy;
64 root 1.15 }
65    
66     void repeat_mode (int repeat)
67     {
68     this->repeat = repeat;
69     }
70    
71 root 1.17 void unshare (); // prepare for write
72 root 1.33 void fill (const rgba &c);
73 root 1.34 void add_alpha ();
74 root 1.26 //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 root 1.28 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 sf-exg 1.16
80 root 1.36 void brightness (nv r, nv g, nv b, nv a = 1.)
81 sf-exg 1.16 {
82     brightness (float_to_component (r),
83     float_to_component (g),
84     float_to_component (b),
85     float_to_component (a));
86     }
87    
88 root 1.36 void contrast (nv r, nv g, nv b, nv a = 1.)
89 sf-exg 1.16 {
90     contrast (float_to_component (r),
91     float_to_component (g),
92     float_to_component (b),
93     float_to_component (a));
94     }
95    
96 root 1.37 void draw (rxvt_img *img, int op = PictOpSrc, nv mask = 1.);
97    
98 root 1.1 // copy
99 root 1.18 rxvt_img *reify (); // make x, y 0, make real width/height
100 sf-exg 1.12 rxvt_img *blur (int rh, int rv);
101 root 1.8 rxvt_img *clone ();
102 root 1.15 rxvt_img *sub_rect (int x, int y, int width, int height);
103 root 1.36 rxvt_img *transform (nv matrix[3][3]);
104 root 1.1 rxvt_img *scale (int new_width, int new_height);
105 root 1.36 rxvt_img *rotate (int cx, int cy, nv phi);
106 root 1.33 rxvt_img *convert_format (XRenderPictFormat *format, const rgba &bg);
107 root 1.36 rxvt_img *blend (rxvt_img *img, nv factor = 1.);
108 root 1.27
109     // egregiuous helper category
110     rxvt_img *replace (rxvt_img *&p)
111     {
112     delete p;
113     p = this;
114     return this;
115     }
116 root 1.1 };
117    
118     #endif
119    
120     #endif
121