Made QWindowsVistaStyle internal

We will take this opportynity to remove various QStyle specializations
from the public API in Qt5. This gives us much more freedom, for
example changing the inheritance hierarchy and even merging style
implementations (XP & Vista) later on, without worrying about BC.

=> Use QStyleFactory and/or QProxyStyle instead of creating an instance
or inheriting QWindowsVistaStyle directly.

Change-Id: I8b320036e241e877fc9bb5f4084cc6e63756cbc4
Reviewed-by: Jan Arve Sæther <jan-arve.saether@digia.com>
This commit is contained in:
J-P Nurmi 2012-11-16 16:54:43 +01:00 committed by The Qt Project
parent 146f63bea4
commit 537efea52b
7 changed files with 237 additions and 237 deletions

View File

@ -56,7 +56,7 @@
#include "qwindowsxpstyle.h"
#endif
#ifndef QT_NO_STYLE_WINDOWSVISTA
#include "qwindowsvistastyle.h"
#include "qwindowsvistastyle_p.h"
#endif
#ifndef QT_NO_STYLE_WINDOWSCE
#include "qwindowscestyle.h"

View File

@ -39,8 +39,8 @@
**
****************************************************************************/
#include "qwindowsvistastyle.h"
#include "qwindowsvistastyle_p.h"
#include "qwindowsvistastyle_p_p.h"
#include <qscreen.h>
#include <qwindow.h>
#include <private/qstyleanimation_p.h>
@ -188,6 +188,7 @@ QStyleOption *clonedAnimationStyleOption(const QStyleOption*option) {
\since 4.3
\ingroup appearance
\inmodule QtWidgets
\internal
\warning This style is only available on the Windows Vista platform
because it makes use of Windows Vista's style engine.

View File

@ -1,105 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtGui module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef QWINDOWSVISTASTYLE_H
#define QWINDOWSVISTASTYLE_H
#include <QtWidgets/qwindowsxpstyle.h>
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
#if !defined(QT_NO_STYLE_WINDOWSVISTA)
class QWindowsVistaStylePrivate;
class Q_WIDGETS_EXPORT QWindowsVistaStyle : public QWindowsXPStyle
{
Q_OBJECT
public:
QWindowsVistaStyle();
~QWindowsVistaStyle();
void drawPrimitive(PrimitiveElement element, const QStyleOption *option,
QPainter *painter, const QWidget *widget = 0) const;
void drawControl(ControlElement element, const QStyleOption *option,
QPainter *painter, const QWidget *widget) const;
void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option,
QPainter *painter, const QWidget *widget) const;
QSize sizeFromContents(ContentsType type, const QStyleOption *option,
const QSize &size, const QWidget *widget) const;
QRect subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const;
QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt,
SubControl sc, const QWidget *widget) const;
SubControl hitTestComplexControl(ComplexControl control, const QStyleOptionComplex *option,
const QPoint &pos, const QWidget *widget = 0) const;
QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = 0,
const QWidget *widget = 0) const;
QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt,
const QWidget *widget = 0) const;
int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const;
int styleHint(StyleHint hint, const QStyleOption *opt = 0, const QWidget *widget = 0,
QStyleHintReturn *returnData = 0) const;
void polish(QWidget *widget);
void unpolish(QWidget *widget);
void polish(QPalette &pal);
void polish(QApplication *app);
void unpolish(QApplication *app);
QPalette standardPalette() const;
private:
Q_DISABLE_COPY(QWindowsVistaStyle)
Q_DECLARE_PRIVATE(QWindowsVistaStyle)
friend class QStyleFactory;
};
#endif //QT_NO_STYLE_WINDOWSVISTA
QT_END_NAMESPACE
QT_END_HEADER
#endif //QWINDOWSVISTASTYLE_H

View File

