summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/painting/qunifiedtoolbarsurface_mac.cpp27
-rw-r--r--src/gui/painting/qunifiedtoolbarsurface_mac_p.h1
-rw-r--r--src/gui/widgets/qmainwindowlayout_mac.mm15
-rw-r--r--src/gui/widgets/qmainwindowlayout_p.h1
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;