summaryrefslogtreecommitdiff
authoralwin <alwin>2004-11-02 12:35:34 (UTC)
committer alwin <alwin>2004-11-02 12:35:34 (UTC)
commite246d0590286f6b9b0d5d40f1a17caa78c015b21 (patch) (side-by-side diff)
tree96195461536b3821482df56d4f7a0b6683092aed
parente83e5bd3f26270d61a83b8b91e07b35d2657d060 (diff)
downloadopie-e246d0590286f6b9b0d5d40f1a17caa78c015b21.zip
opie-e246d0590286f6b9b0d5d40f1a17caa78c015b21.tar.gz
opie-e246d0590286f6b9b0d5d40f1a17caa78c015b21.tar.bz2
uiuiui - fixed a bug which let running applications crash if switched style
from phase to any other. Reason was that in phase-style a special menubaritem- drawroutine was set but not RESET to qte default if this style was removed I'd implemented the unPolish routine and just set this callback to 0 (qt-default) and now it works nice.
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/styles/phase/phasestyle.cpp10
-rw-r--r--noncore/styles/phase/phasestyle.h8
2 files changed, 15 insertions, 3 deletions
diff --git a/noncore/styles/phase/phasestyle.cpp b/noncore/styles/phase/phasestyle.cpp
index ba8c460..906ccee 100644
--- a/noncore/styles/phase/phasestyle.cpp
+++ b/noncore/styles/phase/phasestyle.cpp
@@ -193,275 +193,285 @@ void PhaseStyle::drawPushButton(QPushButton *btn, QPainter *painter) {
}
void PhaseStyle::drawPanel(QPainter* painter, int x, int y, int w, int h,
const QColorGroup& group, bool sunken,
int , const QBrush* fill) {
int x2 = x + w - 1;
int y2 = y + h - 1;
painter->save();
if (sunken) {
painter->setPen(group.dark());
painter->drawRect(x+1, y+1, w-2, h-2);
painter->setPen(group.midlight());
painter->drawLine(x+1, y2, x2, y2);
painter->drawLine(x2, y+1, x2, y2-1);
painter->setPen(group.mid());
painter->drawLine(x, y, x, y2-1);
painter->drawLine(x+1, y, x2-1, y);
painter->setPen(group.background());
painter->drawPoint(x, y2);
painter->drawPoint(x2, y);
} else {
painter->setPen(group.dark());
painter->drawRect(x, y, w, h);
painter->setPen(group.midlight());
painter->drawLine(x+1, y+1, x2-2, y+1);
painter->drawLine(x+1, y+2, x+1, y2-2);
painter->setPen(group.mid());
painter->drawLine(x+2, y2-1, x2-1, y2-1);
painter->drawLine(x2-1, y+2, x2-1, y2-2);
painter->setPen(group.background());
painter->drawPoint(x+1, y2-1);
painter->drawPoint(x2-1, y+1);
}
if (fill) {
painter->fillRect(x+2, y+2, w-4, h-4, *fill );
}
painter->restore();
}
void PhaseStyle::drawButton(QPainter *p, int x, int y, int w, int h,
const QColorGroup &group, bool sunken ,
const QBrush *fill ) {
int x2 = x + w - 1;
int y2 = y + h - 1;
p->setPen(group.midlight());
p->drawLine(x+1, y2, x2, y2);
p->drawLine(x2, y+1, x2, y2-1);
p->setPen(group.mid());
p->drawLine(x, y, x2-1, y);
p->drawLine(x, y+1, x, y2-1);
p->setPen(group.button());
p->drawPoint(x, y2);
p->drawPoint(x2, y);
drawBevelButton(p, x+1, y+1, w-2, h-2, group, sunken,
fill);
}
void PhaseStyle::drawButtonMask( QPainter* p, int x, int y,
int w, int h ) {
QRect rect(x, y, w, h );
p->fillRect(rect, Qt::color1);
p->setPen(Qt::color0);
}
void PhaseStyle::drawBevelButton(QPainter* p, int x, int y,
int w, int h, const QColorGroup& group,
bool sunken, const QBrush* fill ) {
int x2 = x + w - 1;
int y2 = y + h - 1;
p->save();
p->setPen(group.dark());
p->drawRect(x, y, w, h);
p->setPen(sunken ? group.mid() : group.midlight());
p->drawLine(x+1, y+1, x2-2, y+1);
p->drawLine(x+1, y+2, x+1, y2-2);
p->setPen(sunken ? group.midlight() : group.mid());
p->drawLine(x+2, y2-1, x2-1, y2-1);
p->drawLine(x2-1, y+2, x2-1, y2-2);
p->setPen(group.button());
p->drawPoint(x+1, y2-1);
p->drawPoint(x2-1, y+1);
QBrush b = fill ? *fill : group.brush( QColorGroup::Button );
if (sunken) {
// sunken bevels don't get gradients
p->fillRect(x+2, y+2, w-4, h-4, b);
} else
drawPhaseGradient(p, QRect(x+2, y+2, w-4, h-4), b.color() );
p->restore();
}
void PhaseStyle::drawPhaseGradient(QPainter* painter,
const QRect& rect,
const QColor& color )const {
painter->fillRect(rect, color);
}
void PhaseStyle::polish( QWidget* widget ) {
QWindowsStyle::polish(widget );
#if 0
if (widget->inherits("QMenuBar") ||
widget->inherits("QPopupMenu" ) ||
widget->inherits("QToolButton") ||
widget->inherits("QHeader" ) ) {
widget->setBackgroundMode(QWidget::NoBackground);
}
// else if (widget->inherits("QFrame") ) {
// widget->installEventFilter(this);
// }
#endif
}
+void PhaseStyle::unPolish( QWidget *w )
+{
+ QWindowsStyle::unPolish( w );
+}
+
void PhaseStyle::polish( QPalette &pal ) {
QWindowsStyle::polish( pal );
// lighten up a bit, so the look is not so "crisp"
if (QPixmap::defaultDepth() > 8) { // but not on low color displays
pal.setColor(QPalette::Disabled, QColorGroup::Dark,
pal.color(QPalette::Disabled, QColorGroup::Dark).light(contrast));
pal.setColor(QPalette::Active, QColorGroup::Dark,
pal.color(QPalette::Active, QColorGroup::Dark).light(contrast));
pal.setColor(QPalette::Inactive, QColorGroup::Dark,
pal.color(QPalette::Inactive, QColorGroup::Dark).light(contrast));
}
}
void PhaseStyle::polish( QApplication* app ) {
QWindowsStyle::polish( app );
qt_set_draw_menu_bar_impl((QDrawMenuBarItemImpl)&PhaseStyle::drawMenuBarItem);
}
+void PhaseStyle::unPolish( QApplication* app ) {
+ QWindowsStyle::unPolish(app);
+ qt_set_draw_menu_bar_impl ( 0 );
+}
+
void PhaseStyle::drawPushButtonLabel (QPushButton *button, QPainter *painter) {
bool active = button->isOn() || button->isDown();
QRect r = pushButtonContentsRect( button );
QColorGroup group = button->colorGroup();
int x, y, w, h;
r.rect( &x, &y, &w, &h );
bool sunken = false;
QIconSet::Mode mode;
QPixmap pixmap;
if (active) {// shift contents
x++; y++;
sunken = true;
}
if (button->isMenuButton()) { // draw the indicator
//dx = pixelMetric(PM_MenuButtonIndicator, widget);
int dx = menuButtonIndicatorWidth( button->height() );
drawArrow(painter, Qt::DownArrow, active,
x+w-dx, y+2, dx-4, h-4, group,button->isEnabled() );
w -= dx;
}
if (button->iconSet() && !button->iconSet()->isNull()) { // draw icon
if (button->isEnabled()) {
if (button->hasFocus()) {
mode = QIconSet::Active;
} else {
mode = QIconSet::Normal;
}
} else {
mode = QIconSet::Disabled;
}
#if 0
if (button->isToggleButton() && button->isOn()) {
state = true;
} else {
state = false;
}
#endif
pixmap = button->iconSet()->pixmap(QIconSet::Small, mode);
if (button->text().isEmpty() && !button->pixmap()) {
painter->drawPixmap(x+w/2 - pixmap.width()/2,
y+h/2 - pixmap.height()/2, pixmap);
} else {
painter->drawPixmap(x+4, y+h/2 - pixmap.height()/2, pixmap);
}
x += pixmap.width() + 4;
w -= pixmap.width() + 4;
}
if (active || button->isDefault()) { // default button
for(int n=0; n<2; n++) {
drawItem(painter, x+n, y, w, h,
AlignCenter | ShowPrefix,
button->colorGroup(),
button->isEnabled(),
button->pixmap(),
button->text(), -1,
(button->isEnabled()) ?
&button->colorGroup().buttonText() :
&button->colorGroup().mid());
}
} else { // normal button
drawItem(painter, x, y, w, h,
AlignCenter | ShowPrefix,
button->colorGroup(),
button->isEnabled(),
button->pixmap(),
button->text(), -1,
(button->isEnabled()) ?
&button->colorGroup().buttonText() :
&button->colorGroup().mid());
}
}
void PhaseStyle::drawFocusRect(QPainter *painter, const QRect &rect,
const QColorGroup &group,
const QColor *, bool atBorder) {
QPen old = painter->pen();
painter->setPen(group.highlight().dark(contrast));
painter->setBrush(NoBrush);
if ( atBorder )
painter->drawRect(QRect(rect.x()+1, rect.y()+1,
rect.width()-2, rect.height()-2 ));
else
painter->drawRect(rect);
painter->setPen(old);
}
void PhaseStyle::drawSeperator( QPainter* painter, int x, int y, int w,
int h, const QColorGroup& group, bool,
int , int ) {
qWarning( "Seperator" );
QRect rect(x, y, w, h);
int x2 = rect.right();
int y2 = rect.bottom();
painter->setPen(group.dark());
if (w < h)
painter->drawLine(w/2, y, w/2, y2);
else
painter->drawLine(x, h/2, x2, h/2);
}
void PhaseStyle::drawMenuBarItem(QPainter* p, int x, int y, int w, int h,
QMenuItem *mi, QColorGroup& g, bool enabled,
bool act ) {
return QWindowsStyle::drawMenuBarItem(p, x, y, w, h, mi, g, enabled, act);
}
void PhaseStyle::drawIndicator(QPainter* painter, int x, int y, int w, int h,
const QColorGroup &group, int state, bool,
bool enabled ) {
drawPanel(painter, x, y, w, h, group, true, 1, enabled ?
&group.brush(QColorGroup::Base) :
&group.brush(QColorGroup::Background));
diff --git a/noncore/styles/phase/phasestyle.h b/noncore/styles/phase/phasestyle.h
index cbaa534..ae53efe 100644
--- a/noncore/styles/phase/phasestyle.h
+++ b/noncore/styles/phase/phasestyle.h
@@ -1,167 +1,169 @@
//////////////////////////////////////////////////////////////////////////////
// phasestyle.h
// -------------------
// A style for KDE
// -------------------
// Copyright (c) 2004 David Johnson <david@usermode.org>
//
// 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.
//////////////////////////////////////////////////////////////////////////////
#ifndef PHASESTYLE_H
#define PHASESTYLE_H
#include <qstyle.h>
#include <qwindowsstyle.h>
#include <qcolor.h>
class KPixmap;
class PhaseStyle : public QWindowsStyle
{
Q_OBJECT
public:
PhaseStyle();
virtual ~PhaseStyle();
- void polish( QWidget * );
- void polish( QPalette& );
- void polish( QApplication* );
+ virtual void polish( QWidget * );
+ virtual void polish( QPalette& );
+ virtual void polish( QApplication* a);
+ virtual void unPolish( QWidget * );
+ virtual void unPolish(QApplication *a);
void drawCheckMark ( QPainter * p, int x, int y, int w,
int h, const QColorGroup & g,
bool act, bool dis );
void drawArrow(QPainter *p, Qt::ArrowType type, bool down,
int x, int y, int w, int h, const QColorGroup &g,
bool enabled=true, const QBrush *fill = 0);
void drawPushButton(QPushButton* btn, QPainter* p );
void drawPushButtonLabel(QPushButton* btn, QPainter* p );
void drawPanel(QPainter* p, int , int, int, int,
const QColorGroup&, bool sunken = false,
int lineWidth = 1, const QBrush *b = 0l );
void drawButton( QPainter*, int x, int y, int w, int h,
const QColorGroup&, bool sunken = false,
const QBrush* fill = 0);
void drawBevelButton(QPainter*, int, int, int, int,
const QColorGroup&, bool sunken = false,
const QBrush* fill = 0 );
void drawFocusRect( QPainter* p, const QRect& r,
const QColorGroup&, const QColor* = 0,
bool atBorder = false );
void drawButtonMask( QPainter* p, int x, int y,
int w, int h );
/* Menu Stuff */
void drawSeperator( QPainter* p, int x, int y, int w,
int h, const QColorGroup& group, bool sunken = true,
int lineWidth = 1, int midLineWidtth = 0 );
void drawMenuBarItem(QPainter* p, int x, int y, int w, int h,
QMenuItem *mi, QColorGroup& g, bool enabled,
bool act);
/* RadioButton, CheckBox... */
void drawIndicator(QPainter* p, int x, int y, int w, int h,
const QColorGroup &g, int state, bool down = FALSE,
bool enabled = TRUE );
void drawExclusiveIndicator( QPainter*, int, int, int, int,
const QColorGroup&, bool on,
bool down = false,bool enabled = true );
void drawExclusiveIndicatorMask (QPainter*, int, int, int, int, bool );
/* spacing,dimensions */
int defaultFrameWidth () const;
int popupMenuItemHeight ( bool checkable,
QMenuItem * mi,
const QFontMetrics & fm );
int extraPopupMenuItemWidth(bool checkable, int maxpmw,
QMenuItem* mi, const QFontMetrics& fm );
QSize indicatorSize()const;
QSize exclusiveIndicatorSize()const;
void getButtonShift( int &x, int &y );
/* popup drawing */
void drawPopupMenuItem ( QPainter * p, bool checkable, int maxpmw,
int tab, QMenuItem * mi,
const QPalette & pal, bool act,
bool enabled, int x, int y,
int w, int h );
/* combo box */
QRect comboButtonRect ( int x, int y, int w, int h );
void drawComboButton( QPainter * p, int x, int y,
int w, int h,
const QColorGroup & g,
bool sunken = FALSE,
bool editable = FALSE,
bool enabled = TRUE,
const QBrush * fill = 0 );
/* tabbar */
void drawTab(QPainter*, const QTabBar*, QTab*,
bool selected );
void drawTabMask( QPainter*, const QTabBar*, QTab*,
bool );
void tabbarMetrics( const QTabBar* t, int &hframe, int &vframe, int &overlap);
/* tool button */
void drawToolButton ( QPainter * p, int x, int y,
int w, int h,
const QColorGroup & g,
bool sunken = FALSE,
const QBrush * fill = 0 );
/* scrollbar */
void drawScrollBarControls ( QPainter *, const QScrollBar *,
int sliderStart, uint controls,
uint activeControl );
void scrollBarMetrics( const QScrollBar*, int&, int&, int&, int& );
QStyle::ScrollControl scrollBarPointOver( const QScrollBar*, int sliderStart,
const QPoint& );
/* slider drawing */
void drawSlider ( QPainter * p, int x, int y, int w, int h,
const QColorGroup & g, Orientation,
bool tickAbove, bool tickBelow );
void drawSliderGroove ( QPainter * p, int x, int y, int w,
int h, const QColorGroup & g,
QCOORD c, Orientation );
private:
void drawPhaseGradient(QPainter* p,
const QRect& rec,
const QColor& col )const;
static void scrollBarItemPositions( const QScrollBar *,
const bool horizontal,
int sliderStart,
int sliderMax,
int sliderLength,
int buttomDim,
QRect& sub,
QRect& add,
QRect& subPage,
QRect& addPage,
QRect& slider );
};
#endif