From 862263b0ab7b69be78ee78f72afead152390bbcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Wed, 4 May 2011 09:18:59 +0200 Subject: Remove QWidget dependency in QPainter::initFrom(). --- src/gui/kernel/qwidget.cpp | 10 ++++++++++ src/gui/kernel/qwidget.h | 1 + src/gui/painting/qpaintdevice.cpp | 4 ++++ src/gui/painting/qpaintdevice.h | 1 + src/gui/painting/qpainter.cpp | 16 +++++++--------- src/gui/painting/qpainter.h | 3 ++- 6 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 58b52a734b..171a3a7e39 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -12506,6 +12506,16 @@ void QWidget::ungrabGesture(Qt::GestureType gesture) \a m is the metric to get. */ +void QWidget::init(QPainter *painter) const +{ + const QPalette &pal = palette(); + painter->d_func()->state->pen = QPen(pal.brush(foregroundRole()), 0); + painter->d_func()->state->bgBrush = pal.brush(backgroundRole()); + QFont f(font(), const_cast(this)); + painter->d_func()->state->deviceFont = f; + painter->d_func()->state->font = f; +} + /*! \fn void QWidget::setMask(const QRegion ®ion) \overload diff --git a/src/gui/kernel/qwidget.h b/src/gui/kernel/qwidget.h index d3a08a86c7..d23baee13c 100644 --- a/src/gui/kernel/qwidget.h +++ b/src/gui/kernel/qwidget.h @@ -702,6 +702,7 @@ protected: virtual void changeEvent(QEvent *); int metric(PaintDeviceMetric) const; + void init(QPainter *painter) const; virtual void inputMethodEvent(QInputMethodEvent *); public: diff --git a/src/gui/painting/qpaintdevice.cpp b/src/gui/painting/qpaintdevice.cpp index f2ba7f0744..65be030f28 100644 --- a/src/gui/painting/qpaintdevice.cpp +++ b/src/gui/painting/qpaintdevice.cpp @@ -67,6 +67,10 @@ int QPaintDevice::metric(PaintDeviceMetric) const } #endif +void QPaintDevice::init(QPainter *painter) const +{ +} + Q_GUI_EXPORT int qt_paint_device_metric(const QPaintDevice *device, QPaintDevice::PaintDeviceMetric metric) { return device->metric(metric); diff --git a/src/gui/painting/qpaintdevice.h b/src/gui/painting/qpaintdevice.h index ad060482f0..24b6d81ae1 100644 --- a/src/gui/painting/qpaintdevice.h +++ b/src/gui/painting/qpaintdevice.h @@ -105,6 +105,7 @@ public: protected: QPaintDevice(); virtual int metric(PaintDeviceMetric metric) const; + virtual void init(QPainter *painter) const; ushort painters; // refcount diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index 988a8782b9..c14dff2b42 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -1556,25 +1556,23 @@ bool QPainter::isActive() const /*! Initializes the painters pen, background and font to the same as - the given \a widget. This function is called automatically when the - painter is opened on a QWidget. + the given \a paint device. + + \obsolete \sa begin(), {QPainter#Settings}{Settings} */ -void QPainter::initFrom(const QWidget *widget) +void QPainter::initFrom(const QPaintDevice *device) { - Q_ASSERT_X(widget, "QPainter::initFrom(const QWidget *widget)", "Widget cannot be 0"); + Q_ASSERT_X(device, "QPainter::initFrom(const QPaintDevice *device)", "QPaintDevice cannot be 0"); Q_D(QPainter); if (!d->engine) { qWarning("QPainter::initFrom: Painter not active, aborted"); return; } - const QPalette &pal = widget->palette(); - d->state->pen = QPen(pal.brush(widget->foregroundRole()), 0); - d->state->bgBrush = pal.brush(widget->backgroundRole()); - d->state->deviceFont = QFont(widget->font(), const_cast (widget)); - d->state->font = d->state->deviceFont; + device->init(this); + if (d->extended) { d->extended->penChanged(); } else if (d->engine) { diff --git a/src/gui/painting/qpainter.h b/src/gui/painting/qpainter.h index 0ada62acf9..9ef39e8ab7 100644 --- a/src/gui/painting/qpainter.h +++ b/src/gui/painting/qpainter.h @@ -133,7 +133,7 @@ public: bool end(); bool isActive() const; - void initFrom(const QWidget *widget); + void initFrom(const QPaintDevice *device); enum CompositionMode { CompositionMode_SourceOver, @@ -470,6 +470,7 @@ private: QScopedPointer d_ptr; + friend class QWidget; friend class QFontEngine; friend class QFontEngineBox; friend class QFontEngineFT; -- cgit v1.2.3