From f8f65c3945395e12cdbf7e3e729468f9c2bdd67a Mon Sep 17 00:00:00 2001 From: fluxgen Date: Fri, 16 Jan 2004 11:47:07 +0000 Subject: different window for position coordinates, patch from Junichiro Kita --- src/Screen.cc | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 84 insertions(+), 11 deletions(-) diff --git a/src/Screen.cc b/src/Screen.cc index dfe92fb..a81ee9e 100644 --- a/src/Screen.cc +++ b/src/Screen.cc @@ -22,7 +22,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -// $Id: Screen.cc,v 1.260 2004/01/11 16:06:22 fluxgen Exp $ +// $Id: Screen.cc,v 1.261 2004/01/16 11:47:07 fluxgen Exp $ #include "Screen.hh" @@ -485,6 +485,11 @@ BScreen::BScreen(FbTk::ResourceManager &rm, int geom_h = 10; int geom_w = 100; // just initial, will be fixed in render + // create geometry window + + int pos_h = 10; + int pos_w = 100; // just initial, will be fixed in render + XSetWindowAttributes attrib; unsigned long mask = CWBorderPixel | CWColormap | CWSaveUnder; attrib.border_pixel = winFrameTheme().border().color().pixel(); @@ -502,6 +507,15 @@ BScreen::BScreen(FbTk::ResourceManager &rm, renderGeomWindow(); + m_pos_window = + XCreateWindow(disp, rootWindow().window(), + 0, 0, pos_w, pos_h, winFrameTheme().border().width(), rootWindow().depth(), + InputOutput, rootWindow().visual(), mask, &attrib); + pos_visible = false; + pos_pixmap = 0; + + renderPosWindow(); + // setup workspaces and workspace menu workspacemenu.reset(createMenu("")); @@ -633,6 +647,9 @@ BScreen::~BScreen() { if (geom_pixmap != None) imageControl().removeImage(geom_pixmap); + if (pos_pixmap != None) + imageControl().removeImage(pos_pixmap); + removeWorkspaceNames(); Workspaces::iterator w_it = m_workspaces_list.begin(); @@ -731,6 +748,7 @@ void BScreen::update(FbTk::Subject *subj) { // if another signal is added later, will need to differentiate here renderGeomWindow(); + renderPosWindow(); } FbTk::Menu *BScreen::createMenu(const std::string &label) { @@ -800,6 +818,7 @@ void BScreen::reconfigure() { m_menutheme->frameFont().setAntialias(*resource.antialias); renderGeomWindow(); + renderPosWindow(); //reconfigure menus workspacemenu->reconfigure(); @@ -2238,21 +2257,21 @@ void BScreen::showPosition(int x, int y) { if (!doShowWindowPos()) return; - if (! geom_visible) { + if (! pos_visible) { if (hasXinerama()) { unsigned int head = getCurrHead(); - m_geom_window.move(getHeadX(head) + (getHeadWidth(head) - m_geom_window.width()) / 2, - getHeadY(head) + (getHeadHeight(head) - m_geom_window.height()) / 2); + m_pos_window.move(getHeadX(head) + (getHeadWidth(head) - m_pos_window.width()) / 2, + getHeadY(head) + (getHeadHeight(head) - m_pos_window.height()) / 2); } else { - m_geom_window.move((width() - m_geom_window.width()) / 2, (height() - m_geom_window.height()) / 2); + m_pos_window.move((width() - m_pos_window.width()) / 2, (height() - m_pos_window.height()) / 2); } - m_geom_window.show(); - m_geom_window.raise(); + m_pos_window.show(); + m_pos_window.raise(); - geom_visible = true; + pos_visible = true; } char label[256]; @@ -2260,9 +2279,9 @@ void BScreen::showPosition(int x, int y) { I18n::instance()->getMessage(FBNLS::ScreenSet, FBNLS::ScreenPositionFormat, "X: %4d x Y: %4d"), x, y); - m_geom_window.clear(); + m_pos_window.clear(); - winFrameTheme().font().drawText(m_geom_window.window(), + winFrameTheme().font().drawText(m_pos_window.window(), screenNumber(), winFrameTheme().labelTextFocusGC(), label, strlen(label), @@ -2273,6 +2292,14 @@ void BScreen::showPosition(int x, int y) { } +void BScreen::hidePosition() { + if (pos_visible) { + m_pos_window.hide(); + pos_visible = false; + } +} + + void BScreen::showGeometry(unsigned int gx, unsigned int gy) { if (!doShowWindowPos()) return; @@ -2370,7 +2397,7 @@ bool BScreen::doSkipWindow(const WinClient &winclient, int opts) { void BScreen::renderGeomWindow() { const char *s = I18n::instance()->getMessage(FBNLS::ScreenSet, - FBNLS::ScreenPositionLength, + FBNLS::ScreenGeometryLength, "W: 0000 x H: 0000"); int l = strlen(s); @@ -2409,6 +2436,52 @@ void BScreen::renderGeomWindow() { } + +void BScreen::renderPosWindow() { + + const char *s = I18n::instance()->getMessage(FBNLS::ScreenSet, + FBNLS::ScreenPositionLength, + "0: 0000 x 0: 0000"); + int l = strlen(s); + + int pos_h = winFrameTheme().font().height() + winFrameTheme().bevelWidth()*2; + int pos_w = winFrameTheme().font().textWidth(s, l) + winFrameTheme().bevelWidth()*2; + m_pos_window.resize(pos_w, pos_h); + + m_pos_window.setBorderWidth(winFrameTheme().border().width()); + m_pos_window.setBorderColor(winFrameTheme().border().color()); + + + Pixmap tmp = pos_pixmap; + + if (winFrameTheme().labelFocusTexture().type() & FbTk::Texture::PARENTRELATIVE) { + if (!winFrameTheme().titleFocusTexture().usePixmap()) { + pos_pixmap = None; + m_pos_window.setBackgroundColor(winFrameTheme().titleFocusTexture().color()); + } else { + pos_pixmap = imageControl().renderImage(m_pos_window.width(), m_pos_window.height(), + winFrameTheme().titleFocusTexture()); + m_pos_window.setBackgroundPixmap(pos_pixmap); + } + } else { + if (!winFrameTheme().labelFocusTexture().usePixmap()) { + pos_pixmap = None; + m_pos_window.setBackgroundColor(winFrameTheme().labelFocusTexture().color()); + } else { + pos_pixmap = imageControl().renderImage(m_pos_window.width(), m_pos_window.height(), + winFrameTheme().labelFocusTexture()); + m_pos_window.setBackgroundPixmap(pos_pixmap); + } + } + + if (tmp) + imageControl().removeImage(tmp); + +} + + + + /** Called when a set of watched modifiers has been released */ -- cgit v0.11.2