diff options
Diffstat (limited to 'src/Shape.cc')
-rw-r--r-- | src/Shape.cc | 36 |
1 files changed, 19 insertions, 17 deletions
diff --git a/src/Shape.cc b/src/Shape.cc index b1accc4..66691b4 100644 --- a/src/Shape.cc +++ b/src/Shape.cc | |||
@@ -1,6 +1,6 @@ | |||
1 | // Shape.cc | 1 | // Shape.cc |
2 | // Copyright (c) 2003 - 2006 Henrik Kinnunen (fluxgen at fluxbox dot org) | 2 | // Copyright (c) 2003 - 2006 Henrik Kinnunen (fluxgen at fluxbox dot org) |
3 | // | 3 | // |
4 | // Permission is hereby granted, free of charge, to any person obtaining a | 4 | // Permission is hereby granted, free of charge, to any person obtaining a |
5 | // copy of this software and associated documentation files (the "Software"), | 5 | // copy of this software and associated documentation files (the "Software"), |
6 | // to deal in the Software without restriction, including without limitation | 6 | // to deal in the Software without restriction, including without limitation |
@@ -28,6 +28,10 @@ | |||
28 | #include "FbTk/GContext.hh" | 28 | #include "FbTk/GContext.hh" |
29 | #include "FbTk/FbPixmap.hh" | 29 | #include "FbTk/FbPixmap.hh" |
30 | 30 | ||
31 | #ifdef HAVE_CONFIG_H | ||
32 | #include "config.h" | ||
33 | #endif // HAVE_CONFIG_H | ||
34 | |||
31 | #ifdef HAVE_CSTRING | 35 | #ifdef HAVE_CSTRING |
32 | #include <cstring> | 36 | #include <cstring> |
33 | #else | 37 | #else |
@@ -35,9 +39,6 @@ | |||
35 | #endif | 39 | #endif |
36 | 40 | ||
37 | #include <X11/Xutil.h> | 41 | #include <X11/Xutil.h> |
38 | #ifdef HAVE_CONFIG_H | ||
39 | #include "config.h" | ||
40 | #endif // HAVE_CONFIG_H | ||
41 | 42 | ||
42 | #ifdef SHAPE | 43 | #ifdef SHAPE |
43 | #include <X11/extensions/shape.h> | 44 | #include <X11/extensions/shape.h> |
@@ -45,15 +46,16 @@ | |||
45 | 46 | ||
46 | #include <iostream> | 47 | #include <iostream> |
47 | #include <algorithm> | 48 | #include <algorithm> |
48 | using namespace std; | 49 | |
50 | using std::min; | ||
49 | 51 | ||
50 | namespace { | 52 | namespace { |
51 | 53 | ||
52 | FbTk::FbPixmap *createShape(const FbTk::FbWindow &win, int place) { | 54 | FbTk::FbPixmap *createShape(const FbTk::FbWindow &win, int place) { |
53 | if (win.window() == 0 || place == 0 || | 55 | if (win.window() == 0 || place == 0 || |
54 | win.width() < 3 || win.height() < 3) | 56 | win.width() < 3 || win.height() < 3) |
55 | return 0; | 57 | return 0; |
56 | 58 | ||
57 | static char left_bits[] = { 0xc0, 0xf8, 0xfc, 0xfe, 0xfe, 0xfe, 0xff, 0xff }; | 59 | static char left_bits[] = { 0xc0, 0xf8, 0xfc, 0xfe, 0xfe, 0xfe, 0xff, 0xff }; |
58 | static char right_bits[] = { 0x03, 0x1f, 0x3f, 0x7f, 0x7f, 0x7f, 0xff, 0xff}; | 60 | static char right_bits[] = { 0x03, 0x1f, 0x3f, 0x7f, 0x7f, 0x7f, 0xff, 0xff}; |
59 | static char bottom_left_bits[] = { 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfc, 0xf8, 0xc0 }; | 61 | static char bottom_left_bits[] = { 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfc, 0xf8, 0xc0 }; |
@@ -74,7 +76,7 @@ FbTk::FbPixmap *createShape(const FbTk::FbWindow &win, int place) { | |||
74 | return 0; | 76 | return 0; |
75 | 77 | ||
76 | memset(data, 0xFF, data_size); | 78 | memset(data, 0xFF, data_size); |
77 | 79 | ||
78 | XImage *ximage = XCreateImage(disp, | 80 | XImage *ximage = XCreateImage(disp, |
79 | DefaultVisual(disp, win.screenNumber()), | 81 | DefaultVisual(disp, win.screenNumber()), |
80 | 1, | 82 | 1, |
@@ -96,20 +98,20 @@ FbTk::FbPixmap *createShape(const FbTk::FbWindow &win, int place) { | |||
96 | } | 98 | } |
97 | } | 99 | } |
98 | } | 100 | } |
99 | 101 | ||
100 | if (place & Shape::TOPRIGHT) { | 102 | if (place & Shape::TOPRIGHT) { |
101 | for (int y=0; y<pixmap_height; y++) { | 103 | for (int y=0; y<pixmap_height; y++) { |
102 | for (int x=0; x<pixmap_width; x++) { | 104 | for (int x=0; x<pixmap_width; x++) { |
103 | XPutPixel(ximage, x + win_width - pixmap_width, y, | 105 | XPutPixel(ximage, x + win_width - pixmap_width, y, |
104 | (right_bits[y] & (0x01 << x)) ? 1 : 0); | 106 | (right_bits[y] & (0x01 << x)) ? 1 : 0); |
105 | } | 107 | } |
106 | } | 108 | } |
107 | } | 109 | } |
108 | 110 | ||
109 | if (place & Shape::BOTTOMLEFT) { | 111 | if (place & Shape::BOTTOMLEFT) { |
110 | for (int y=0; y<pixmap_height; y++) { | 112 | for (int y=0; y<pixmap_height; y++) { |
111 | for (int x=0; x<pixmap_width; x++) { | 113 | for (int x=0; x<pixmap_width; x++) { |
112 | XPutPixel(ximage, x, y + win_height - pixmap_height, | 114 | XPutPixel(ximage, x, y + win_height - pixmap_height, |
113 | (bottom_left_bits[y] & (0x01 << x)) ? 1 : 0); | 115 | (bottom_left_bits[y] & (0x01 << x)) ? 1 : 0); |
114 | } | 116 | } |
115 | } | 117 | } |
@@ -128,7 +130,7 @@ FbTk::FbPixmap *createShape(const FbTk::FbWindow &win, int place) { | |||
128 | 130 | ||
129 | 131 | ||
130 | FbTk::GContext gc(*pm); | 132 | FbTk::GContext gc(*pm); |
131 | 133 | ||
132 | XPutImage(disp, pm->drawable(), gc.gc(), ximage, 0, 0, 0, 0, | 134 | XPutImage(disp, pm->drawable(), gc.gc(), ximage, 0, 0, 0, 0, |
133 | win_width, win_height); | 135 | win_width, win_height); |
134 | 136 | ||
@@ -177,7 +179,7 @@ void Shape::update() { | |||
177 | } | 179 | } |
178 | 180 | ||
179 | // the m_shape can be = 0 which will just reset the shape mask | 181 | // the m_shape can be = 0 which will just reset the shape mask |
180 | // and make the window normal | 182 | // and make the window normal |
181 | XShapeCombineMask(FbTk::App::instance()->display(), | 183 | XShapeCombineMask(FbTk::App::instance()->display(), |
182 | m_win->window(), | 184 | m_win->window(), |
183 | ShapeBounding, | 185 | ShapeBounding, |
@@ -197,7 +199,7 @@ void Shape::setWindow(FbTk::FbWindow &win) { | |||
197 | 199 | ||
198 | void Shape::setShapeNotify(const FbTk::FbWindow &win) { | 200 | void Shape::setShapeNotify(const FbTk::FbWindow &win) { |
199 | #ifdef SHAPE | 201 | #ifdef SHAPE |
200 | XShapeSelectInput(FbTk::App::instance()->display(), | 202 | XShapeSelectInput(FbTk::App::instance()->display(), |
201 | win.window(), ShapeNotifyMask); | 203 | win.window(), ShapeNotifyMask); |
202 | #endif // SHAPE | 204 | #endif // SHAPE |
203 | } | 205 | } |
@@ -209,7 +211,7 @@ bool Shape::isShaped(const FbTk::FbWindow &win) { | |||
209 | int not_used; | 211 | int not_used; |
210 | unsigned int not_used2; | 212 | unsigned int not_used2; |
211 | XShapeQueryExtents(FbTk::App::instance()->display(), | 213 | XShapeQueryExtents(FbTk::App::instance()->display(), |
212 | win.window(), | 214 | win.window(), |
213 | &shaped, /// bShaped | 215 | &shaped, /// bShaped |
214 | ¬_used, ¬_used, // xbs, ybs | 216 | ¬_used, ¬_used, // xbs, ybs |
215 | ¬_used2, ¬_used2, // wbs, hbs | 217 | ¬_used2, ¬_used2, // wbs, hbs |