toggle pixmap for IconButton
This commit is contained in:
parent
258cb10be2
commit
5ce35d9fa8
4 changed files with 48 additions and 11 deletions
|
@ -20,7 +20,7 @@
|
|||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
// DEALINGS IN THE SOFTWARE.
|
||||
|
||||
// $Id: IconButton.cc,v 1.12 2003/11/19 12:57:27 rathnor Exp $
|
||||
// $Id: IconButton.cc,v 1.13 2003/11/27 14:27:48 fluxgen Exp $
|
||||
|
||||
#include "IconButton.hh"
|
||||
|
||||
|
@ -66,7 +66,8 @@ IconButton::IconButton(const FbTk::FbWindow &parent, const FbTk::Font &font,
|
|||
FbTk::TextButton(parent, font, win.winClient().title()),
|
||||
m_win(win),
|
||||
m_icon_window(*this, 1, 1, 1, 1,
|
||||
ExposureMask | ButtonPressMask | ButtonReleaseMask) {
|
||||
ExposureMask | ButtonPressMask | ButtonReleaseMask),
|
||||
m_use_pixmap(true) {
|
||||
|
||||
FbTk::RefCount<FbTk::Command> focus(new FbTk::SimpleCommand<FluxboxWindow>(m_win, &FluxboxWindow::raiseAndFocus));
|
||||
FbTk::RefCount<FbTk::Command> menu(new ::ShowMenu(m_win));
|
||||
|
@ -117,6 +118,13 @@ void IconButton::clearArea(int x, int y,
|
|||
width, height, exposure);
|
||||
}
|
||||
|
||||
void IconButton::setPixmap(bool use) {
|
||||
if (m_use_pixmap != use) {
|
||||
m_use_pixmap = use;
|
||||
update(0);
|
||||
}
|
||||
}
|
||||
|
||||
void IconButton::update(FbTk::Subject *subj) {
|
||||
// we got signal that either title or
|
||||
// icon pixmap was updated,
|
||||
|
@ -130,7 +138,7 @@ void IconButton::update(FbTk::Subject *subj) {
|
|||
if (hints == 0)
|
||||
return;
|
||||
|
||||
if (hints->flags & IconPixmapHint && hints->icon_pixmap != 0) {
|
||||
if (m_use_pixmap && (hints->flags & IconPixmapHint) && hints->icon_pixmap != 0) {
|
||||
// setup icon window
|
||||
m_icon_window.show();
|
||||
int new_height = height() - 2*m_icon_window.y(); // equally padded
|
||||
|
@ -148,7 +156,7 @@ void IconButton::update(FbTk::Subject *subj) {
|
|||
m_icon_pixmap = 0;
|
||||
}
|
||||
|
||||
if(hints->flags & IconMaskHint) {
|
||||
if(m_use_pixmap && (hints->flags & IconMaskHint)) {
|
||||
m_icon_mask.copy(hints->icon_mask);
|
||||
m_icon_mask.scale(m_icon_pixmap.width(), m_icon_pixmap.height());
|
||||
} else
|
||||
|
@ -186,7 +194,10 @@ void IconButton::setupWindow() {
|
|||
|
||||
void IconButton::drawText(int x, int y) {
|
||||
// offset text
|
||||
if (m_icon_pixmap.drawable() != 0)
|
||||
FbTk::TextButton::drawText(m_icon_window.x() + m_icon_window.width() + 1, y);
|
||||
else
|
||||
FbTk::TextButton::drawText(1, y);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
// DEALINGS IN THE SOFTWARE.
|
||||
|
||||
// $Id: IconButton.hh,v 1.3 2003/09/10 21:40:01 fluxgen Exp $
|
||||
// $Id: IconButton.hh,v 1.4 2003/11/27 14:27:48 fluxgen Exp $
|
||||
|
||||
#ifndef ICONBUTTON_HH
|
||||
#define ICONBUTTON_HH
|
||||
|
@ -33,7 +33,8 @@ class FluxboxWindow;
|
|||
|
||||
class IconButton: public FbTk::TextButton, public FbTk::Observer {
|
||||
public:
|
||||
IconButton(const FbTk::FbWindow &parent, const FbTk::Font &font, FluxboxWindow &window);
|
||||
IconButton(const FbTk::FbWindow &parent, const FbTk::Font &font,
|
||||
FluxboxWindow &window);
|
||||
virtual ~IconButton();
|
||||
|
||||
void exposeEvent(XExposeEvent &event);
|
||||
|
@ -46,8 +47,11 @@ public:
|
|||
void resize(unsigned int width, unsigned int height);
|
||||
|
||||
void update(FbTk::Subject *subj);
|
||||
void setPixmap(bool use);
|
||||
|
||||
FluxboxWindow &win() { return m_win; }
|
||||
const FluxboxWindow &win() const { return m_win; }
|
||||
|
||||
protected:
|
||||
void drawText(int x = 0, int y = 0);
|
||||
private:
|
||||
|
@ -57,6 +61,7 @@ private:
|
|||
FbTk::FbWindow m_icon_window;
|
||||
FbTk::FbPixmap m_icon_pixmap;
|
||||
FbTk::FbPixmap m_icon_mask;
|
||||
bool m_use_pixmap;
|
||||
};
|
||||
|
||||
#endif // ICONBUTTON_HH
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
// DEALINGS IN THE SOFTWARE.
|
||||
|
||||
// $Id: IconbarTool.cc,v 1.15 2003/10/26 20:13:11 fluxgen Exp $
|
||||
// $Id: IconbarTool.cc,v 1.16 2003/11/27 14:30:11 fluxgen Exp $
|
||||
|
||||
#include "IconbarTool.hh"
|
||||
|
||||
|
@ -31,12 +31,15 @@
|
|||
#include "Workspace.hh"
|
||||
#include "fluxbox.hh"
|
||||
#include "FbMenu.hh"
|
||||
#include "BoolMenuItem.hh"
|
||||
#include "CommandParser.hh"
|
||||
|
||||
#include "FbTk/Menu.hh"
|
||||
#include "FbTk/MenuItem.hh"
|
||||
#include "FbTk/RefCount.hh"
|
||||
#include "FbTk/SimpleCommand.hh"
|
||||
#include "FbTk/ImageControl.hh"
|
||||
#include "FbTk/MacroCommand.hh"
|
||||
|
||||
#include <typeinfo>
|
||||
#include <string>
|
||||
|
@ -181,11 +184,26 @@ IconbarTool::IconbarTool(const FbTk::FbWindow &parent, IconbarTheme &theme, BScr
|
|||
m_empty_pm(0),
|
||||
m_rc_mode(screen.resourceManager(), WORKSPACE,
|
||||
screen.name() + ".iconbar.mode", screen.altName() + ".Iconbar.Mode"),
|
||||
m_rc_use_pixmap(screen.resourceManager(), true,
|
||||
screen.name() + ".iconbar.usePixmap", screen.altName() + ".Iconbar.UsePixmap"),
|
||||
m_menu(*screen.menuTheme(), menu.screenNumber(), screen.imageControl(),
|
||||
*screen.layerManager().getLayer(Fluxbox::instance()->getMenuLayer())) {
|
||||
|
||||
// setup menu
|
||||
// setup mode menu
|
||||
setupModeMenu(m_menu, *this);
|
||||
|
||||
using namespace FbTk;
|
||||
// setup use pixmap item to reconfig iconbar and save resource on click
|
||||
MacroCommand *save_and_reconfig = new MacroCommand();
|
||||
RefCount<Command> reconfig(new SimpleCommand<IconbarTool>(*this, &IconbarTool::renderTheme));
|
||||
RefCount<Command> save(CommandParser::instance().parseLine("saverc"));
|
||||
save_and_reconfig->add(reconfig);
|
||||
save_and_reconfig->add(save);
|
||||
RefCount<Command> s_and_reconfig(save_and_reconfig);
|
||||
m_menu.insert(new BoolMenuItem("Use Pixmap", *m_rc_use_pixmap, s_and_reconfig));
|
||||
m_menu.update();
|
||||
|
||||
// add iconbar menu to toolbar menu
|
||||
menu.insert(m_menu.label().c_str(), &m_menu);
|
||||
|
||||
// setup signals
|
||||
|
@ -445,6 +463,8 @@ void IconbarTool::renderTheme() {
|
|||
|
||||
void IconbarTool::renderButton(IconButton &button) {
|
||||
|
||||
button.setPixmap(*m_rc_use_pixmap);
|
||||
|
||||
if (button.win().isFocused()) { // focused texture
|
||||
button.setGC(m_theme.focusedText().textGC());
|
||||
button.setFont(m_theme.focusedText().font());
|
||||
|
@ -517,6 +537,7 @@ void IconbarTool::addWindow(FluxboxWindow &win) {
|
|||
return;
|
||||
|
||||
IconButton *button = new IconButton(m_icon_container, m_theme.focusedText().font(), win);
|
||||
button->setPixmap(*m_rc_use_pixmap);
|
||||
m_icon_container.insertItem(button);
|
||||
m_icon_list.push_back(button);
|
||||
|
||||
|
@ -527,7 +548,6 @@ void IconbarTool::addWindow(FluxboxWindow &win) {
|
|||
win.stateSig().attach(this);
|
||||
}
|
||||
|
||||
|
||||
void IconbarTool::updateIcons() {
|
||||
std::list<FluxboxWindow *> itemlist;
|
||||
// add icons to the itemlist
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
// DEALINGS IN THE SOFTWARE.
|
||||
|
||||
// $Id: IconbarTool.hh,v 1.9 2003/10/06 06:22:42 rathnor Exp $
|
||||
// $Id: IconbarTool.hh,v 1.10 2003/11/27 14:30:11 fluxgen Exp $
|
||||
|
||||
#ifndef ICONBARTOOL_HH
|
||||
#define ICONBARTOOL_HH
|
||||
|
@ -108,6 +108,7 @@ private:
|
|||
|
||||
IconList m_icon_list;
|
||||
FbTk::Resource<Mode> m_rc_mode;
|
||||
FbTk::Resource<bool> m_rc_use_pixmap; ///< if iconbar should use win pixmap or not
|
||||
|
||||
FbMenu m_menu;
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue