From ec1049e89458f67c040bff905e1df862ae1587d7 Mon Sep 17 00:00:00 2001
From: fluxgen <fluxgen>
Date: Mon, 13 Oct 2003 23:38:17 +0000
Subject: helper tool class for button tools

---
 src/ButtonTool.cc | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/ButtonTool.hh | 49 +++++++++++++++++++++++++++++++
 2 files changed, 135 insertions(+)
 create mode 100644 src/ButtonTool.cc
 create mode 100644 src/ButtonTool.hh

diff --git a/src/ButtonTool.cc b/src/ButtonTool.cc
new file mode 100644
index 0000000..7f350f5
--- /dev/null
+++ b/src/ButtonTool.cc
@@ -0,0 +1,86 @@
+// ButtonTool.cc for Fluxbox
+// 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: ButtonTool.cc,v 1.1 2003/10/13 23:38:17 fluxgen Exp $
+
+#include "ButtonTool.hh"
+
+#include "FbTk/Button.hh"
+#include "FbTk/ImageControl.hh"
+#include "ButtonTheme.hh"
+
+ButtonTool::ButtonTool(FbTk::Button *button, 
+                       ToolbarItem::Type type, 
+                       ButtonTheme &theme,
+                       FbTk::ImageControl &img_ctrl):
+    GenericTool(button, type, theme),
+    m_cache_pm(0),
+    m_cache_pressed_pm(0),
+    m_image_ctrl(img_ctrl) {
+
+    renderTheme();
+}
+
+ButtonTool::~ButtonTool() {
+    if (m_cache_pm)
+        m_image_ctrl.removeImage(m_cache_pm);
+
+    if (m_cache_pressed_pm)
+        m_image_ctrl.removeImage(m_cache_pressed_pm);
+
+}
+
+void ButtonTool::renderTheme() {
+    FbTk::Button &btn = static_cast<FbTk::Button &>(window());
+
+    btn.setGC(static_cast<const ButtonTheme &>(theme()).gc());
+    btn.setBorderColor(theme().border().color());
+    btn.setBorderWidth(theme().border().width());
+
+    Pixmap old_pm = m_cache_pm;
+    if (theme().texture().type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
+        m_cache_pm = 0;
+        btn.setBackgroundColor(theme().texture().color());
+    } else {
+        m_cache_pm = m_image_ctrl.renderImage(width(), height(),
+                                              theme().texture());
+        btn.setBackgroundPixmap(m_cache_pm);
+    }
+    if (old_pm)
+        m_image_ctrl.removeImage(old_pm);
+
+    old_pm = m_cache_pressed_pm;
+    if (static_cast<const ButtonTheme &>(theme()).pressed().type() == 
+        (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
+        m_cache_pressed_pm = 0;
+        btn.setPressedColor(static_cast<const ButtonTheme &>(theme()).pressed().color());
+    } else {
+        m_cache_pressed_pm = m_image_ctrl.renderImage(width(), height(),
+                                                      static_cast<const ButtonTheme &>(theme()).pressed());
+        btn.setPressedPixmap(m_cache_pressed_pm);
+    }
+
+    if (old_pm)
+        m_image_ctrl.removeImage(old_pm);
+
+    btn.clear();
+}
+
diff --git a/src/ButtonTool.hh b/src/ButtonTool.hh
new file mode 100644
index 0000000..b40c5a7
--- /dev/null
+++ b/src/ButtonTool.hh
@@ -0,0 +1,49 @@
+// ButtonTool.hh for Fluxbox
+// 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: ButtonTool.hh,v 1.1 2003/10/13 23:38:17 fluxgen Exp $
+
+#ifndef BUTTONTOOL_HH
+#define BUTTONTOOL_HH
+
+#include "GenericTool.hh"
+#include "FbTk/Observer.hh"
+
+class ButtonTheme;
+
+namespace FbTk {
+class Button;
+class ImageControl;
+};
+
+class ButtonTool: public GenericTool {
+public:
+    ButtonTool(FbTk::Button *button, ToolbarItem::Type type, 
+               ButtonTheme &theme, FbTk::ImageControl &img_ctrl);
+    virtual ~ButtonTool();
+
+protected:
+    void renderTheme();
+    Pixmap m_cache_pm, m_cache_pressed_pm;
+    FbTk::ImageControl &m_image_ctrl;
+};
+
+#endif // BUTTONTOOL_HH
-- 
cgit v0.11.2