diff options
Diffstat (limited to 'examples/qws/simpledecoration/mydecoration.cpp')
-rw-r--r-- | examples/qws/simpledecoration/mydecoration.cpp | 374 |
1 files changed, 0 insertions, 374 deletions
diff --git a/examples/qws/simpledecoration/mydecoration.cpp b/examples/qws/simpledecoration/mydecoration.cpp deleted file mode 100644 index 7b324e18c1..0000000000 --- a/examples/qws/simpledecoration/mydecoration.cpp +++ /dev/null @@ -1,374 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/ -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtWidgets> -#include "mydecoration.h" - -/* XPM */ -static const char * const _close_button[] = { -"16 16 3 1", -" c none", -". c #ffafaf", -"x c #000000", -" ", -" xxxxxxxxxxxxxx ", -" x............x ", -" x.x........x.x ", -" x..x......x..x ", -" x...x....x...x ", -" x....x..x....x ", -" x.....xx.....x ", -" x.....xx.....x ", -" x....x..x....x ", -" x...x....x...x ", -" x..x......x..x ", -" x.x........x.x ", -" x............x ", -" xxxxxxxxxxxxxx ", -" "}; - -static const char * const _normalize_button[] = { -"16 16 4 1", -" c none", -". c #dfdfff", -"o c #7f7f7f", -"x c #000000", -" ", -" xxxxxxxxxxxxxx ", -" xx...........x ", -" x.x..........x ", -" x..x..x......x ", -" x...xxx......x ", -" x...xxx......x ", -" x..xxxx......x ", -" x............x ", -" x.......xxxx.x ", -" x.......x..x.x ", -" x.......x..x.x ", -" x.......xxxx.x ", -" x............x ", -" xxxxxxxxxxxxxx ", -" "}; - -static const char * const _maximize_button[] = { -"16 16 4 1", -" c none", -". c #dfdfff", -"o c #7f7f7f", -"x c #000000", -" ", -" xxxxxxxxxxxxxx ", -" x............x ", -" x.......xxxx.x ", -" x........xxx.x ", -" x........xxx.x ", -" x.......x..x.x ", -" x......x.....x ", -" x.....x......x ", -" x.oooo.......x ", -" x.o..o.......x ", -" x.o..o.......x ", -" x.oooo.......x ", -" x............x ", -" xxxxxxxxxxxxxx ", -" "}; - -static const char * const _help_button[] = { -"16 16 3 1", -" c none", -". c #afffdf", -"x c #000000", -" ", -" xxxxxxxxxxxxxx ", -" x............x ", -" x....xxxx....x ", -" x..xx....xx..x ", -" x.xx......xx.x ", -" x.xx......xx.x ", -" x........xx..x ", -" x......xx....x ", -" x.....xx.....x ", -" x.....xx.....x ", -" x............x ", -" x.....xx.....x ", -" x............x ", -" xxxxxxxxxxxxxx ", -" "}; - -//! [constructor start] -MyDecoration::MyDecoration() - : QDecorationDefault() -{ - border = 4; - titleHeight = 24; - buttonWidth = 20; - buttonHeight = 20; - buttonMargin = 2; - buttonHints << Qt::Window - << Qt::WindowMaximizeButtonHint - << Qt::WindowContextHelpButtonHint; - //! [constructor start] - - //! [map window flags to decoration regions] - buttonHintMap[Qt::Window] = Close; - buttonHintMap[Qt::WindowMaximizeButtonHint] = Maximize; - buttonHintMap[Qt::WindowContextHelpButtonHint] = Help; - //! [map window flags to decoration regions] - - //! [map decoration regions to pixmaps] - normalButtonPixmaps[Close] = QPixmap(_close_button); - normalButtonPixmaps[Maximize] = QPixmap(_maximize_button); - normalButtonPixmaps[Normalize] = QPixmap(_normalize_button); - normalButtonPixmaps[Help] = QPixmap(_help_button); - - maximizedButtonPixmaps[Close] = QPixmap(_close_button); - maximizedButtonPixmaps[Maximize] = QPixmap(_normalize_button); - maximizedButtonPixmaps[Normalize] = QPixmap(_normalize_button); - maximizedButtonPixmaps[Help] = QPixmap(_help_button); - //! [map decoration regions to pixmaps] - - //! [constructor end] - stateRegions << Close << Maximize << Help; -} -//! [constructor end] - -//! [region start] -QRegion MyDecoration::region(const QWidget *widget, const QRect &insideRect, - int decorationRegion) -{ - //! [region start] - //! [calculate the positions of buttons based on the window flags used] - QHash<DecorationRegion, int> buttons; - Qt::WindowFlags flags = widget->windowFlags(); - int dx = -buttonMargin - buttonWidth; - - foreach (Qt::WindowType button, buttonHints) { - if (flags & button) { - int x = (buttons.size() + 1) * dx; - buttons[buttonHintMap[button]] = x; - } - } - //! [calculate the positions of buttons based on the window flags used] - - //! [calculate the extent of the title] - int titleRightMargin = buttons.size() * dx; - - QRect outsideRect(insideRect.left() - border, - insideRect.top() - titleHeight - border, - insideRect.width() + 2 * border, - insideRect.height() + titleHeight + 2 * border); - //! [calculate the extent of the title] - - //! [check for all regions] - QRegion region; - - if (decorationRegion == All) { - region += QRegion(outsideRect) - QRegion(insideRect); - return region; - } - //! [check for all regions] - - //! [compose a region based on the decorations specified] - if (decorationRegion & Title) { - QRect rect = outsideRect.adjusted(border, border, -border, 0); - rect.setHeight(titleHeight); - - // Adjust the width to accommodate buttons. - rect.setWidth(qMax(0, rect.width() + titleRightMargin)); - region += rect; - } - if (decorationRegion & Top) { - QRect rect = outsideRect.adjusted(border, 0, -border, 0); - rect.setHeight(border); - region += rect; - } - if (decorationRegion & Left) { - QRect rect = outsideRect.adjusted(0, border, 0, -border); - rect.setWidth(border); - region += rect; - } - if (decorationRegion & Right) { - QRect rect = outsideRect.adjusted(0, border, 0, -border); - rect.setLeft(rect.right() + 1 - border); - region += rect; - } - if (decorationRegion & Bottom) { - QRect rect = outsideRect.adjusted(border, 0, -border, 0); - rect.setTop(rect.bottom() + 1 - border); - region += rect; - } - if (decorationRegion & TopLeft) { - QRect rect = outsideRect; - rect.setWidth(border); - rect.setHeight(border); - region += rect; - } - if (decorationRegion & TopRight) { - QRect rect = outsideRect; - rect.setLeft(rect.right() + 1 - border); - rect.setHeight(border); - region += rect; - } - if (decorationRegion & BottomLeft) { - QRect rect = outsideRect; - rect.setWidth(border); - rect.setTop(rect.bottom() + 1 - border); - region += rect; - } - if (decorationRegion & BottomRight) { - QRect rect = outsideRect; - rect.setLeft(rect.right() + 1 - border); - rect.setTop(rect.bottom() + 1 - border); - region += rect; - } - //! [compose a region based on the decorations specified] - - //! [add a region for each button only if it is present] - foreach (QDecoration::DecorationRegion testRegion, stateRegions) { - if (decorationRegion & testRegion and buttons.contains(testRegion)) { - // Inside the title rectangle - QRect rect = outsideRect.adjusted(border, border, -border, 0); - rect.setHeight(titleHeight); - - dx = buttons[testRegion]; - rect.setLeft(rect.right() + 1 + dx); - rect.setWidth(buttonWidth + buttonMargin); - region += rect; - } - } - //! [add a region for each button only if it is present] - - //! [region end] - return region; -} -//! [region end] - -//! [paint start] -bool MyDecoration::paint(QPainter *painter, const QWidget *widget, - int decorationRegion, DecorationState state) -{ - if (decorationRegion == None) - return false; - //! [paint start] - - //! [paint different regions] - bool handled = false; - - QPalette palette = QApplication::palette(); - QHash<DecorationRegion, QPixmap> buttonPixmaps; - - if (widget->windowState() == Qt::WindowMaximized) - buttonPixmaps = maximizedButtonPixmaps; - else - buttonPixmaps = normalButtonPixmaps; - - if (decorationRegion & Title) { - QRect rect = QDecoration::region(widget, Title).boundingRect(); - painter->fillRect(rect, palette.brush(QPalette::Base)); - painter->save(); - painter->setPen(QPen(palette.color(QPalette::Text))); - painter->drawText(rect, Qt::AlignCenter, widget->windowTitle()); - painter->restore(); - handled = true; - } - if (decorationRegion & Top) { - QRect rect = QDecoration::region(widget, Top).boundingRect(); - painter->fillRect(rect, palette.brush(QPalette::Dark)); - handled = true; - } - if (decorationRegion & Left) { - QRect rect = QDecoration::region(widget, Left).boundingRect(); - painter->fillRect(rect, palette.brush(QPalette::Dark)); - handled = true; - } - if (decorationRegion & Right) { - QRect rect = QDecoration::region(widget, Right).boundingRect(); - painter->fillRect(rect, palette.brush(QPalette::Dark)); - handled = true; - } - if (decorationRegion & Bottom) { - QRect rect = QDecoration::region(widget, Bottom).boundingRect(); - painter->fillRect(rect, palette.brush(QPalette::Dark)); - handled = true; - } - if (decorationRegion & TopLeft) { - QRect rect = QDecoration::region(widget, TopLeft).boundingRect(); - painter->fillRect(rect, palette.brush(QPalette::Dark)); - handled = true; - } - if (decorationRegion & TopRight) { - QRect rect = QDecoration::region(widget, TopRight).boundingRect(); - painter->fillRect(rect, palette.brush(QPalette::Dark)); - handled = true; - } - if (decorationRegion & BottomLeft) { - QRect rect = QDecoration::region(widget, BottomLeft).boundingRect(); - painter->fillRect(rect, palette.brush(QPalette::Dark)); - handled = true; - } - if (decorationRegion & BottomRight) { - QRect rect = QDecoration::region(widget, BottomRight).boundingRect(); - painter->fillRect(rect, palette.brush(QPalette::Dark)); - handled = true; - } - //! [paint different regions] - - //! [paint buttons] - int margin = (titleHeight - 16) / 2; - Qt::WindowFlags flags = widget->windowFlags(); - - foreach (DecorationRegion testRegion, stateRegions) { - if (decorationRegion & testRegion && flags & buttonHintMap.key(testRegion)) { - QRect rect = QDecoration::region( - widget, testRegion).boundingRect(); - painter->fillRect(rect, palette.brush(QPalette::Base)); - - QRect buttonRect = rect.adjusted(0, margin, -buttonMargin - margin, - -buttonMargin); - painter->drawPixmap(buttonRect.topLeft(), buttonPixmaps[testRegion]); - handled = true; - } - } - //! [paint buttons] - - //! [paint end] - return handled; -} -//! [paint end] |