buttons have their pixmaps!

This commit is contained in:
Dana Jansens 2002-12-27 10:07:57 +00:00
parent 8bae1352cb
commit 5fdd493d0d
7 changed files with 168 additions and 41 deletions

View file

@ -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) { static PyObject *_wrap_Style_getTextFocus(PyObject *self, PyObject *args) {
PyObject *resultobj; PyObject *resultobj;
otk::Style *arg1 = (otk::Style *) 0 ; otk::Style *arg1 = (otk::Style *) 0 ;
@ -13077,6 +13145,10 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"Style_readDatabaseColor", _wrap_Style_readDatabaseColor, METH_VARARGS }, { (char *)"Style_readDatabaseColor", _wrap_Style_readDatabaseColor, METH_VARARGS },
{ (char *)"Style_readDatabaseFont", _wrap_Style_readDatabaseFont, METH_VARARGS }, { (char *)"Style_readDatabaseFont", _wrap_Style_readDatabaseFont, METH_VARARGS },
{ (char *)"Style_load", _wrap_Style_load, 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_getTextFocus", _wrap_Style_getTextFocus, METH_VARARGS },
{ (char *)"Style_getTextUnfocus", _wrap_Style_getTextUnfocus, METH_VARARGS }, { (char *)"Style_getTextUnfocus", _wrap_Style_getTextUnfocus, METH_VARARGS },
{ (char *)"Style_getButtonPicFocus", _wrap_Style_getButtonPicFocus, METH_VARARGS }, { (char *)"Style_getButtonPicFocus", _wrap_Style_getButtonPicFocus, METH_VARARGS },

View file

@ -84,6 +84,11 @@ public:
void load(const Configuration &style); 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 *getTextFocus(void) { return &l_text_focus; }
inline BColor *getTextUnfocus(void) { return &l_text_unfocus; } inline BColor *getTextUnfocus(void) { return &l_text_unfocus; }

View file

@ -158,8 +158,8 @@ Pixmap BTexture::render(const unsigned int width, const unsigned int height,
const Pixmap old) { const Pixmap old) {
assert(texture() != BTexture::NoTexture); assert(texture() != BTexture::NoTexture);
if (texture() == (BTexture::Flat | BTexture::Solid)) // if (texture() == (BTexture::Flat | BTexture::Solid))
return None; // return None;
if (texture() == BTexture::Parent_Relative) if (texture() == BTexture::Parent_Relative)
return ParentRelative; return ParentRelative;

View file

@ -5,6 +5,7 @@
#endif #endif
#include "buttonwidget.hh" #include "buttonwidget.hh"
#include "otk/gccache.hh" // otk::BPen
namespace ob { 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() void OBButtonWidget::focus()
{ {
otk::OtkWidget::focus(); otk::OtkWidget::focus();
@ -90,12 +147,6 @@ void OBButtonWidget::unfocus()
} }
void OBButtonWidget::adjust()
{
// XXX: adjust shit
}
void OBButtonWidget::buttonPressHandler(const XButtonEvent &e) void OBButtonWidget::buttonPressHandler(const XButtonEvent &e)
{ {
OtkWidget::buttonPressHandler(e); OtkWidget::buttonPressHandler(e);

View file

@ -22,6 +22,8 @@ public:
virtual void adjust(); virtual void adjust();
virtual void update();
virtual void focus(); virtual void focus();
virtual void unfocus(); virtual void unfocus();

View file

@ -1009,15 +1009,15 @@ void OBClient::destroyHandler(const XDestroyWindowEvent &e)
void OBClient::reparentHandler(const XReparentEvent &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 #ifdef DEBUG
printf("ReparentNotify for 0x%lx\n", e.window); printf("ReparentNotify for 0x%lx\n", e.window);
#endif // DEBUG #endif // DEBUG
OtkEventHandler::reparentHandler(e); 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. This event is quite rare and is usually handled in unmapHandler.
However, if the window is unmapped when the reparent event occurs, However, if the window is unmapped when the reparent event occurs,

View file

@ -72,41 +72,38 @@ void OBLabelWidget::unfocus()
void OBLabelWidget::update() void OBLabelWidget::update()
{ {
if (_dirty) { 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 std::string t = _text;
int max_length = width() - _sidemargin * 2; int x = _sidemargin; // x coord for the text
if (max_length <= 0) {
t = ""; // can't fit anything // find a string that will fit inside the area for text
} else { int max_length = width() - _sidemargin * 2;
size_t text_len = t.size(); if (max_length <= 0) {
int length; t = ""; // can't fit anything
} else {
size_t text_len = t.size();
int length;
do { do {
t.resize(text_len); t.resize(text_len);
length = _font->measureString(t); length = _font->measureString(t);
} while (length > max_length && text_len-- > 0); } while (length > max_length && text_len-- > 0);
// justify the text // justify the text
switch (_justify) { switch (_justify) {
case otk::Style::RightJustify: case otk::Style::RightJustify:
x += max_length - length; x += max_length - length;
break; break;
case otk::Style::CenterJustify: case otk::Style::CenterJustify:
x += (max_length - length) / 2; x += (max_length - length) / 2;
break; break;
case otk::Style::LeftJustify: case otk::Style::LeftJustify:
break; break;
}
} }
}
OtkWidget::update(); _font->drawString(_xftdraw, x, 0, *_text_color, t);
_font->drawString(_xftdraw, x, 0, *_text_color, t);
} else
OtkWidget::update();
} }