Simplify rxvt_temp_buf usage.
[dana/urxvt.git] / src / background.h
1 /*
2  * background.h
3  */
4
5 #ifndef BACKGROUND_H_
6 #define BACKGROUND_H_
7
8 #ifdef HAVE_AFTERIMAGE
9 # include <afterimage.h>
10 # undef min
11 # undef max
12 #endif
13
14 #if defined(BG_IMAGE_FROM_FILE) || defined(ENABLE_TRANSPARENCY)
15 # define HAVE_BG_PIXMAP 1 /* to simplify further usage */
16 struct bgPixmap_t
17 {
18   bgPixmap_t ();
19   void destroy ();
20
21   enum {
22     geometrySet     = 1 <<  0,
23     propScale       = 1 <<  1,
24     geometryFlags   = geometrySet | propScale,
25
26     tintSet         = 1 <<  8,
27     tintNeeded      = 1 <<  9,
28     tintWholesome   = 1 << 10,
29     tintServerSide  = 1 << 11,
30     tintFlags       = tintSet | tintServerSide | tintNeeded | tintWholesome,
31
32     blurNeeded      = 1 << 12,
33     blurServerSide  = 1 << 13, /* this doesn't work yet */
34
35     isTransparent   = 1 << 16,
36     isInvalid       = 1 << 17,
37     isVtOrigin      = 1 << 18,  /* if set pixmap has origin at corner of
38                                    vt window instead of parent[0]! */
39     hasChanged      = 1 << 19,
40   };
41
42   unsigned int flags;
43
44   enum {
45     transpPmapTiled       = 1 << 0,
46     transpPmapTinted      = tintNeeded,
47     transpPmapBlured      = blurNeeded,
48     transpTransformations = tintNeeded | blurNeeded,
49   }; /* these flags are returned by make_transparency_pixmap if called */
50
51   bool check_clearChanged ()
52   {
53     bool r = flags & hasChanged;
54     flags &= ~hasChanged;
55     return r;
56   };
57
58 # ifdef  BG_IMAGE_FROM_FILE
59 #  ifdef HAVE_AFTERIMAGE
60   ASImage *original_asim;
61   bool render_asim (ASImage *background, ARGB32 background_tint);
62 #  endif
63
64   enum {
65     noScale = 0,
66     windowScale = 100,
67     defaultScale = windowScale,
68     centerAlign = 50,
69     defaultAlign = centerAlign,
70     rootAlign = -10000
71   };
72
73   unsigned int h_scale, v_scale;/* percents of the window size */
74   int h_align, v_align;         /* percents of the window size:
75                                   0 - left align, 50 - center, 100 - right */
76   void unset_geometry ()
77   {
78     flags = flags & ~geometryFlags;
79   };
80   bool set_geometry (const char *geom);
81   void set_defaultGeometry ()
82   {
83     h_scale = v_scale = defaultScale;
84     h_align = v_align = defaultAlign;
85     flags |= geometrySet;
86   };
87
88   bool set_file (const char *file);
89 # endif /* BG_IMAGE_FROM_FILE */
90
91   rxvt_term *target;
92   bool set_target (rxvt_term *new_target);
93
94 # ifdef ENABLE_TRANSPARENCY
95   int         root_depth; /* obtained when target is set */
96   Pixmap      root_pixmap; /* current root pixmap set */
97   rxvt_color  tint;
98   int         shade;
99   int         h_blurRadius, v_blurRadius;
100
101   bool set_transparent ();
102   bool set_blur_radius (const char *geom);
103   bool set_tint (rxvt_color &new_tint);
104   bool unset_tint ();
105   bool set_shade (const char *shade_str);
106   bool set_root_pixmap ();
107
108   unsigned long make_transparency_pixmap ();/* returns combination of the transpTransformations flags */
109 # endif
110   double invalid_since, valid_since;
111
112   Pixmap pixmap;
113   unsigned int pmap_width, pmap_height;
114   unsigned int pmap_depth;
115
116   bool window_size_sensitive ();
117   bool window_position_sensitive ();
118
119   bool is_parentOrigin ()
120   {
121     return !(flags & isVtOrigin);
122   };
123
124   bool need_client_side_rendering ();
125   void apply ();
126   bool render ();
127   void invalidate ()
128   {
129     if (!(flags & isInvalid))
130       {
131         flags |= isInvalid;
132         invalid_since = ev::now ();
133       }
134   };
135 };
136 #else
137 # undef HAVE_BG_PIXMAP
138 #endif
139
140
141
142 #endif /* _BACKGROUND_H_ */