@ -42,148 +42,63 @@
#ifndef QWINDOWSVISTASTYLE_P_H
#define QWINDOWSVISTASTYLE_P_H
//
// W A R N I N G
// -------------
//
// This file is not part of the Qt API. It exists for the convenience
// of qapplication_*.cpp, qwidget*.cpp and qfiledialog.cpp. This header
// file may change from version to version without notice, or even be removed.
//
// We mean it.
//
#include <QtWidgets/qwindowsxpstyle.h>
#include "qwindowsvistastyle.h"
#if !defined(QT_NO_STYLE_WINDOWSVISTA)
#include <private/qwindowsxpstyle_p.h>
#include <private/qstyleanimation_p.h>
#include <private/qpaintengine_raster_p.h>
#include <qlibrary.h>
#include <qpaintengine.h>
#include <qwidget.h>
#include <qapplication.h>
#include <qpixmapcache.h>
#include <qstyleoption.h>
#include <qpushbutton.h>
#include <qradiobutton.h>
#include <qcheckbox.h>
#include <qlineedit.h>
#include <qgroupbox.h>
#include <qtoolbutton.h>
#include <qspinbox.h>
#include <qtoolbar.h>
#include <qcombobox.h>
#include <qscrollbar.h>
#include <qprogressbar.h>
#include <qdockwidget.h>
#include <qlistview.h>
#include <qtreeview.h>
#include <qtextedit.h>
#include <qmessagebox.h>
#include <qdialogbuttonbox.h>
#include <qinputdialog.h>
#include <qtableview.h>
#include <qdatetime.h>
#include <qcommandlinkbutton.h>
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
#if !defined(SCHEMA_VERIFY_VSSYM32)
#define TMT_ANIMATIONDURATION 5006
#define TMT_TRANSITIONDURATIONS 6000
#define EP_EDITBORDER_NOSCROLL 6
#define EP_EDITBORDER_HVSCROLL 9
#define EP_BACKGROUND 3
#define EBS_NORMAL 1
#define EBS_HOT 2
#define EBS_DISABLED 3
#define EBS_READONLY 5
#define PBS_DEFAULTED_ANIMATING 6
#define MBI_NORMAL 1
#define MBI_HOT 2
#define MBI_PUSHED 3
#define MBI_DISABLED 4
#define MB_ACTIVE 1
#define MB_INACTIVE 2
#define PP_FILL 5
#define PP_FILLVERT 6
#define PP_MOVEOVERLAY 8
#define PP_MOVEOVERLAYVERT 10
#define MENU_BARBACKGROUND 7
#define MENU_BARITEM 8
#define MENU_POPUPCHECK 11
#define MENU_POPUPCHECKBACKGROUND 12
#define MENU_POPUPGUTTER 13
#define MENU_POPUPITEM 14
#define MENU_POPUPBORDERS 10
#define MENU_POPUPSEPARATOR 15
#define MC_CHECKMARKNORMAL 1
#define MC_CHECKMARKDISABLED 2
#define MC_BULLETNORMAL 3
#define MC_BULLETDISABLED 4
#define ABS_UPHOVER 17
#define ABS_DOWNHOVER 18
#define ABS_LEFTHOVER 19
#define ABS_RIGHTHOVER 20
#define CP_DROPDOWNBUTTONRIGHT 6
#define CP_DROPDOWNBUTTONLEFT 7
#define SCRBS_HOVER 5
#define TVP_HOTGLYPH 4
#define SPI_GETCLIENTAREAANIMATION 0x1042
#define TDLG_PRIMARYPANEL 1
#define TDLG_SECONDARYPANEL 8
#endif
class QWindowsVistaAnimation : public QBlendStyleAnimation
#if !defined(QT_NO_STYLE_WINDOWSVISTA)
class QWindowsVistaStylePrivate;
class QWindowsVistaStyle : public QWindowsXPStyle
{
Q_OBJECT
public:
QWindowsVistaAnimation(Type type, QObject *target) : QBlendStyleAnimation(type, target) { }
QWindowsVistaStyle();
~QWindowsVistaStyle();
virtual bool isUpdateNeeded() const;
void paint(QPainter *painter, const QStyleOption *option);
};
void drawPrimitive(PrimitiveElement element, const QStyleOption *option,
QPainter *painter, const QWidget *widget = 0) const;
void drawControl(ControlElement element, const QStyleOption *option,
QPainter *painter, const QWidget *widget) const;
void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option,
QPainter *painter, const QWidget *widget) const;
QSize sizeFromContents(ContentsType type, const QStyleOption *option,
const QSize &size, const QWidget *widget) const;
QRect subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const;
QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt,
SubControl sc, const QWidget *widget) const;
// Handles state transition animations
class QWindowsVistaTransition : public QWindowsVistaAnimation
{
Q_OBJECT
public:
QWindowsVistaTransition(QObject *target) : QWindowsVistaAnimation(Transition, target) {}
};
SubControl hitTestComplexControl(ComplexControl control, const QStyleOptionComplex *option,
const QPoint &pos, const QWidget *widget = 0) const;
QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = 0,
const QWidget *widget = 0) const;
QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt,
const QWidget *widget = 0) const;
int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const;
int styleHint(StyleHint hint, const QStyleOption *opt = 0, const QWidget *widget = 0,
QStyleHintReturn *returnData = 0) const;
// Handles pulse animations (default buttons)
class QWindowsVistaPulse: public QWindowsVistaAnimation
{
Q_OBJECT
public:
QWindowsVistaPulse(QObject *target) : QWindowsVistaAnimation(Pulse, target) {}
};
class QWindowsVistaStylePrivate : public QWindowsXPStylePrivate
{
Q_DECLARE_PUBLIC(QWindowsVistaStyle)
public:
QWindowsVistaStylePrivate();
~QWindowsVistaStylePrivate();
static bool resolveSymbols();
static inline bool useVista();
bool transitionsEnabled() const;
void polish(QWidget *widget);
void unpolish(QWidget *widget);
void polish(QPalette &pal);
void polish(QApplication *app);
void unpolish(QApplication *app);
QPalette standardPalette() const;
private:
bool initTreeViewTheming();
void cleanupTreeViewTheming();
HWND m_treeViewHelper;
Q_DISABLE_COPY(QWindowsVistaStyle)
Q_DECLARE_PRIVATE(QWindowsVistaStyle)
friend class QStyleFactory;
};
#endif //QT_NO_STYLE_WINDOWSVISTA
QT_END_NAMESPACE
#endif // QT_NO_STYLE_WINDOWSVISTA
QT_END_HEADER
#endif // QWINDOWSVISTASTYLE_P_H

