diff options
Diffstat (limited to 'src/FbTk/Transparent.cc')
-rw-r--r-- | src/FbTk/Transparent.cc | 42 |
1 files changed, 15 insertions, 27 deletions
diff --git a/src/FbTk/Transparent.cc b/src/FbTk/Transparent.cc index 6563d5a..d80b2b2 100644 --- a/src/FbTk/Transparent.cc +++ b/src/FbTk/Transparent.cc | |||
@@ -112,6 +112,7 @@ namespace FbTk { | |||
112 | bool Transparent::s_init = false; | 112 | bool Transparent::s_init = false; |
113 | bool Transparent::s_render = false; | 113 | bool Transparent::s_render = false; |
114 | bool Transparent::s_composite = false; | 114 | bool Transparent::s_composite = false; |
115 | bool Transparent::s_use_composite = false; | ||
115 | 116 | ||
116 | void Transparent::init() { | 117 | void Transparent::init() { |
117 | Display *disp = FbTk::App::instance()->display(); | 118 | Display *disp = FbTk::App::instance()->display(); |
@@ -119,48 +120,35 @@ void Transparent::init() { | |||
119 | int major_opcode, first_event, first_error; | 120 | int major_opcode, first_event, first_error; |
120 | if (XQueryExtension(disp, "RENDER", | 121 | if (XQueryExtension(disp, "RENDER", |
121 | &major_opcode, | 122 | &major_opcode, |
122 | &first_event, &first_error) == False) { | 123 | &first_event, &first_error)) { |
123 | s_render = false; | 124 | // we have XRENDER support |
124 | s_composite = false; | ||
125 | } else { // we have RENDER support | ||
126 | s_render = true; | 125 | s_render = true; |
127 | 126 | ||
128 | if (XQueryExtension(disp, "Composite", | 127 | if (XQueryExtension(disp, "Composite", |
129 | &major_opcode, | 128 | &major_opcode, |
130 | &first_event, &first_error) == False) { | 129 | &first_event, &first_error)) { |
131 | s_composite = false; | 130 | // we have Composite support |
132 | } else { // we have Composite support | ||
133 | s_composite = true; | 131 | s_composite = true; |
132 | s_use_composite = true; | ||
134 | } | 133 | } |
135 | } | 134 | } |
136 | s_init = true; | 135 | s_init = true; |
137 | } | 136 | } |
138 | 137 | ||
139 | void Transparent::usePseudoTransparent(bool no_composite) { | 138 | void Transparent::usePseudoTransparent(bool force) { |
140 | if (s_composite != no_composite) | 139 | if (!s_init) |
141 | return; | 140 | init(); |
142 | 141 | s_use_composite = (!force && s_composite); | |
143 | s_init = false; | ||
144 | init(); // only use render if we have it | ||
145 | |||
146 | if (no_composite) | ||
147 | s_composite = false; | ||
148 | } | 142 | } |
149 | 143 | ||
150 | bool Transparent::haveComposite(bool for_real) { | 144 | bool Transparent::haveComposite(bool for_real) { |
151 | if (for_real) { | 145 | if (!s_init) |
152 | Display *disp = FbTk::App::instance()->display(); | 146 | init(); |
153 | int major_opcode, first_event, first_error; | ||
154 | |||
155 | return (XQueryExtension(disp, "Composite", | ||
156 | &major_opcode, | ||
157 | &first_event, &first_error) == True); | ||
158 | } else { | ||
159 | if (!s_init) | ||
160 | init(); | ||
161 | 147 | ||
148 | if (for_real) | ||
162 | return s_composite; | 149 | return s_composite; |
163 | } | 150 | else |
151 | return s_use_composite; | ||
164 | } | 152 | } |
165 | 153 | ||
166 | Transparent::Transparent(Drawable src, Drawable dest, unsigned char alpha, int screen_num): | 154 | Transparent::Transparent(Drawable src, Drawable dest, unsigned char alpha, int screen_num): |