Qt 4.8
qt-4.8.6
src
gui
painting
qunifiedtoolbarsurface_mac_p.h
Go to the documentation of this file.
1
/****************************************************************************
2
**
3
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
4
** Contact: http://www.qt-project.org/legal
5
**
6
** This file is part of the QtGui module of the Qt Toolkit.
7
**
8
** $QT_BEGIN_LICENSE:LGPL$
9
** Commercial License Usage
10
** Licensees holding valid commercial Qt licenses may use this file in
11
** accordance with the commercial license agreement provided with the
12
** Software or, alternatively, in accordance with the terms contained in
13
** a written agreement between you and Digia. For licensing terms and
14
** conditions see http://qt.digia.com/licensing. For further information
15
** use the contact form at http://qt.digia.com/contact-us.
16
**
17
** GNU Lesser General Public License Usage
18
** Alternatively, this file may be used under the terms of the GNU Lesser
19
** General Public License version 2.1 as published by the Free Software
20
** Foundation and appearing in the file LICENSE.LGPL included in the
21
** packaging of this file. Please review the following information to
22
** ensure the GNU Lesser General Public License version 2.1 requirements
23
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24
**
25
** In addition, as a special exception, Digia gives you certain additional
26
** rights. These rights are described in the Digia Qt LGPL Exception
27
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28
**
29
** GNU General Public License Usage
30
** Alternatively, this file may be used under the terms of the GNU
31
** General Public License version 3.0 as published by the Free Software
32
** Foundation and appearing in the file LICENSE.GPL included in the
33
** packaging of this file. Please review the following information to
34
** ensure the GNU General Public License version 3.0 requirements will be
35
** met: http://www.gnu.org/copyleft/gpl.html.
36
**
37
**
38
** $QT_END_LICENSE$
39
**
40
****************************************************************************/
41
42
#ifndef QUNIFIEDTOOLBARSURFACE_MAC_P_H
43
#define QUNIFIEDTOOLBARSURFACE_MAC_P_H
44
45
//
46
// W A R N I N G
47
// -------------
48
//
49
// This file is not part of the Qt API. It exists purely as an
50
// implementation detail. This header file may change from version to
51
// version without notice, or even be removed.
52
//
53
// We mean it.
54
//
55
56
#include <private/qwindowsurface_raster_p.h>
57
#include <QWidget>
58
#include <QToolBar>
59
#include <private/qwidget_p.h>
60
#include <private/qnativeimage_p.h>
61
62
#ifdef QT_MAC_USE_COCOA
63
64
QT_BEGIN_NAMESPACE
65
66
class
QNativeImage
;
67
68
//
69
// This is the implementation of the unified toolbar on Mac OS X
70
// with the graphics system raster.
71
//
72
// General idea:
73
// -------------
74
// We redirect the painting of widgets inside the unified toolbar
75
// to a special window surface, the QUnifiedToolbarSurface.
76
// We need a separate window surface because the unified toolbar
77
// is out of the content view.
78
// The input system is the same as for the unified toolbar with the
79
// native (CoreGraphics) engine.
80
//
81
// Execution flow:
82
// ---------------
83
// The unified toolbar is triggered by QMainWindow::setUnifiedTitleAndToolBarOnMac().
84
// It calls QMainWindowLayout::insertIntoMacToolbar() which will
85
// set all the appropriate variables (offsets, redirection, ...).
86
// When Qt tells a widget to repaint, QWidgetPrivate::drawWidget()
87
// checks if the widget is inside the unified toolbar and exits without
88
// painting is that is the case.
89
// We trigger the rendering of the unified toolbar in QWidget::repaint()
90
// and QWidget::update().
91
// We keep track of flush requests via "flushRequested" variable. That
92
// allow flush() to be a no-op if no repaint occurred for a widget.
93
// We rely on the needsDisplay: and drawRect: mecanism for drawing our
94
// content into the graphics context.
95
//
96
// Notes:
97
// ------
98
// The painting of items inside the unified toolbar is expensive.
99
// Too many repaints will drastically slow down the whole application.
100
//
101
102
class
QUnifiedToolbarSurfacePrivate
103
{
104
public
:
105
QNativeImage
*image;
106
uint
inSetGeometry : 1;
107
};
108
109
class
Q_GUI_EXPORT
QUnifiedToolbarSurface :
public
QRasterWindowSurface
110
{
111
public
:
112
QUnifiedToolbarSurface(
QWidget
*
widget
);
113
~QUnifiedToolbarSurface();
114
115
void
flush
(
QWidget
*
widget
);
116
void
flush
(
QWidget
*
widget
,
const
QRegion
®ion,
const
QPoint
&offset);
117
void
setGeometry(
const
QRect
&rect);
118
void
beginPaint(
const
QRegion
&rgn);
119
void
insertToolbar(
QWidget
*
toolbar
,
const
QPoint
&offset);
120
void
removeToolbar(
QToolBar
*
toolbar
);
121
void
updateToolbarOffset(
QWidget
*
widget
);
122
void
renderToolbar(
QWidget
*
widget
,
bool
forceFlush =
false
);
123
void
recursiveRedirect(
QObject
*
widget
,
QWidget
*parent_toolbar,
const
QPoint
&offset);
124
125
QPaintDevice
*paintDevice();
126
CGContextRef
imageContext();
127
128
private
:
129
void
prepareBuffer(
QImage::Format
format
,
QWidget
*
widget
);
130
void
recursiveRemoval(
QObject
*
object
);
131
132
Q_DECLARE_PRIVATE
(QUnifiedToolbarSurface)
133
QScopedPointer<QUnifiedToolbarSurfacePrivate>
d_ptr;
134
};
135
136
QT_END_NAMESPACE
137
138
#endif // QT_MAC_USE_COCOA
139
140
#endif // QUNIFIEDTOOLBARSURFACE_MAC_P_H
QImage::Format
Format
The following image formats are available in Qt.
Definition:
qimage.h:91
QT_END_NAMESPACE
#define QT_END_NAMESPACE
This macro expands to.
Definition:
qglobal.h:90
widget
QPointer< QWidget > widget
Definition:
qapplication_mac.mm:879
Q_GUI_EXPORT
#define Q_GUI_EXPORT
Definition:
qglobal.h:1450
QWidget
The QWidget class is the base class of all user interface objects.
Definition:
qwidget.h:150
QObject
The QObject class is the base class of all Qt objects.
Definition:
qobject.h:111
toolbar
NSToolbar * toolbar
Definition:
qcocoasharedwindowmethods_mac_p.h:584
QScopedPointer
The QScopedPointer class stores a pointer to a dynamically allocated object, and deletes it upon dest...
Definition:
qscopedpointer.h:87
QT_BEGIN_NAMESPACE
#define QT_BEGIN_NAMESPACE
This macro expands to.
Definition:
qglobal.h:89
QPaintDevice
Definition:
qpaintdevice.h:60
QNativeImage
Definition:
qnativeimage_p.h:73
QToolBar
The QToolBar class provides a movable panel that contains a set of controls.
Definition:
qtoolbar.h:62
uint
unsigned int uint
Definition:
qglobal.h:996
QRegion
The QRegion class specifies a clip region for a painter.
Definition:
qregion.h:68
QRasterWindowSurface
Definition:
qwindowsurface_raster_p.h:101
format
format
Definition:
qprintengine_ps.cpp:286
QPoint
The QPoint class defines a point in the plane using integer precision.
Definition:
qpoint.h:53
QRect
The QRect class defines a rectangle in the plane using integer precision.
Definition:
qrect.h:58
flush
Q_CORE_EXPORT QTextStream & flush(QTextStream &s)
Q_DECLARE_PRIVATE
#define Q_DECLARE_PRIVATE(Class)
Definition:
qglobal.h:2467
CGContextRef
struct CGContext * CGContextRef
Definition:
qmacdefines_mac.h:155
Qt 4.8 Source Code Browser