View File

@ -0,0 +1,189 @@
/****************************************************************************
**
** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtGui module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef QWINDOWSVISTASTYLE_P_P_H
#define QWINDOWSVISTASTYLE_P_P_H
//
// W A R N I N G
// -------------
//
// This file is not part of the Qt API. It exists for the convenience
// of qapplication_*.cpp, qwidget*.cpp and qfiledialog.cpp. This header
// file may change from version to version without notice, or even be removed.
//
// We mean it.
//
#include "qwindowsvistastyle_p.h"
#if !defined(QT_NO_STYLE_WINDOWSVISTA)
#include <private/qwindowsxpstyle_p.h>
#include <private/qstyleanimation_p.h>
#include <private/qpaintengine_raster_p.h>
#include <qlibrary.h>
#include <qpaintengine.h>
#include <qwidget.h>
#include <qapplication.h>
#include <qpixmapcache.h>
#include <qstyleoption.h>
#include <qpushbutton.h>
#include <qradiobutton.h>
#include <qcheckbox.h>
#include <qlineedit.h>
#include <qgroupbox.h>
#include <qtoolbutton.h>
#include <qspinbox.h>
#include <qtoolbar.h>
#include <qcombobox.h>
#include <qscrollbar.h>
#include <qprogressbar.h>
#include <qdockwidget.h>
#include <qlistview.h>
#include <qtreeview.h>
#include <qtextedit.h>
#include <qmessagebox.h>
#include <qdialogbuttonbox.h>
#include <qinputdialog.h>
#include <qtableview.h>
#include <qdatetime.h>
#include <qcommandlinkbutton.h>
QT_BEGIN_NAMESPACE
#if !defined(SCHEMA_VERIFY_VSSYM32)
#define TMT_ANIMATIONDURATION 5006
#define TMT_TRANSITIONDURATIONS 6000
#define EP_EDITBORDER_NOSCROLL 6
#define EP_EDITBORDER_HVSCROLL 9
#define EP_BACKGROUND 3
#define EBS_NORMAL 1
#define EBS_HOT 2
#define EBS_DISABLED 3
#define EBS_READONLY 5
#define PBS_DEFAULTED_ANIMATING 6
#define MBI_NORMAL 1
#define MBI_HOT 2
#define MBI_PUSHED 3
#define MBI_DISABLED 4
#define MB_ACTIVE 1
#define MB_INACTIVE 2
#define PP_FILL 5
#define PP_FILLVERT 6
#define PP_MOVEOVERLAY 8
#define PP_MOVEOVERLAYVERT 10
#define MENU_BARBACKGROUND 7
#define MENU_BARITEM 8
#define MENU_POPUPCHECK 11
#define MENU_POPUPCHECKBACKGROUND 12
#define MENU_POPUPGUTTER 13
#define MENU_POPUPITEM 14
#define MENU_POPUPBORDERS 10
#define MENU_POPUPSEPARATOR 15
#define MC_CHECKMARKNORMAL 1
#define MC_CHECKMARKDISABLED 2
#define MC_BULLETNORMAL 3
#define MC_BULLETDISABLED 4
#define ABS_UPHOVER 17
#define ABS_DOWNHOVER 18
#define ABS_LEFTHOVER 19
#define ABS_RIGHTHOVER 20
#define CP_DROPDOWNBUTTONRIGHT 6
#define CP_DROPDOWNBUTTONLEFT 7
#define SCRBS_HOVER 5
#define TVP_HOTGLYPH 4
#define SPI_GETCLIENTAREAANIMATION 0x1042
#define TDLG_PRIMARYPANEL 1
#define TDLG_SECONDARYPANEL 8
#endif
class QWindowsVistaAnimation : public QBlendStyleAnimation
{
Q_OBJECT
public:
QWindowsVistaAnimation(Type type, QObject *target) : QBlendStyleAnimation(type, target) { }
virtual bool isUpdateNeeded() const;
void paint(QPainter *painter, const QStyleOption *option);
};
// Handles state transition animations
class QWindowsVistaTransition : public QWindowsVistaAnimation
{
Q_OBJECT
public:
QWindowsVistaTransition(QObject *target) : QWindowsVistaAnimation(Transition, target) {}
};
// Handles pulse animations (default buttons)
class QWindowsVistaPulse: public QWindowsVistaAnimation
{
Q_OBJECT
public:
QWindowsVistaPulse(QObject *target) : QWindowsVistaAnimation(Pulse, target) {}
};
class QWindowsVistaStylePrivate : public QWindowsXPStylePrivate
{
Q_DECLARE_PUBLIC(QWindowsVistaStyle)
public:
QWindowsVistaStylePrivate();
~QWindowsVistaStylePrivate();
static bool resolveSymbols();
static inline bool useVista();
bool transitionsEnabled() const;
private:
bool initTreeViewTheming();
void cleanupTreeViewTheming();
HWND m_treeViewHelper;
};
QT_END_NAMESPACE
#endif // QT_NO_STYLE_WINDOWSVISTA
#endif // QWINDOWSVISTASTYLE_P_P_H

View File

@ -74,8 +74,8 @@ contains( styles, windows ) {
}
contains( styles, windowsvista ) {
HEADERS += styles/qwindowsvistastyle.h
HEADERS += styles/qwindowsvistastyle_p.h
HEADERS += styles/qwindowsvistastyle_p_p.h
SOURCES += styles/qwindowsvistastyle.cpp
!contains( styles, windowsxp ) {
message( windowsvista requires windowsxp )

View File

@ -77,7 +77,6 @@
#ifdef Q_OS_WIN
#include <QWindowsXPStyle>
#include <QWindowsVistaStyle>
#endif
#ifdef Q_OS_WINCE
@ -416,13 +415,14 @@ QImage readImage(const QString &fileName)
#if defined(Q_OS_WIN) && !defined(QT_NO_STYLE_WINDOWSVISTA)
void tst_QStyle::testWindowsVistaStyle()
{
QWindowsVistaStyle vistastyle;
QVERIFY(testAllFunctions(&vistastyle));
QStyle *vistastyle = QStyleFactory::create("WindowsVista");
QVERIFY(testAllFunctions(vistastyle));
if (QSysInfo::WindowsVersion == QSysInfo::WV_VISTA)
testPainting(&vistastyle, "vista");
testPainting(vistastyle, "vista");
else if (QSysInfo::WindowsVersion == QSysInfo::WV_XP)
testPainting(&vistastyle, "xp");
testPainting(vistastyle, "xp");
delete vistastyle;
}
#endif