summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2002-12-27 10:07:57 +0000
committerDana Jansens <danakj@orodu.net>2002-12-27 10:07:57 +0000
commit5fdd493d0d2255f134114e69f028371366f4dfd3 (patch)
tree661a83f7b9369d95d29ed2bb88e4ce6d621a36d0
parent8bae1352cb401b71575106051a35a9535db1a7cd (diff)
buttons have their pixmaps!
-rw-r--r--otk/otk_wrap.cc72
-rw-r--r--otk/style.hh5
-rw-r--r--otk/texture.cc4
-rw-r--r--src/buttonwidget.cc63
-rw-r--r--src/buttonwidget.hh2
-rw-r--r--src/client.cc6
-rw-r--r--src/labelwidget.cc61
7 files changed, 170 insertions, 43 deletions
diff --git a/otk/otk_wrap.cc b/otk/otk_wrap.cc
index c62d2471..5ab614fb 100644
--- a/otk/otk_wrap.cc
+++ b/otk/otk_wrap.cc
@@ -10927,6 +10927,74 @@ static PyObject *_wrap_Style_load(PyObject *self, PyObject *args) {
}
+static PyObject *_wrap_Style_getCloseButtonMask(PyObject *self, PyObject *args) {
+ PyObject *resultobj;
+ otk::Style *arg1 = (otk::Style *) 0 ;
+ otk::PixmapMask *result;
+ PyObject * obj0 = 0 ;
+
+ if(!PyArg_ParseTuple(args,(char *)"O:Style_getCloseButtonMask",&obj0)) goto fail;
+ if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_otk__Style,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail;
+ result = (otk::PixmapMask *)(arg1)->getCloseButtonMask();
+
+ resultobj = SWIG_NewPointerObj((void *) result, SWIGTYPE_p_otk__PixmapMask, 0);
+ return resultobj;
+ fail:
+ return NULL;
+}
+
+
+static PyObject *_wrap_Style_getMaximizeButtonMask(PyObject *self, PyObject *args) {
+ PyObject *resultobj;
+ otk::Style *arg1 = (otk::Style *) 0 ;
+ otk::PixmapMask *result;
+ PyObject * obj0 = 0 ;
+
+ if(!PyArg_ParseTuple(args,(char *)"O:Style_getMaximizeButtonMask",&obj0)) goto fail;
+ if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_otk__Style,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail;
+ result = (otk::PixmapMask *)(arg1)->getMaximizeButtonMask();
+
+ resultobj = SWIG_NewPointerObj((void *) result, SWIGTYPE_p_otk__PixmapMask, 0);
+ return resultobj;
+ fail:
+ return NULL;
+}
+
+
+static PyObject *_wrap_Style_getIconifyButtonMask(PyObject *self, PyObject *args) {
+ PyObject *resultobj;
+ otk::Style *arg1 = (otk::Style *) 0 ;
+ otk::PixmapMask *result;
+ PyObject * obj0 = 0 ;
+
+ if(!PyArg_ParseTuple(args,(char *)"O:Style_getIconifyButtonMask",&obj0)) goto fail;
+ if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_otk__Style,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail;
+ result = (otk::PixmapMask *)(arg1)->getIconifyButtonMask();
+
+ resultobj = SWIG_NewPointerObj((void *) result, SWIGTYPE_p_otk__PixmapMask, 0);
+ return resultobj;
+ fail:
+ return NULL;
+}
+
+
+static PyObject *_wrap_Style_getStickyButtonMask(PyObject *self, PyObject *args) {
+ PyObject *resultobj;
+ otk::Style *arg1 = (otk::Style *) 0 ;
+ otk::PixmapMask *result;
+ PyObject * obj0 = 0 ;
+
+ if(!PyArg_ParseTuple(args,(char *)"O:Style_getStickyButtonMask",&obj0)) goto fail;
+ if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_otk__Style,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail;
+ result = (otk::PixmapMask *)(arg1)->getStickyButtonMask();
+
+ resultobj = SWIG_NewPointerObj((void *) result, SWIGTYPE_p_otk__PixmapMask, 0);
+ return resultobj;
+ fail:
+ return NULL;
+}
+
+
static PyObject *_wrap_Style_getTextFocus(PyObject *self, PyObject *args) {
PyObject *resultobj;
otk::Style *arg1 = (otk::Style *) 0 ;
@@ -13077,6 +13145,10 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"Style_readDatabaseColor", _wrap_Style_readDatabaseColor, METH_VARARGS },
{ (char *)"Style_readDatabaseFont", _wrap_Style_readDatabaseFont, METH_VARARGS },
{ (char *)"Style_load", _wrap_Style_load, METH_VARARGS },
+ { (char *)"Style_getCloseButtonMask", _wrap_Style_getCloseButtonMask, METH_VARARGS },
+ { (char *)"Style_getMaximizeButtonMask", _wrap_Style_getMaximizeButtonMask, METH_VARARGS },
+ { (char *)"Style_getIconifyButtonMask", _wrap_Style_getIconifyButtonMask, METH_VARARGS },
+ { (char *)"Style_getStickyButtonMask", _wrap_Style_getStickyButtonMask, METH_VARARGS },
{ (char *)"Style_getTextFocus", _wrap_Style_getTextFocus, METH_VARARGS },
{ (char *)"Style_getTextUnfocus", _wrap_Style_getTextUnfocus, METH_VARARGS },
{ (char *)"Style_getButtonPicFocus", _wrap_Style_getButtonPicFocus, METH_VARARGS },
diff --git a/otk/style.hh b/otk/style.hh
index d3b5903e..2944339d 100644
--- a/otk/style.hh
+++ b/otk/style.hh
@@ -84,6 +84,11 @@ public:
void load(const Configuration &style);
+ inline PixmapMask *getCloseButtonMask(void) { return &close_button; }
+ inline PixmapMask *getMaximizeButtonMask(void) { return &max_button; }
+ inline PixmapMask *getIconifyButtonMask(void) { return &icon_button; }
+ inline PixmapMask *getStickyButtonMask(void) { return &stick_button; }
+
inline BColor *getTextFocus(void) { return &l_text_focus; }
inline BColor *getTextUnfocus(void) { return &l_text_unfocus; }
diff --git a/otk/texture.cc b/otk/texture.cc
index 7a651620..967878b7 100644
--- a/otk/texture.cc
+++ b/otk/texture.cc
@@ -158,8 +158,8 @@ Pixmap BTexture::render(const unsigned int width, const unsigned int height,
const Pixmap old) {
assert(texture() != BTexture::NoTexture);
- if (texture() == (BTexture::Flat | BTexture::Solid))
- return None;
+// if (texture() == (BTexture::Flat | BTexture::Solid))
+// return None;
if (texture() == BTexture::Parent_Relative)
return ParentRelative;
diff --git a/src/buttonwidget.cc b/src/buttonwidget.cc
index 853b0339..efb98e76 100644
--- a/src/buttonwidget.cc
+++ b/src/buttonwidget.cc
@@ -5,6 +5,7 @@
#endif
#include "buttonwidget.hh"
+#include "otk/gccache.hh" // otk::BPen
namespace ob {
@@ -76,6 +77,62 @@ void OBButtonWidget::setStyle(otk::Style *style)
}
+void OBButtonWidget::update()
+{
+ otk::PixmapMask *pm;
+ int width;
+
+ otk::OtkWidget::update();
+
+ switch (type()) {
+ case Type_StickyButton:
+ pm = _style->getStickyButtonMask();
+ break;
+ case Type_CloseButton:
+ pm = _style->getCloseButtonMask();
+ break;
+ case Type_MaximizeButton:
+ pm = _style->getMaximizeButtonMask();
+ break;
+ case Type_IconifyButton:
+ pm = _style->getIconifyButtonMask();
+ break;
+ case Type_LeftGrip:
+ case Type_RightGrip:
+ return; // no drawing
+ default:
+ assert(false); // there's no other button widgets!
+ }
+
+ if (pm->mask == None) return; // no mask for the button, leave it empty
+
+ width = _rect.width();
+
+ otk::BPen pen(_focused ? *_style->getButtonPicFocus() :
+ *_style->getButtonPicUnfocus());
+
+ // set the clip region
+ XSetClipMask(otk::OBDisplay::display, pen.gc(), pm->mask);
+ XSetClipOrigin(otk::OBDisplay::display, pen.gc(),
+ (width - pm->w)/2, (width - pm->h)/2);
+
+ // fill in the clipped region
+ XFillRectangle(otk::OBDisplay::display, _window, pen.gc(),
+ (width - pm->w)/2, (width - pm->h)/2,
+ (width + pm->w)/2, (width + pm->h)/2);
+
+ // unset the clip region
+ XSetClipMask(otk::OBDisplay::display, pen.gc(), None);
+ XSetClipOrigin(otk::OBDisplay::display, pen.gc(), 0, 0);
+}
+
+
+void OBButtonWidget::adjust()
+{
+ // XXX: adjust shit
+}
+
+
void OBButtonWidget::focus()
{
otk::OtkWidget::focus();
@@ -90,12 +147,6 @@ void OBButtonWidget::unfocus()
}
-void OBButtonWidget::adjust()
-{
- // XXX: adjust shit
-}
-
-
void OBButtonWidget::buttonPressHandler(const XButtonEvent &e)
{
OtkWidget::buttonPressHandler(e);
diff --git a/src/buttonwidget.hh b/src/buttonwidget.hh
index 66a9cf37..c2bb41f4 100644
--- a/src/buttonwidget.hh
+++ b/src/buttonwidget.hh
@@ -22,6 +22,8 @@ public:
virtual void adjust();
+ virtual void update();
+
virtual void focus();
virtual void unfocus();
diff --git a/src/client.cc b/src/client.cc
index 243390a8..e626081c 100644
--- a/src/client.cc
+++ b/src/client.cc
@@ -1009,15 +1009,15 @@ void OBClient::destroyHandler(const XDestroyWindowEvent &e)
void OBClient::reparentHandler(const XReparentEvent &e)
{
+ // this is when the client is first taken captive in the frame
+ if (e.parent == frame->plate()) return;
+
#ifdef DEBUG
printf("ReparentNotify for 0x%lx\n", e.window);
#endif // DEBUG
OtkEventHandler::reparentHandler(e);
- // this is when the client is first taken captive in the frame
- if (e.parent == frame->plate()) return;
-
/*
This event is quite rare and is usually handled in unmapHandler.
However, if the window is unmapped when the reparent event occurs,
diff --git a/src/labelwidget.cc b/src/labelwidget.cc
index 5a33cf3d..491deadc 100644
--- a/src/labelwidget.cc
+++ b/src/labelwidget.cc
@@ -72,41 +72,38 @@ void OBLabelWidget::unfocus()
void OBLabelWidget::update()
{
- if (_dirty) {
- std::string t = _text;
- int x = _sidemargin; // x coord for the text
-
- // find a string that will fit inside the area for text
- int max_length = width() - _sidemargin * 2;
- if (max_length <= 0) {
- t = ""; // can't fit anything
- } else {
- size_t text_len = t.size();
- int length;
+ OtkWidget::update();
+
+ std::string t = _text;
+ int x = _sidemargin; // x coord for the text
+
+ // find a string that will fit inside the area for text
+ int max_length = width() - _sidemargin * 2;
+ if (max_length <= 0) {
+ t = ""; // can't fit anything
+ } else {
+ size_t text_len = t.size();
+ int length;
- do {
- t.resize(text_len);
- length = _font->measureString(t);
- } while (length > max_length && text_len-- > 0);
-
- // justify the text
- switch (_justify) {
- case otk::Style::RightJustify:
- x += max_length - length;
- break;
- case otk::Style::CenterJustify:
- x += (max_length - length) / 2;
- break;
- case otk::Style::LeftJustify:
- break;
- }
+ do {
+ t.resize(text_len);
+ length = _font->measureString(t);
+ } while (length > max_length && text_len-- > 0);
+
+ // justify the text
+ switch (_justify) {
+ case otk::Style::RightJustify:
+ x += max_length - length;
+ break;
+ case otk::Style::CenterJustify:
+ x += (max_length - length) / 2;
+ break;
+ case otk::Style::LeftJustify:
+ break;
}
+ }
- OtkWidget::update();
-
- _font->drawString(_xftdraw, x, 0, *_text_color, t);
- } else
- OtkWidget::update();
+ _font->drawString(_xftdraw, x, 0, *_text_color, t);
}