diff options
Diffstat (limited to 'src/FbTk/FbPixmap.cc')
-rw-r--r-- | src/FbTk/FbPixmap.cc | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/src/FbTk/FbPixmap.cc b/src/FbTk/FbPixmap.cc index bbc1906..c698ce6 100644 --- a/src/FbTk/FbPixmap.cc +++ b/src/FbTk/FbPixmap.cc | |||
@@ -19,13 +19,14 @@ | |||
19 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 19 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
20 | // DEALINGS IN THE SOFTWARE. | 20 | // DEALINGS IN THE SOFTWARE. |
21 | 21 | ||
22 | // $Id: FbPixmap.cc,v 1.12 2004/07/06 10:47:36 fluxgen Exp $ | 22 | // $Id: FbPixmap.cc,v 1.13 2004/09/09 14:29:10 akir Exp $ |
23 | 23 | ||
24 | #include "FbPixmap.hh" | 24 | #include "FbPixmap.hh" |
25 | #include "App.hh" | 25 | #include "App.hh" |
26 | #include "GContext.hh" | 26 | #include "GContext.hh" |
27 | 27 | ||
28 | #include <X11/Xutil.h> | 28 | #include <X11/Xutil.h> |
29 | #include <X11/Xatom.h> | ||
29 | #include <iostream> | 30 | #include <iostream> |
30 | using namespace std; | 31 | using namespace std; |
31 | 32 | ||
@@ -203,6 +204,7 @@ void FbPixmap::rotate() { | |||
203 | } | 204 | } |
204 | 205 | ||
205 | void FbPixmap::scale(unsigned int dest_width, unsigned int dest_height) { | 206 | void FbPixmap::scale(unsigned int dest_width, unsigned int dest_height) { |
207 | |||
206 | if (drawable() == 0 || | 208 | if (drawable() == 0 || |
207 | (dest_width == width() && dest_height == height())) | 209 | (dest_width == width() && dest_height == height())) |
208 | return; | 210 | return; |
@@ -284,6 +286,43 @@ Pixmap FbPixmap::release() { | |||
284 | return ret; | 286 | return ret; |
285 | } | 287 | } |
286 | 288 | ||
289 | Pixmap FbPixmap::getRootPixmap(int screen_num) { | ||
290 | |||
291 | Pixmap root_pm = 0; | ||
292 | // get root pixmap for transparency | ||
293 | Display *disp = FbTk::App::instance()->display(); | ||
294 | Atom real_type; | ||
295 | int real_format; | ||
296 | unsigned long items_read, items_left; | ||
297 | unsigned int *data; | ||
298 | if (XGetWindowProperty(disp, RootWindow(disp, screen_num), | ||
299 | XInternAtom(disp, "_XROOTPMAP_ID", false), | ||
300 | 0L, 1L, | ||
301 | false, XA_PIXMAP, &real_type, | ||
302 | &real_format, &items_read, &items_left, | ||
303 | (unsigned char **) &data) == Success && | ||
304 | items_read) { | ||
305 | root_pm = (Pixmap) (*data); | ||
306 | XFree(data); | ||
307 | /* TODO: analyze why this doesnt work | ||
308 | } else if (XGetWindowProperty(disp, RootWindow(disp, screen_num), | ||
309 | XInternAtom(disp, "_XSETROOT_ID", false), | ||
310 | 0L, 1L, | ||
311 | false, XA_PIXMAP, &real_type, | ||
312 | &real_format, &items_read, &items_left, | ||
313 | (unsigned char **) &data) == Success && | ||
314 | items_read) { | ||
315 | root_pm = (Pixmap) (*data); | ||
316 | XFree(data); | ||
317 | */ | ||
318 | } | ||
319 | |||
320 | |||
321 | return root_pm; | ||
322 | |||
323 | |||
324 | } | ||
325 | |||
287 | void FbPixmap::free() { | 326 | void FbPixmap::free() { |
288 | if (m_pm != 0) { | 327 | if (m_pm != 0) { |
289 | XFreePixmap(FbTk::App::instance()->display(), m_pm); | 328 | XFreePixmap(FbTk::App::instance()->display(), m_pm); |