buffered background
This commit is contained in:
parent
1111861bd2
commit
c8bcddf58b
2 changed files with 24 additions and 8 deletions
|
@ -19,7 +19,7 @@
|
||||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
// DEALINGS IN THE SOFTWARE.
|
// DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
// $Id: FbWindow.cc,v 1.25 2003/08/26 23:45:36 fluxgen Exp $
|
// $Id: FbWindow.cc,v 1.26 2003/09/14 09:51:40 fluxgen Exp $
|
||||||
|
|
||||||
#include "FbWindow.hh"
|
#include "FbWindow.hh"
|
||||||
|
|
||||||
|
@ -66,7 +66,8 @@ Pixmap getRootPixmap(int screen_num) {
|
||||||
Display *FbWindow::s_display = 0;
|
Display *FbWindow::s_display = 0;
|
||||||
|
|
||||||
FbWindow::FbWindow():m_parent(0), m_screen_num(0), m_window(0), m_x(0), m_y(0),
|
FbWindow::FbWindow():m_parent(0), m_screen_num(0), m_window(0), m_x(0), m_y(0),
|
||||||
m_width(0), m_height(0), m_border_width(0), m_depth(0), m_destroy(true) {
|
m_width(0), m_height(0), m_border_width(0), m_depth(0), m_destroy(true),
|
||||||
|
m_buffer_pm(0) {
|
||||||
|
|
||||||
if (s_display == 0)
|
if (s_display == 0)
|
||||||
s_display = App::instance()->display();
|
s_display = App::instance()->display();
|
||||||
|
@ -77,7 +78,8 @@ FbWindow::FbWindow(const FbWindow& the_copy):m_parent(the_copy.parent()),
|
||||||
m_x(the_copy.x()), m_y(the_copy.y()),
|
m_x(the_copy.x()), m_y(the_copy.y()),
|
||||||
m_width(the_copy.width()), m_height(the_copy.height()),
|
m_width(the_copy.width()), m_height(the_copy.height()),
|
||||||
m_border_width(the_copy.borderWidth()),
|
m_border_width(the_copy.borderWidth()),
|
||||||
m_depth(the_copy.depth()), m_destroy(true) {
|
m_depth(the_copy.depth()), m_destroy(true),
|
||||||
|
m_buffer_pm(0) {
|
||||||
if (s_display == 0)
|
if (s_display == 0)
|
||||||
s_display = App::instance()->display();
|
s_display = App::instance()->display();
|
||||||
|
|
||||||
|
@ -92,7 +94,8 @@ FbWindow::FbWindow(int screen_num,
|
||||||
int depth,
|
int depth,
|
||||||
int class_type):
|
int class_type):
|
||||||
m_screen_num(screen_num),
|
m_screen_num(screen_num),
|
||||||
m_parent(0), m_destroy(true) {
|
m_parent(0), m_destroy(true),
|
||||||
|
m_buffer_pm(0) {
|
||||||
|
|
||||||
create(RootWindow(FbTk::App::instance()->display(), screen_num),
|
create(RootWindow(FbTk::App::instance()->display(), screen_num),
|
||||||
x, y, width, height, eventmask,
|
x, y, width, height, eventmask,
|
||||||
|
@ -105,7 +108,8 @@ FbWindow::FbWindow(const FbWindow &parent,
|
||||||
bool override_redirect,
|
bool override_redirect,
|
||||||
int depth, int class_type):
|
int depth, int class_type):
|
||||||
m_parent(&parent),
|
m_parent(&parent),
|
||||||
m_screen_num(parent.screenNumber()), m_destroy(true) {
|
m_screen_num(parent.screenNumber()), m_destroy(true),
|
||||||
|
m_buffer_pm(0) {
|
||||||
|
|
||||||
create(parent.window(), x, y, width, height, eventmask,
|
create(parent.window(), x, y, width, height, eventmask,
|
||||||
override_redirect, depth, class_type);
|
override_redirect, depth, class_type);
|
||||||
|
@ -115,7 +119,8 @@ FbWindow::FbWindow(const FbWindow &parent,
|
||||||
|
|
||||||
FbWindow::FbWindow(Window client):m_parent(0), m_window(0),
|
FbWindow::FbWindow(Window client):m_parent(0), m_window(0),
|
||||||
m_screen_num(0),
|
m_screen_num(0),
|
||||||
m_destroy(false) { // don't destroy this window
|
m_destroy(false), // don't destroy this window
|
||||||
|
m_buffer_pm(0) {
|
||||||
|
|
||||||
setNew(client);
|
setNew(client);
|
||||||
}
|
}
|
||||||
|
@ -189,9 +194,14 @@ void FbWindow::updateTransparent(int the_x, int the_y, unsigned int the_width, u
|
||||||
if (m_transparent->source() != root)
|
if (m_transparent->source() != root)
|
||||||
m_transparent->setSource(root, screenNumber());
|
m_transparent->setSource(root, screenNumber());
|
||||||
|
|
||||||
if (m_transparent->dest() != window())
|
if (m_buffer_pm) {
|
||||||
|
if (m_transparent->dest() != m_buffer_pm) {
|
||||||
|
m_transparent->setDest(m_buffer_pm, screenNumber());
|
||||||
|
}
|
||||||
|
} else if (m_transparent->dest() != window())
|
||||||
m_transparent->setDest(window(), screenNumber());
|
m_transparent->setDest(window(), screenNumber());
|
||||||
|
|
||||||
|
|
||||||
// get root position
|
// get root position
|
||||||
|
|
||||||
const FbWindow *root_parent = parent();
|
const FbWindow *root_parent = parent();
|
||||||
|
@ -368,6 +378,10 @@ long FbWindow::eventMask() const {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FbWindow::setBufferPixmap(Pixmap pm) {
|
||||||
|
m_buffer_pm = pm;
|
||||||
|
}
|
||||||
|
|
||||||
void FbWindow::updateGeometry() {
|
void FbWindow::updateGeometry() {
|
||||||
if (m_window == 0)
|
if (m_window == 0)
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
// DEALINGS IN THE SOFTWARE.
|
// DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
// $Id: FbWindow.hh,v 1.24 2003/09/10 21:26:28 fluxgen Exp $
|
// $Id: FbWindow.hh,v 1.25 2003/09/14 09:51:40 fluxgen Exp $
|
||||||
|
|
||||||
#ifndef FBTK_FBWINDOW_HH
|
#ifndef FBTK_FBWINDOW_HH
|
||||||
#define FBTK_FBWINDOW_HH
|
#define FBTK_FBWINDOW_HH
|
||||||
|
@ -143,6 +143,7 @@ public:
|
||||||
protected:
|
protected:
|
||||||
/// creates a window with x window client (m_window = client)
|
/// creates a window with x window client (m_window = client)
|
||||||
explicit FbWindow(Window client);
|
explicit FbWindow(Window client);
|
||||||
|
void setBufferPixmap(Pixmap pm);
|
||||||
/// updates x,y, width, height and screen num from X window
|
/// updates x,y, width, height and screen num from X window
|
||||||
void updateGeometry();
|
void updateGeometry();
|
||||||
private:
|
private:
|
||||||
|
@ -164,6 +165,7 @@ private:
|
||||||
int m_depth; ///< bit depth
|
int m_depth; ///< bit depth
|
||||||
bool m_destroy; ///< wheter the x window was created before
|
bool m_destroy; ///< wheter the x window was created before
|
||||||
std::auto_ptr<FbTk::Transparent> m_transparent;
|
std::auto_ptr<FbTk::Transparent> m_transparent;
|
||||||
|
Pixmap m_buffer_pm;
|
||||||
};
|
};
|
||||||
|
|
||||||
bool operator == (Window win, const FbWindow &fbwin);
|
bool operator == (Window win, const FbWindow &fbwin);
|
||||||
|
|
Loading…
Reference in a new issue