buttons have their pixmaps!
This commit is contained in:
parent
8bae1352cb
commit
5fdd493d0d
7 changed files with 168 additions and 41 deletions
|
@ -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 },
|
||||
|
|
|
@ -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; }
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -22,6 +22,8 @@ public:
|
|||
|
||||
virtual void adjust();
|
||||
|
||||
virtual void update();
|
||||
|
||||
virtual void focus();
|
||||
virtual void unfocus();
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -72,41 +72,38 @@ void OBLabelWidget::unfocus()
|
|||
|
||||
void OBLabelWidget::update()
|
||||
{
|
||||
if (_dirty) {
|
||||
std::string t = _text;
|
||||
int x = _sidemargin; // x coord for the text
|
||||
OtkWidget::update();
|
||||
|
||||
// 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;
|
||||
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);
|
||||
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;
|
||||
}
|
||||
// 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);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue