root theme

This commit is contained in:
fluxgen 2003-04-25 10:14:54 +00:00
parent f6e36e17dc
commit a553264550
2 changed files with 124 additions and 0 deletions

63
src/RootTheme.cc Normal file
View file

@ -0,0 +1,63 @@
// RootTheme.cc
// Copyright (c) 2003 Henrik Kinnunen (fluxgen(at)users.sourceforge.net)
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: RootTheme.cc,v 1.1 2003/04/25 10:14:54 fluxgen Exp $
#include "RootTheme.hh"
#include "FbCommands.hh"
#include "App.hh"
RootTheme::RootTheme(int screen_num, std::string &screen_root_command):
FbTk::Theme(screen_num),
m_root_command(*this, "rootCommand", "RootCommand"),
m_border_width(*this, "borderWidth", "BorderWidth"),
m_bevel_width(*this, "bevelWidth", "BevelWidth"),
m_handle_width(*this, "handleWidth", "HandleWidth"),
m_border_color(*this, "borderColor", "BorderColor"),
m_screen_root_command(screen_root_command) {
XGCValues gcv;
Display *disp = FbTk::App::instance()->display();
gcv.foreground = WhitePixel(disp, screen_num)^BlackPixel(disp, screen_num);
gcv.function = GXxor;
gcv.subwindow_mode = IncludeInferiors;
m_opgc = XCreateGC(disp,
RootWindow(disp, screen_num),
GCForeground | GCFunction | GCSubwindowMode, &gcv);
}
RootTheme::~RootTheme() {
if (m_opgc != 0)
XFreeGC(FbTk::App::instance()->display(), m_opgc);
}
void RootTheme::reconfigTheme() {
// override resource root command?
if (m_screen_root_command == "") {
// do root command
FbCommands::ExecuteCmd cmd(*m_root_command);
cmd.execute();
} else {
FbCommands::ExecuteCmd cmd(m_screen_root_command);
cmd.execute();
}
}

61
src/RootTheme.hh Normal file
View file

@ -0,0 +1,61 @@
// RootTheme.hh
// Copyright (c) 2003 Henrik Kinnunen (fluxgen(at)users.sourceforge.net)
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: RootTheme.hh,v 1.1 2003/04/25 10:14:54 fluxgen Exp $
#ifndef ROOTTHEME_HH
#define ROOTTHEME_HH
#include "FbTk/Theme.hh"
#include "Color.hh"
#include <X11/Xlib.h>
#include <string>
/**
Contains border color, border size, bevel width and opGC for objects like
geometry window in BScreen
*/
class RootTheme: public FbTk::Theme {
public:
/// constructor
/// @param screen_num the screen number
/// @param screen_root_command the string to be executed override theme rootCommand
RootTheme(int screen_num, std::string &screen_root_command);
~RootTheme();
void reconfigTheme();
const FbTk::Color &borderColor() const { return *m_border_color; }
int borderWidth() const { return *m_border_width; }
int bevelWidth() const { return *m_bevel_width; }
int handleWidth() const { return *m_handle_width; }
GC opGC() const { return m_opgc; }
private:
FbTk::ThemeItem<std::string> m_root_command;
FbTk::ThemeItem<int> m_border_width, m_bevel_width, m_handle_width;
FbTk::ThemeItem<FbTk::Color> m_border_color;
std::string &m_screen_root_command; ///< string to execute and override theme rootCommand
GC m_opgc;
};
#endif // ROOTTHEME_HH