Keep around the helper as a reference member of OxygenClient and OxygenButton, instead of having two global statics. Also refer to the client (from the button) as a reference to ensure that it exists (namely, so that we can grab our own reference to its helper).

svn path=/trunk/KDE/kdebase/workspace/; revision=723558
icc-effect-5.14.5
Matthew Woehlke 2007-10-10 00:05:24 +00:00
parent 06137e0518
commit cb8d764ba1
4 changed files with 29 additions and 28 deletions

View File

@ -36,13 +36,9 @@
#include "oxygenbutton.h"
#include "oxygen.h"
#include "definitions.cpp"
#include "lib/helper.h"
namespace Oxygen
{
#ifndef KDE_USE_FINAL
K_GLOBAL_STATIC_WITH_ARGS(OxygenHelper, globalHelper, ("OxygenDeco"))
#endif
// class OxygenClient;
/*
extern int BUTTONSIZE;
@ -58,10 +54,11 @@ extern int DECOSIZE;*/
// ---------------
// Constructor
OxygenButton::OxygenButton(OxygenClient *parent,
OxygenButton::OxygenButton(OxygenClient &parent,
const QString& tip, ButtonType type)
: KCommonDecorationButton((::ButtonType)type,(KCommonDecoration*) parent)
: KCommonDecorationButton((::ButtonType)type, &parent)
, client_(parent)
, helper_(parent.helper_)
, type_(type)
, lastmouse_(0)
{
@ -135,12 +132,12 @@ void OxygenButton::paintEvent(QPaintEvent *)
// we paint the mini icon (which is 16 pixels high)
int dx = (width() - 16) / 2;
int dy = (height() - 16) / 2;
painter.drawPixmap(dx, dy, client_->icon().pixmap(16));
painter.drawPixmap(dx, dy, client_.icon().pixmap(16));
return;
}
QColor bg = globalHelper->backgroundTopColor(palette().window());
painter.drawPixmap(0, 0, globalHelper->windecoButton(palette().button()));
QColor bg = helper_.backgroundTopColor(palette().window());
painter.drawPixmap(0, 0, helper_.windecoButton(palette().button()));
painter.translate(1.5,1.5);
painter.setRenderHints(QPainter::Antialiasing);
@ -148,7 +145,7 @@ void OxygenButton::paintEvent(QPaintEvent *)
QLinearGradient lg(0, 6, 0, 12);
lg.setColorAt(0.45, QColor(0,0,0,150));
lg.setColorAt(0.80, QColor(0,0,0,80));
painter.setPen(QPen(lg,2));
painter.setPen(QPen(lg, 2));
switch(type_)
{
case ButtonSticky:
@ -164,7 +161,7 @@ void OxygenButton::paintEvent(QPaintEvent *)
painter.drawLine(9,11,12,8);
break;
case ButtonMax:
switch(client_->maximizeMode())
switch(client_.maximizeMode())
{
case OxygenClient::MaximizeRestore:
case OxygenClient::MaximizeVertical:

View File

@ -30,6 +30,7 @@
#include <kcommondecoration.h>
#include "oxygen.h"
#include "oxygenclient.h"
namespace Oxygen
{
@ -45,7 +46,7 @@ Q_DECLARE_FLAGS(ButtonState, ButtonStatus)
class OxygenButton : public KCommonDecorationButton
{
public:
explicit OxygenButton(OxygenClient *parent=0,
explicit OxygenButton(OxygenClient &parent,
const QString &tip=NULL,
ButtonType type=ButtonHelp);
~OxygenButton();
@ -63,7 +64,8 @@ private Q_SLOTS:
void pressSlot();
private:
OxygenClient *client_;
OxygenClient &client_;
OxygenHelper &helper_;
ButtonType type_;
ButtonState status_;
int lastmouse_;

View File

@ -34,8 +34,6 @@
#include <QTimer>
#include <QCache>
#include "lib/helper.h"
#include "oxygenclient.h"
#include "oxygenclient.moc"
#include "oxygenbutton.h"
@ -66,7 +64,7 @@ void renderDot(QPainter *p, const QPointF &point, qreal diameter)
OxygenClient::OxygenClient(KDecorationBridge *b, KDecorationFactory *f)
: KCommonDecoration(b, f) { ; }
: KCommonDecoration(b, f), helper_(*globalHelper) { ; }
OxygenClient::~OxygenClient()
{
@ -92,7 +90,7 @@ void OxygenClient::init()
widget()->setAutoFillBackground(false);
widget()->setAttribute(Qt::WA_OpaquePaintEvent);
widget()->setAttribute( Qt::WA_PaintOnScreen, false);
widget()->setAttribute(Qt::WA_PaintOnScreen, false);
}
bool OxygenClient::decorationBehaviour(DecorationBehaviour behaviour) const
@ -183,19 +181,19 @@ KCommonDecorationButton *OxygenClient::createButton(::ButtonType type)
{
switch (type) {
case MenuButton:
return new OxygenButton(this, i18n("Menu"), ButtonMenu);
return new OxygenButton(*this, i18n("Menu"), ButtonMenu);
case HelpButton:
return new OxygenButton(this, i18n("Help"), ButtonHelp);
return new OxygenButton(*this, i18n("Help"), ButtonHelp);
case MinButton:
return new OxygenButton(this, i18n("Minimize"), ButtonMin);
return new OxygenButton(*this, i18n("Minimize"), ButtonMin);
case MaxButton:
return new OxygenButton(this, i18n("Minimize"), ButtonMax);
return new OxygenButton(*this, i18n("Minimize"), ButtonMax);
case CloseButton:
return new OxygenButton(this, i18n("Minimize"), ButtonClose);
return new OxygenButton(*this, i18n("Minimize"), ButtonClose);
default:
return 0;
@ -241,21 +239,21 @@ void OxygenClient::paintEvent(QPaintEvent *e)
int splitY = qMin(300, 3*frame.height()/4);
QPixmap tile = globalHelper->verticalGradient(color, splitY);
QPixmap tile = helper_.verticalGradient(color, splitY);
painter.drawTiledPixmap(QRect(0, 0, frame.width(), titleHeight + TFRAMESIZE), tile);
painter.drawTiledPixmap(QRect(0, 0, LFRAMESIZE, splitY), tile);
painter.fillRect(0, splitY, LFRAMESIZE, frame.height() - splitY, globalHelper->backgroundBottomColor(color));
painter.fillRect(0, splitY, LFRAMESIZE, frame.height() - splitY, helper_.backgroundBottomColor(color));
painter.drawTiledPixmap(QRect(frame.width()-RFRAMESIZE, 0,
RFRAMESIZE, splitY), tile,
QPoint(frame.width()-RFRAMESIZE, 0));
painter.fillRect(frame.width()-RFRAMESIZE, splitY, RFRAMESIZE, frame.height() - splitY, globalHelper->backgroundBottomColor(color));
painter.fillRect(frame.width()-RFRAMESIZE, splitY, RFRAMESIZE, frame.height() - splitY, helper_.backgroundBottomColor(color));
painter.fillRect(0, frame.height() - BFRAMESIZE, frame.width(), BFRAMESIZE, globalHelper->backgroundBottomColor(color));
painter.fillRect(0, frame.height() - BFRAMESIZE, frame.width(), BFRAMESIZE, helper_.backgroundBottomColor(color));
int radialW = qMin(600, frame.width());
tile = globalHelper->radialGradient(color, radialW);
tile = helper_.radialGradient(color, radialW);
QRect radialRect = QRect((frame.width() - radialW) / 2, 0, radialW, 64);
painter.drawPixmap(radialRect, tile);

View File

@ -31,7 +31,7 @@
#include <kcommondecoration.h>
#include "oxygenbutton.h"
#include "lib/helper.h"
class QPoint;
@ -56,6 +56,10 @@ public:
private:
void paintEvent(QPaintEvent *e);
void doShape();
protected:
friend class OxygenButton;
OxygenHelper &helper_;
};