]> Dogcows Code - chaz/openbox/commitdiff
working button class (minus fonts)
authorMarius Nita <marius@cs.pdx.edu>
Thu, 14 Nov 2002 11:41:50 +0000 (11:41 +0000)
committerMarius Nita <marius@cs.pdx.edu>
Thu, 14 Nov 2002 11:41:50 +0000 (11:41 +0000)
otk/button.cc
otk/button.hh

index c88fc707c3fa631657ba8e4cd71d792d004ca42f..98d5780504d8335eaecb40558dca4170c0fecf64 100644 (file)
@@ -3,29 +3,66 @@
 namespace otk {
 
 OtkButton::OtkButton(OtkWidget *parent)
-  : OtkWidget(parent), _text(""), _pressed(false),
-    _unfocus_tx(OtkWidget::getStyle()->getButtonUnfocus())
+  : OtkFocusWidget(parent), _text(""), _pressed(false), _dirty(false),
+    _pressed_focus_tx(0), _pressed_unfocus_tx(0), _unpr_focus_tx(0),
+    _unpr_unfocus_tx(0)
 {
+  setTexture(getStyle()->getButtonFocus());
+  setUnfocusTexture(getStyle()->getButtonUnfocus());
+  _pressed_focus_tx = getStyle()->getButtonPressedFocus();
+  _pressed_unfocus_tx = getStyle()->getButtonPressedUnfocus();
 }
 
 OtkButton::~OtkButton()
 {
+  if (_pressed_focus_tx) delete _pressed_focus_tx;
+  if (_pressed_unfocus_tx) delete _pressed_unfocus_tx;
+}
 
+void OtkButton::press(void)
+{
+  if (_pressed_focus_tx)
+    OtkFocusWidget::setTexture(_pressed_focus_tx);
+  if (_pressed_unfocus_tx)
+    OtkFocusWidget::setUnfocusTexture(_pressed_unfocus_tx);
+  _pressed = true;
 }
 
-void OtkButton::setText(const std::string &text)
+void OtkButton::release(void)
 {
-  std::string a = text;
+  OtkFocusWidget::setTexture(_unpr_focus_tx);
+  OtkFocusWidget::setUnfocusTexture(_unpr_unfocus_tx);
+  _pressed = false;
 }
 
-void OtkButton::press(void)
+void OtkButton::setTexture(BTexture *texture)
 {
+  OtkFocusWidget::setTexture(texture);
+  _unpr_focus_tx = texture;
+}
 
+void OtkButton::setUnfocusTexture(BTexture *texture)
+{
+  OtkFocusWidget::setUnfocusTexture(texture);
+  _unpr_unfocus_tx = texture;
 }
 
-void OtkButton::release(void)
+void OtkButton::update(void)
 {
+  if (_dirty) {
+    const BFont ft = getStyle()->getFont();
+    BColor *text_color = (isFocused() ? getStyle()->getTextFocus()
+                          : getStyle()->getTextUnfocus());
+    unsigned int bevel = getStyle()->getBevelWidth();
+
+    OtkFocusWidget::resize(ft.measureString(_text) + bevel * 2,
+                           ft.height() + bevel * 2);
+    ft.drawString(getWindow(), bevel, bevel, *text_color, _text);
+
+    OtkFocusWidget::update();
+  }
 
+  _dirty = false;
 }
 
 }
index 2fa8e7da20b960776122c041688e95918124377a..55a2389c5f4a7e84ec7a9a1a1888e87e2d15f337 100644 (file)
@@ -1,19 +1,30 @@
-#include "widget.hh"
-#include "style.hh"
-#include "texture.hh"
+#include "focuswidget.hh"
 //#include "pixmap.hh"
 
 namespace otk {
 
-class OtkButton : public OtkWidget {
+class OtkButton : public OtkFocusWidget {
 
 public:
 
   OtkButton(OtkWidget *parent);
   ~OtkButton();
 
+  inline const BTexture *getPressedFocusTexture(void) const
+  { return _pressed_focus_tx; }
+  void setPressedFocusTexture(BTexture *texture)
+  { _pressed_focus_tx = texture; }
+
+  inline const BTexture *getPressedUnfocusTexture(void) const
+  { return _pressed_unfocus_tx; }
+  void setPressedUnfocusTexture(BTexture *texture)
+  { _pressed_unfocus_tx = texture; }
+
+  void setTexture(BTexture *texture);
+  void setUnfocusTexture(BTexture *texture);
+
   inline const std::string &getText(void) const { return _text; }
-  void setText(const std::string &text);
+  void setText(const std::string &text) { _text = text; _dirty = true; }
 
   //inline const OtkPixmap &getPixmap(void) const { return _pixmap; }
   //void setPixmap(const OtkPixmap &pixmap);
@@ -22,13 +33,20 @@ public:
   void press(void);
   void release(void);
 
+  void update(void);
+
 private:
 
   std::string _text;
   //OtkPixmap _pixmap;
   bool _pressed;
-  BTexture *_unfocus_tx;
+  bool _dirty;
+
+  BTexture *_pressed_focus_tx;
+  BTexture *_pressed_unfocus_tx;
 
+  BTexture *_unpr_focus_tx;
+  BTexture *_unpr_unfocus_tx;
 };
 
 }
This page took 0.028846 seconds and 4 git commands to generate.