diff options
Diffstat (limited to 'src/FbTk')
-rw-r--r-- | src/FbTk/FbPixmap.cc | 41 | ||||
-rw-r--r-- | src/FbTk/FbPixmap.hh | 3 | ||||
-rw-r--r-- | src/FbTk/FbWindow.cc | 32 | ||||
-rw-r--r-- | src/FbTk/Menu.cc | 29 |
4 files changed, 50 insertions, 55 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); |
diff --git a/src/FbTk/FbPixmap.hh b/src/FbTk/FbPixmap.hh index 77dc555..ee5d6ac 100644 --- a/src/FbTk/FbPixmap.hh +++ b/src/FbTk/FbPixmap.hh | |||
@@ -19,7 +19,7 @@ | |||
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.hh,v 1.12 2004/07/05 23:51:57 fluxgen Exp $ | 22 | // $Id: FbPixmap.hh,v 1.13 2004/09/09 14:29:10 akir Exp $ |
23 | 23 | ||
24 | #ifndef FBTK_FBPIXMAP_HH | 24 | #ifndef FBTK_FBPIXMAP_HH |
25 | #define FBTK_FBPIXMAP_HH | 25 | #define FBTK_FBPIXMAP_HH |
@@ -68,6 +68,7 @@ public: | |||
68 | inline unsigned int height() const { return m_height; } | 68 | inline unsigned int height() const { return m_height; } |
69 | inline int depth() const { return m_depth; } | 69 | inline int depth() const { return m_depth; } |
70 | 70 | ||
71 | static Pixmap getRootPixmap(int screen_num); | ||
71 | 72 | ||
72 | private: | 73 | private: |
73 | void free(); | 74 | void free(); |
diff --git a/src/FbTk/FbWindow.cc b/src/FbTk/FbWindow.cc index 2209835..5417c09 100644 --- a/src/FbTk/FbWindow.cc +++ b/src/FbTk/FbWindow.cc | |||
@@ -19,9 +19,10 @@ | |||
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: FbWindow.cc,v 1.37 2004/08/31 15:26:39 rathnor Exp $ | 22 | // $Id: FbWindow.cc,v 1.38 2004/09/09 14:29:10 akir Exp $ |
23 | 23 | ||
24 | #include "FbWindow.hh" | 24 | #include "FbWindow.hh" |
25 | #include "FbPixmap.hh" | ||
25 | 26 | ||
26 | #include "EventManager.hh" | 27 | #include "EventManager.hh" |
27 | #include "Color.hh" | 28 | #include "Color.hh" |
@@ -43,31 +44,6 @@ | |||
43 | 44 | ||
44 | namespace FbTk { | 45 | namespace FbTk { |
45 | 46 | ||
46 | namespace { | ||
47 | Pixmap getRootPixmap(int screen_num) { | ||
48 | Pixmap root_pm = 0; | ||
49 | // get root pixmap for transparency | ||
50 | Display *disp = FbTk::App::instance()->display(); | ||
51 | Atom real_type; | ||
52 | int real_format; | ||
53 | unsigned long items_read, items_left; | ||
54 | unsigned int *data; | ||
55 | if (XGetWindowProperty(disp, RootWindow(disp, screen_num), | ||
56 | XInternAtom(disp, "_XROOTPMAP_ID", false), | ||
57 | 0L, 1L, | ||
58 | false, XA_PIXMAP, &real_type, | ||
59 | &real_format, &items_read, &items_left, | ||
60 | (unsigned char **) &data) == Success && | ||
61 | items_read) { | ||
62 | root_pm = (Pixmap) (*data); | ||
63 | XFree(data); | ||
64 | } | ||
65 | |||
66 | return root_pm; | ||
67 | } | ||
68 | |||
69 | }; // end anonymous namespace | ||
70 | |||
71 | Display *FbWindow::s_display = 0; | 47 | Display *FbWindow::s_display = 0; |
72 | 48 | ||
73 | FbWindow::FbWindow():m_parent(0), m_screen_num(0), m_window(0), m_x(0), m_y(0), | 49 | FbWindow::FbWindow():m_parent(0), m_screen_num(0), m_window(0), m_x(0), m_y(0), |
@@ -207,7 +183,7 @@ void FbWindow::updateTransparent(int the_x, int the_y, unsigned int the_width, u | |||
207 | return; | 183 | return; |
208 | 184 | ||
209 | // update source and destination if needed | 185 | // update source and destination if needed |
210 | Pixmap root = getRootPixmap(screenNumber()); | 186 | Pixmap root = FbPixmap::getRootPixmap(screenNumber()); |
211 | if (m_transparent->source() != root) | 187 | if (m_transparent->source() != root) |
212 | m_transparent->setSource(root, screenNumber()); | 188 | m_transparent->setSource(root, screenNumber()); |
213 | 189 | ||
@@ -245,7 +221,7 @@ void FbWindow::updateTransparent(int the_x, int the_y, unsigned int the_width, u | |||
245 | void FbWindow::setAlpha(unsigned char alpha) { | 221 | void FbWindow::setAlpha(unsigned char alpha) { |
246 | #ifdef HAVE_XRENDER | 222 | #ifdef HAVE_XRENDER |
247 | if (m_transparent.get() == 0 && alpha < 255) { | 223 | if (m_transparent.get() == 0 && alpha < 255) { |
248 | m_transparent.reset(new Transparent(getRootPixmap(screenNumber()), window(), alpha, screenNumber())); | 224 | m_transparent.reset(new Transparent(FbPixmap::getRootPixmap(screenNumber()), window(), alpha, screenNumber())); |
249 | } else if (alpha < 255 && alpha != m_transparent->alpha()) | 225 | } else if (alpha < 255 && alpha != m_transparent->alpha()) |
250 | m_transparent->setAlpha(alpha); | 226 | m_transparent->setAlpha(alpha); |
251 | else if (alpha == 255) | 227 | else if (alpha == 255) |
diff --git a/src/FbTk/Menu.cc b/src/FbTk/Menu.cc index b38ae73..a1fdf8c 100644 --- a/src/FbTk/Menu.cc +++ b/src/FbTk/Menu.cc | |||
@@ -22,7 +22,7 @@ | |||
22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
23 | // DEALINGS IN THE SOFTWARE. | 23 | // DEALINGS IN THE SOFTWARE. |
24 | 24 | ||
25 | // $Id: Menu.cc,v 1.79 2004/08/31 15:26:39 rathnor Exp $ | 25 | // $Id: Menu.cc,v 1.80 2004/09/09 14:29:10 akir Exp $ |
26 | 26 | ||
27 | //use GNU extensions | 27 | //use GNU extensions |
28 | #ifndef _GNU_SOURCE | 28 | #ifndef _GNU_SOURCE |
@@ -44,6 +44,7 @@ | |||
44 | #include "Transparent.hh" | 44 | #include "Transparent.hh" |
45 | #include "SimpleCommand.hh" | 45 | #include "SimpleCommand.hh" |
46 | #include "I18n.hh" | 46 | #include "I18n.hh" |
47 | #include "FbPixmap.hh" | ||
47 | 48 | ||
48 | #include <X11/Xatom.h> | 49 | #include <X11/Xatom.h> |
49 | #include <X11/keysym.h> | 50 | #include <X11/keysym.h> |
@@ -74,28 +75,6 @@ static Menu *shown = 0; | |||
74 | 75 | ||
75 | Menu *Menu::s_focused = 0; | 76 | Menu *Menu::s_focused = 0; |
76 | 77 | ||
77 | static Pixmap getRootPixmap(int screen_num) { | ||
78 | Pixmap root_pm = 0; | ||
79 | // get root pixmap for transparency | ||
80 | Display *disp = FbTk::App::instance()->display(); | ||
81 | Atom real_type; | ||
82 | int real_format; | ||
83 | unsigned long items_read, items_left; | ||
84 | unsigned int *data; | ||
85 | if (XGetWindowProperty(disp, RootWindow(disp, screen_num), | ||
86 | XInternAtom(disp, "_XROOTPMAP_ID", false), | ||
87 | 0L, 1L, | ||
88 | false, XA_PIXMAP, &real_type, | ||
89 | &real_format, &items_read, &items_left, | ||
90 | (unsigned char **) &data) == Success && | ||
91 | items_read) { | ||
92 | root_pm = (Pixmap) (*data); | ||
93 | XFree(data); | ||
94 | } | ||
95 | |||
96 | return root_pm; | ||
97 | } | ||
98 | |||
99 | Menu::Menu(MenuTheme &tm, ImageControl &imgctrl): | 78 | Menu::Menu(MenuTheme &tm, ImageControl &imgctrl): |
100 | m_theme(tm), | 79 | m_theme(tm), |
101 | m_parent(0), | 80 | m_parent(0), |
@@ -1406,7 +1385,7 @@ void Menu::reconfigure() { | |||
1406 | } else if (alpha () < 255) { | 1385 | } else if (alpha () < 255) { |
1407 | 1386 | ||
1408 | if (m_transp.get() == 0) { | 1387 | if (m_transp.get() == 0) { |
1409 | m_transp.reset(new Transparent(getRootPixmap(screenNumber()), | 1388 | m_transp.reset(new Transparent(FbPixmap::getRootPixmap(screenNumber()), |
1410 | m_real_frame_pm.drawable(), alpha(), | 1389 | m_real_frame_pm.drawable(), alpha(), |
1411 | screenNumber())); | 1390 | screenNumber())); |
1412 | } else | 1391 | } else |
@@ -1497,7 +1476,7 @@ void Menu::renderTransp(int x, int y, | |||
1497 | // render the root background | 1476 | // render the root background |
1498 | #ifdef HAVE_XRENDER | 1477 | #ifdef HAVE_XRENDER |
1499 | 1478 | ||
1500 | Pixmap root = getRootPixmap(screenNumber()); | 1479 | Pixmap root = FbPixmap::getRootPixmap(screenNumber()); |
1501 | if (m_transp->source() != root) | 1480 | if (m_transp->source() != root) |
1502 | m_transp->setSource(root, screenNumber()); | 1481 | m_transp->setSource(root, screenNumber()); |
1503 | 1482 | ||