diff options
-rw-r--r-- | src/gui/painting/qunifiedtoolbarsurface_mac.cpp | 27 | ||||
-rw-r--r-- | src/gui/painting/qunifiedtoolbarsurface_mac_p.h | 1 | ||||
-rw-r--r-- | src/gui/widgets/qmainwindowlayout_mac.mm | 15 | ||||
-rw-r--r-- | src/gui/widgets/qmainwindowlayout_p.h | 1 |
4 files changed, 36 insertions, 8 deletions
diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp index ab05dbd..3590993 100644 --- a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp +++ b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp @@ -42,6 +42,7 @@ #include "qunifiedtoolbarsurface_mac_p.h" #include <private/qt_cocoa_helpers_mac_p.h> #include <private/qbackingstore_p.h> +#include <private/qmainwindowlayout_p.h> #include <QDebug> @@ -90,7 +91,6 @@ void QUnifiedToolbarSurface::insertToolbar(QWidget *toolbar, const QPoint &offse { setGeometry(QRect(QPoint(0, 0), QSize(offset.x() + toolbar->width(), 100))); // FIXME recursiveRedirect(toolbar, offset); -// toolbar->d_func()->toolbar_offset = offset; } void QUnifiedToolbarSurface::setGeometry(const QRect &rect) @@ -101,6 +101,8 @@ void QUnifiedToolbarSurface::setGeometry(const QRect &rect) if (d->image == 0 || d->image->width() < rect.width() || d->image->height() < rect.height()) prepareBuffer(QImage::Format_ARGB32_Premultiplied, window()); d->inSetGeometry = false; + + // FIXME: set unified toolbar height. } void QUnifiedToolbarSurface::beginPaint(const QRegion &rgn) @@ -114,10 +116,18 @@ void QUnifiedToolbarSurface::beginPaint(const QRegion &rgn) } } +void QUnifiedToolbarSurface::updateToolbarOffset(QWidget *widget) +{ + QMainWindowLayout *mlayout = qobject_cast<QMainWindowLayout*> (widget->window()->layout()); + mlayout->updateUnifiedToolbarOffset(); +} + void QUnifiedToolbarSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint &offset) { Q_D(QUnifiedToolbarSurface); + QRegion flushingRegion(widget->rect()); + if (!d->image || rgn.rectCount() == 0) { return; } @@ -132,24 +142,29 @@ void QUnifiedToolbarSurface::flush(QWidget *widget, const QRegion &rgn, const QP qt_mac_display(widget); return; } else { + // We render the content of the toolbar in the surface. + updateToolbarOffset(widget); + QRect beginPaintRect(widget->d_func()->toolbar_offset.x(), widget->d_func()->toolbar_offset.y(), widget->geometry().width(), widget->geometry().height()); + QRegion beginPaintRegion(beginPaintRect); + context = widget->d_func()->cgContext; + beginPaint(beginPaintRegion); widget->render(widget->d_func()->unifiedSurface->paintDevice(), widget->d_func()->toolbar_offset, QRegion(), QWidget::DrawChildren); } CGContextSaveGState(context); - int areaX = widget->geometry().x() + widget->d_func()->toolbar_offset.x(); - int areaY = widget->geometry().y() + widget->d_func()->toolbar_offset.y(); + int areaX = widget->d_func()->toolbar_offset.x(); + int areaY = widget->d_func()->toolbar_offset.y(); int areaWidth = widget->geometry().width(); int areaHeight = widget->geometry().height(); const CGRect area = CGRectMake(areaX, areaY, areaWidth, areaHeight); // Clip to region. - const QVector<QRect> &rects = rgn.rects(); + const QVector<QRect> &rects = flushingRegion.rects(); for (int i = 0; i < rects.size(); ++i) { const QRect &rect = rects.at(i); - // CGContextAddRect(context, CGRectMake(rect.x(), rect.y(), rect.width(), rect.height())); - CGContextAddRect(context, CGRectMake(0, 0, 1000, 1000)); //FIXME: Set correct size. + CGContextAddRect(context, CGRectMake(rect.x(), rect.y(), rect.width(), rect.height())); } CGContextAddRect(context, area); CGContextClip(context); diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac_p.h b/src/gui/painting/qunifiedtoolbarsurface_mac_p.h index 4d72ff9..3bc0404 100644 --- a/src/gui/painting/qunifiedtoolbarsurface_mac_p.h +++ b/src/gui/painting/qunifiedtoolbarsurface_mac_p.h @@ -85,6 +85,7 @@ public: private: QPaintDevice *paintDevice(); + void updateToolbarOffset(QWidget *widget); void prepareBuffer(QImage::Format format, QWidget *widget); void recursiveRedirect(QObject *widget, const QPoint &offset); diff --git a/src/gui/widgets/qmainwindowlayout_mac.mm b/src/gui/widgets/qmainwindowlayout_mac.mm index 126cc4a..dfde799 100644 --- a/src/gui/widgets/qmainwindowlayout_mac.mm +++ b/src/gui/widgets/qmainwindowlayout_mac.mm @@ -43,6 +43,7 @@ #include <qtoolbar.h> #include <private/qtoolbarlayout_p.h> #include <private/qt_cocoa_helpers_mac_p.h> +#include <private/qtoolbar_p.h> #ifndef QT_MAC_USE_COCOA #include <Carbon/Carbon.h> @@ -473,6 +474,16 @@ void QMainWindowLayout::insertIntoMacToolbar(QToolBar *before, QToolBar *toolbar #endif } +void QMainWindowLayout::updateUnifiedToolbarOffset() +{ + QPoint offset(0, 0); + + for (int i = 1; i < qtoolbarsInUnifiedToolbarList.length(); ++i) { + offset.setX(offset.x() + qtoolbarsInUnifiedToolbarList.at(i - 1)->size().width()); + qtoolbarsInUnifiedToolbarList.at(i)->d_func()->toolbar_offset = offset; + } +} + void QMainWindowLayout::removeFromMacToolbar(QToolBar *toolbar) { QHash<void *, QToolBar *>::iterator it = unifiedToolbarHash.begin(); @@ -546,11 +557,11 @@ void QMainWindowLayout::fixSizeInUnifiedToolbar(QToolBar *tb) const QMacCocoaAutoReleasePool pool; QWidgetItem layoutItem(tb); QSize size = layoutItem.maximumSize(); - NSSize nssize = NSMakeSize(size.width(), size.height() - 2); + NSSize nssize = NSMakeSize(size.width(), size.height()); [item setMaxSize:nssize]; size = layoutItem.minimumSize(); nssize.width = size.width(); - nssize.height = size.height() - 2; + nssize.height = size.height(); [item setMinSize:nssize]; } #else diff --git a/src/gui/widgets/qmainwindowlayout_p.h b/src/gui/widgets/qmainwindowlayout_p.h index a372216..e457cbc 100644 --- a/src/gui/widgets/qmainwindowlayout_p.h +++ b/src/gui/widgets/qmainwindowlayout_p.h @@ -335,6 +335,7 @@ public: QHash<QToolBar *, ToolBarSaveState> toolbarSaveState; QHash<QString, QToolBar *> cocoaItemIDToToolbarHash; void insertIntoMacToolbar(QToolBar *before, QToolBar *after); + void updateUnifiedToolbarOffset(); void removeFromMacToolbar(QToolBar *toolbar); void cleanUpMacToolbarItems(); void fixSizeInUnifiedToolbar(QToolBar *tb) const; |