📄 qdecorationwindows_qws.cpp
字号:
/******************************************************************************** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.**** This file is part of the QtGui module of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file. Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://trolltech.com/products/qt/licenses/licensing/opensource/**** If you are unsure which license is appropriate for your use, please** review the following information:** http://trolltech.com/products/qt/licenses/licensing/licensingoverview** or contact the sales department at sales@trolltech.com.**** In addition, as a special exception, Trolltech gives you certain** additional rights. These rights are described in the Trolltech GPL** Exception version 1.0, which can be found at** http://www.trolltech.com/products/qt/gplexception/ and in the file** GPL_EXCEPTION.txt in this package.**** In addition, as a special exception, Trolltech, as the sole copyright** holder for Qt Designer, grants users of the Qt/Eclipse Integration** plug-in the right for the Qt/Eclipse Integration to link to** functionality provided by Qt Designer and its related libraries.**** Trolltech reserves all rights not expressly granted herein.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include <qapplication.h>#include <qwidget.h>#include <qpainter.h>#include <qdrawutil.h>#include "qdecorationwindows_qws.h"#if !defined(QT_NO_QWS_DECORATION_WINDOWS) || defined(QT_PLUGIN)#ifndef QT_NO_IMAGEFORMAT_XPM/* XPM */static const char * const win_close_xpm[] = {"16 16 4 1"," s None c None",". c #000000","X c #FFFFFF","Y c #707070"," "," "," "," Y. .Y "," .. .. "," .. .. "," .YY. "," Y..Y "," .YY. "," .. .. "," .. .. "," Y. .Y "," "," "," "," "};static const char * const win_help_xpm[] = {"16 16 3 1"," s None c None",". c #ffffff","X c #000000"," "," "," "," XXXXXX "," XX XX "," XX XX "," XX "," XX "," XX "," XX "," "," XX "," XX "," "," "," "};static const char * const win_maximize_xpm[] = {"16 16 4 1"," s None c None",". c #000000","X c #FFFFFF","Y c #707070"," "," "," "," .......... "," .......... "," . . "," . . "," . . "," . . "," . . "," . . "," .......... "," "," "," "," "};static const char * const win_minimize_xpm[] = {"16 16 4 1"," s None c None",". c #000000","X c #FFFFFF","Y c #707070"," "," "," "," "," "," "," "," "," "," "," ........ "," ........ "," "," "," "," "};static const char * const win_normalize_xpm[] = {"16 16 4 1"," s None c None",". c #000000","X c #FFFFFF","Y c #707070"," "," "," ......... "," ......... "," . . "," . . "," ......... . "," ......... . "," . . . "," . .... "," . . "," . . "," ......... "," "," "," "};#endif // QT_NO_IMAGEFORMAT_XPMQDecorationWindows::QDecorationWindows() : QDecorationDefault(){ menu_width = 16; help_width = 18; minimize_width = 18; maximize_width = 18; close_width = 18;}QDecorationWindows::~QDecorationWindows(){}const char **QDecorationWindows::xpmForRegion(int reg){#ifdef QT_NO_IMAGEFORMAT_XPM Q_UNUSED(reg);#else switch(reg) { case Close: return (const char **)win_close_xpm; case Help: return (const char **)win_help_xpm; case Minimize: return (const char **)win_minimize_xpm; case Maximize: return (const char **)win_maximize_xpm; case Normalize: return (const char **)win_normalize_xpm; default: return QDecorationDefault::xpmForRegion(reg); }#endif return 0;}QRegion QDecorationWindows::region(const QWidget *widget, const QRect &rect, int type){ Qt::WindowFlags flags = widget->windowFlags(); bool hasTitle = flags & Qt::WindowTitleHint; bool hasSysMenu = flags & Qt::WindowSystemMenuHint; bool hasContextHelp = flags & Qt::WindowContextHelpButtonHint; bool hasMinimize = flags & Qt::WindowMinimizeButtonHint; bool hasMaximize = flags & Qt::WindowMaximizeButtonHint; const QFontMetrics fontMetrics = QApplication::fontMetrics(); int titleHeight = hasTitle ? qMax(20, fontMetrics.lineSpacing()) : 0; int state = widget->windowState(); bool isMinimized = state & Qt::WindowMinimized; bool isMaximized = state & Qt::WindowMaximized; QRegion region; switch (type) { case Menu: { if (hasSysMenu) { region = QRect(rect.left() + 2, rect.top() - titleHeight, menu_width, titleHeight); } } break; case Title: { QRect r(rect.left() + (hasSysMenu ? menu_width + 4: 0), rect.top() - titleHeight, rect.width() - (hasSysMenu ? menu_width : 0) - close_width - (hasMaximize ? maximize_width : 0) - (hasMinimize ? minimize_width : 0) - (hasContextHelp ? help_width : 0) - 3, titleHeight); if (r.width() > 0) region = r; } break; case Help: { if (hasContextHelp) { QRect r(rect.right() - close_width - (hasMaximize ? maximize_width : 0) - (hasMinimize ? minimize_width : 0) - help_width - 3, rect.top() - titleHeight, help_width, titleHeight); if (r.left() > rect.left() + titleHeight) region = r; } } break; case Minimize: { if (hasMinimize && !isMinimized) { QRect r(rect.right() - close_width - (hasMaximize ? maximize_width : 0) - minimize_width - 3, rect.top() - titleHeight, minimize_width, titleHeight); if (r.left() > rect.left() + titleHeight) region = r; } } break; case Maximize: { if (hasMaximize && !isMaximized) { QRect r(rect.right() - close_width - maximize_width - 3, rect.top() - titleHeight, maximize_width, titleHeight); if (r.left() > rect.left() + titleHeight) region = r; } } break; case Normalize: { if (hasMinimize && isMinimized) { QRect r(rect.right() - close_width - (hasMaximize ? maximize_width : 0) - minimize_width - 3, rect.top() - titleHeight, minimize_width, titleHeight); if (r.left() > rect.left() + titleHeight) region = r; } else if (hasMaximize && isMaximized) { QRect r(rect.right() - close_width - maximize_width - 3, rect.top() - titleHeight, maximize_width, titleHeight); if (r.left() > rect.left() + titleHeight) region = r; } } break; case Close: { QRect r(rect.right() - close_width - 1, rect.top() - titleHeight, close_width, titleHeight); if (r.left() > rect.left() + titleHeight) region = r; } break; default: region = QDecorationDefault::region(widget, rect, type); break; } return region;}bool QDecorationWindows::paint(QPainter *painter, const QWidget *widget, int decorationRegion, DecorationState state){ if (decorationRegion == None) return false; const QRect titleRect = QDecoration::region(widget, Title).boundingRect(); const QPalette pal = QApplication::palette(); QRegion oldClipRegion = painter->clipRegion(); bool paintAll = (decorationRegion == int(All)); if ((paintAll || decorationRegion & Title && titleRect.width() > 0) && state == Normal && (widget->windowFlags() & Qt::WindowTitleHint) ) { painter->setClipRegion(oldClipRegion); QColor fromBrush, toBrush; QPen titlePen; if (widget == qApp->activeWindow() || qApp->activeWindow() == qApp->activePopupWidget()) { fromBrush = pal.color(QPalette::Highlight); titlePen = pal.color(QPalette::HighlightedText); } else { fromBrush = pal.color(QPalette::Window); titlePen = pal.color(QPalette::Text); } toBrush = fromBrush.lighter(300); painter->setPen(Qt::NoPen); QPoint p1(titleRect.x(), titleRect.y() + titleRect.height()/2); QPoint p2(titleRect.right(), titleRect.y() + titleRect.height()/2); QLinearGradient lg(p1, p2); lg.setColorAt(0, fromBrush); lg.setColorAt(1, toBrush); painter->fillRect(titleRect, lg); painter->setPen(titlePen); painter->drawText(titleRect, Qt::AlignVCenter, widget->windowTitle()); decorationRegion ^= Title; } return QDecorationDefault::paint(painter, widget, decorationRegion, state);}void QDecorationWindows::paintButton(QPainter *painter, const QWidget *widget, int buttonRegion, DecorationState state, const QPalette &pal){ QBrush fromBrush, toBrush; QPen titlePen; if (widget == qApp->activeWindow() || qApp->activeWindow() == qApp->activePopupWidget()) { fromBrush = pal.brush(QPalette::Highlight); titlePen = pal.color(QPalette::HighlightedText); } else { fromBrush = pal.brush(QPalette::Window); titlePen = pal.color(QPalette::Text); } toBrush = fromBrush.color().lighter(300); QRect brect(QDecoration::region(widget, buttonRegion).boundingRect()); if (buttonRegion != Close && buttonRegion != Menu) painter->fillRect(brect, toBrush); else painter->fillRect(brect.x() - 2, brect.y(), brect.width() + 4, brect.height(), buttonRegion == Menu ? fromBrush : toBrush); int xoff = 1; int yoff = 2; const QPixmap pm = pixmapFor(widget, buttonRegion, xoff, yoff); if (buttonRegion != Menu) { if (state & Normal) { qDrawWinPanel(painter, brect.x(), brect.y() + 2, brect.width(), brect.height() - 4, pal, false, &pal.brush(QPalette::Window)); } else if (state & Pressed) { qDrawWinPanel(painter, brect.x(), brect.y() + 2, brect.width(), brect.height() - 4, pal, true, &pal.brush(QPalette::Window)); ++xoff; ++yoff; } } else { xoff = 0; yoff = 2; } if (!pm.isNull()) painter->drawPixmap(brect.x() + xoff, brect.y() + yoff, pm);}#endif // QT_NO_QWS_DECORATION_WINDOWS || QT_PLUGIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -