QtGui: Bring back HBITMAP/HICON conversion functions.
- Move the conversion functions from the Lighthouse plugin to QtGui as qt_pixmap/From/To/HBITMAP/HICON(). - Re-enable them in Widgets (QFileIconProvider, QWindowsStyle). - Use them in QtPrintSupport. Change-Id: I1436bc604160d94c78ef270ad2b31bf3b20b5c90 Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
This commit is contained in:
parent
f6c107d799
commit
b8d330904b
@ -46,6 +46,7 @@ SOURCES += \
|
||||
image/qvolatileimage.cpp
|
||||
|
||||
SOURCES += image/qpixmap_qpa.cpp
|
||||
win32: SOURCES += image/qpixmap_win.cpp
|
||||
|
||||
!symbian|contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2) {
|
||||
SOURCES += image/qvolatileimagedata.cpp
|
||||
|
@ -4,7 +4,7 @@
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
** This file is part of the QtGui module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** GNU Lesser General Public License Usage
|
||||
@ -39,21 +39,24 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "pixmaputils.h"
|
||||
#include "qpixmap.h"
|
||||
#include "qplatformpixmap_qpa.h"
|
||||
#include "qpixmap_raster_p.h"
|
||||
|
||||
#include <QtGui/QBitmap>
|
||||
#include <QtGui/QImage>
|
||||
#include <QtGui/QPlatformPixmap>
|
||||
#include <QtGui/private/qpixmap_raster_p.h>
|
||||
|
||||
#include <QtCore/QScopedArrayPointer>
|
||||
#include <QtCore/QDebug>
|
||||
|
||||
#include <string.h>
|
||||
#include <qglobal.h>
|
||||
#include <qt_windows.h>
|
||||
#include <QScopedArrayPointer>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
HBITMAP createIconMask(const QBitmap &bitmap)
|
||||
enum HBitmapFormat
|
||||
{
|
||||
HBitmapNoAlpha,
|
||||
HBitmapPremultipliedAlpha,
|
||||
HBitmapAlpha
|
||||
};
|
||||
|
||||
Q_GUI_EXPORT HBITMAP qt_createIconMask(const QBitmap &bitmap)
|
||||
{
|
||||
QImage bm = bitmap.toImage().convertToFormat(QImage::Format_Mono);
|
||||
const int w = bm.width();
|
||||
@ -67,7 +70,7 @@ HBITMAP createIconMask(const QBitmap &bitmap)
|
||||
return hbm;
|
||||
}
|
||||
|
||||
HBITMAP qPixmapToWinHBITMAP(const QPixmap &p, HBitmapFormat format)
|
||||
Q_GUI_EXPORT HBITMAP qt_pixmapToWinHBITMAP(const QPixmap &p, int hbitmapFormat = 0)
|
||||
{
|
||||
if (p.isNull())
|
||||
return 0;
|
||||
@ -77,7 +80,7 @@ HBITMAP qPixmapToWinHBITMAP(const QPixmap &p, HBitmapFormat format)
|
||||
QRasterPlatformPixmap *data = new QRasterPlatformPixmap(p.depth() == 1 ?
|
||||
QRasterPlatformPixmap::BitmapType : QRasterPlatformPixmap::PixmapType);
|
||||
data->fromImage(p.toImage(), Qt::AutoColor);
|
||||
return qPixmapToWinHBITMAP(QPixmap(data), format);
|
||||
return qt_pixmapToWinHBITMAP(QPixmap(data), hbitmapFormat);
|
||||
}
|
||||
|
||||
QRasterPlatformPixmap *d = static_cast<QRasterPlatformPixmap*>(p.handle());
|
||||
@ -113,9 +116,9 @@ HBITMAP qPixmapToWinHBITMAP(const QPixmap &p, HBitmapFormat format)
|
||||
|
||||
// Copy over the data
|
||||
QImage::Format imageFormat = QImage::Format_ARGB32;
|
||||
if (format == HBitmapAlpha)
|
||||
if (hbitmapFormat == HBitmapAlpha)
|
||||
imageFormat = QImage::Format_RGB32;
|
||||
else if (format == HBitmapPremultipliedAlpha)
|
||||
else if (hbitmapFormat == HBitmapPremultipliedAlpha)
|
||||
imageFormat = QImage::Format_ARGB32_Premultiplied;
|
||||
const QImage image = rasterImage->convertToFormat(imageFormat);
|
||||
const int bytes_per_line = w * 4;
|
||||
@ -125,7 +128,7 @@ HBITMAP qPixmapToWinHBITMAP(const QPixmap &p, HBitmapFormat format)
|
||||
return bitmap;
|
||||
}
|
||||
|
||||
QPixmap qPixmapFromWinHBITMAP(HBITMAP bitmap, HBitmapFormat format)
|
||||
Q_GUI_EXPORT QPixmap qt_pixmapFromWinHBITMAP(HBITMAP bitmap, int hbitmapFormat = 0)
|
||||
{
|
||||
// Verify size
|
||||
BITMAP bitmap_info;
|
||||
@ -160,7 +163,7 @@ QPixmap qPixmapFromWinHBITMAP(HBITMAP bitmap, HBitmapFormat format)
|
||||
|
||||
QImage::Format imageFormat = QImage::Format_ARGB32_Premultiplied;
|
||||
uint mask = 0;
|
||||
if (format == HBitmapNoAlpha) {
|
||||
if (hbitmapFormat == HBitmapNoAlpha) {
|
||||
imageFormat = QImage::Format_RGB32;
|
||||
mask = 0xff000000;
|
||||
}
|
||||
@ -188,7 +191,7 @@ QPixmap qPixmapFromWinHBITMAP(HBITMAP bitmap, HBitmapFormat format)
|
||||
return QPixmap::fromImage(image);
|
||||
}
|
||||
|
||||
HICON qPixmapToWinHICON(const QPixmap &p)
|
||||
Q_GUI_EXPORT HICON qt_pixmapToWinHICON(const QPixmap &p)
|
||||
{
|
||||
QBitmap maskBitmap = p.mask();
|
||||
if (maskBitmap.isNull()) {
|
||||
@ -198,8 +201,8 @@ HICON qPixmapToWinHICON(const QPixmap &p)
|
||||
|
||||
ICONINFO ii;
|
||||
ii.fIcon = true;
|
||||
ii.hbmMask = createIconMask(maskBitmap);
|
||||
ii.hbmColor = qPixmapToWinHBITMAP(p, HBitmapAlpha);
|
||||
ii.hbmMask = qt_createIconMask(maskBitmap);
|
||||
ii.hbmColor = qt_pixmapToWinHBITMAP(p, HBitmapAlpha);
|
||||
ii.xHotspot = 0;
|
||||
ii.yHotspot = 0;
|
||||
|
||||
@ -211,7 +214,7 @@ HICON qPixmapToWinHICON(const QPixmap &p)
|
||||
return hIcon;
|
||||
}
|
||||
|
||||
static QImage qImageFromWinHBITMAP(HDC hdc, HBITMAP bitmap, int w, int h)
|
||||
Q_GUI_EXPORT QImage qt_imageFromWinHBITMAP(HDC hdc, HBITMAP bitmap, int w, int h)
|
||||
{
|
||||
BITMAPINFO bmi;
|
||||
memset(&bmi, 0, sizeof(bmi));
|
||||
@ -228,7 +231,7 @@ static QImage qImageFromWinHBITMAP(HDC hdc, HBITMAP bitmap, int w, int h)
|
||||
return image;
|
||||
|
||||
// Get bitmap bits
|
||||
QScopedPointer<uchar> data(new uchar [bmi.bmiHeader.biSizeImage]);
|
||||
QScopedArrayPointer<uchar> data(new uchar [bmi.bmiHeader.biSizeImage]);
|
||||
if (!GetDIBits(hdc, bitmap, 0, h, data.data(), &bmi, DIB_RGB_COLORS)) {
|
||||
qErrnoWarning("%s: failed to get bitmap bits", __FUNCTION__);
|
||||
return QImage();
|
||||
@ -242,7 +245,7 @@ static QImage qImageFromWinHBITMAP(HDC hdc, HBITMAP bitmap, int w, int h)
|
||||
return image;
|
||||
}
|
||||
|
||||
QPixmap qPixmapFromWinHICON(HICON icon)
|
||||
Q_GUI_EXPORT QPixmap qt_pixmapFromWinHICON(HICON icon)
|
||||
{
|
||||
bool foundAlpha = false;
|
||||
HDC screenDevice = GetDC(0);
|
||||
@ -276,7 +279,7 @@ QPixmap qPixmapFromWinHICON(HICON icon)
|
||||
HBITMAP winBitmap = CreateDIBSection(hdc, (BITMAPINFO*)&bitmapInfo, DIB_RGB_COLORS, (VOID**)&bits, NULL, 0);
|
||||
HGDIOBJ oldhdc = (HBITMAP)SelectObject(hdc, winBitmap);
|
||||
DrawIconEx( hdc, 0, 0, icon, iconinfo.xHotspot * 2, iconinfo.yHotspot * 2, 0, 0, DI_NORMAL);
|
||||
QImage image = qImageFromWinHBITMAP(hdc, winBitmap, w, h);
|
||||
QImage image = qt_imageFromWinHBITMAP(hdc, winBitmap, w, h);
|
||||
|
||||
for (int y = 0 ; y < h && !foundAlpha ; y++) {
|
||||
const QRgb *scanLine= reinterpret_cast<const QRgb *>(image.scanLine(y));
|
||||
@ -290,7 +293,7 @@ QPixmap qPixmapFromWinHICON(HICON icon)
|
||||
if (!foundAlpha) {
|
||||
//If no alpha was found, we use the mask to set alpha values
|
||||
DrawIconEx( hdc, 0, 0, icon, w, h, 0, 0, DI_MASK);
|
||||
const QImage mask = qImageFromWinHBITMAP(hdc, winBitmap, w, h);
|
||||
const QImage mask = qt_imageFromWinHBITMAP(hdc, winBitmap, w, h);
|
||||
|
||||
for (int y = 0 ; y < h ; y++){
|
||||
QRgb *scanlineImage = reinterpret_cast<QRgb *>(image.scanLine(y));
|
@ -1,71 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** GNU Lesser General Public License Usage
|
||||
** 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, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia 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.
|
||||
**
|
||||
** Other Usage
|
||||
** Alternatively, this file may be used in accordance with the terms and
|
||||
** conditions contained in a signed written agreement between you and Nokia.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef PIXMAPUTILS_H
|
||||
#define PIXMAPUTILS_H
|
||||
|
||||
#include "qtwindows_additional.h"
|
||||
|
||||
#include <QtCore/QtGlobal>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QBitmap;
|
||||
class QPixmap;
|
||||
|
||||
enum HBitmapFormat
|
||||
{
|
||||
HBitmapNoAlpha,
|
||||
HBitmapPremultipliedAlpha,
|
||||
HBitmapAlpha
|
||||
};
|
||||
|
||||
HBITMAP createIconMask(const QBitmap &bitmap);
|
||||
|
||||
HBITMAP qPixmapToWinHBITMAP(const QPixmap &p, HBitmapFormat format);
|
||||
HICON qPixmapToWinHICON(const QPixmap &p);
|
||||
|
||||
QPixmap qPixmapFromWinHBITMAP(HBITMAP bitmap, HBitmapFormat format);
|
||||
QPixmap qPixmapFromWinHICON(HICON icon);
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif // PIXMAPUTILS_H
|
@ -43,7 +43,6 @@
|
||||
#include "qwindowscontext.h"
|
||||
#include "qwindowswindow.h"
|
||||
#include "qwindowsscreen.h"
|
||||
#include "pixmaputils.h"
|
||||
|
||||
#include <QtGui/QPixmap>
|
||||
#include <QtGui/QImage>
|
||||
@ -57,6 +56,9 @@
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
Q_GUI_EXPORT HBITMAP qt_pixmapToWinHBITMAP(const QPixmap &p, int hbitmapFormat = 0);
|
||||
Q_GUI_EXPORT HBITMAP qt_createIconMask(const QBitmap &bitmap);
|
||||
|
||||
/*!
|
||||
\class QWindowsCursor
|
||||
\brief Platform cursor implementation
|
||||
@ -84,8 +86,8 @@ HCURSOR QWindowsCursor::createPixmapCursor(const QPixmap &pixmap, int hotX, int
|
||||
mask.fill(Qt::color1);
|
||||
}
|
||||
|
||||
HBITMAP ic = qPixmapToWinHBITMAP(pixmap, HBitmapAlpha);
|
||||
const HBITMAP im = createIconMask(mask);
|
||||
HBITMAP ic = qt_pixmapToWinHBITMAP(pixmap, /* HBitmapAlpha */ 2);
|
||||
const HBITMAP im = qt_createIconMask(mask);
|
||||
|
||||
ICONINFO ii;
|
||||
ii.fIcon = 0;
|
||||
|
@ -42,7 +42,6 @@
|
||||
#include "qwindowsscreen.h"
|
||||
#include "qwindowscontext.h"
|
||||
#include "qwindowswindow.h"
|
||||
#include "pixmaputils.h"
|
||||
#include "qwindowscursor.h"
|
||||
|
||||
#include "qtwindows_additional.h"
|
||||
@ -150,6 +149,8 @@ QList<QPlatformScreen *> QWindowsScreen::screens()
|
||||
|
||||
QPixmap QWindowsScreen::grabWindow(WId window, int x, int y, int width, int height) const
|
||||
{
|
||||
Q_GUI_EXPORT QPixmap qt_pixmapFromWinHBITMAP(HBITMAP bitmap, int hbitmapFormat = 0);
|
||||
|
||||
if (QWindowsContext::verboseIntegration)
|
||||
qDebug() << __FUNCTION__ << window << x << y << width << height;
|
||||
RECT r;
|
||||
@ -174,7 +175,7 @@ QPixmap QWindowsScreen::grabWindow(WId window, int x, int y, int width, int heig
|
||||
SelectObject(bitmap_dc, null_bitmap);
|
||||
DeleteDC(bitmap_dc);
|
||||
|
||||
const QPixmap pixmap = qPixmapFromWinHBITMAP(bitmap, HBitmapNoAlpha);
|
||||
const QPixmap pixmap = qt_pixmapFromWinHBITMAP(bitmap);
|
||||
|
||||
DeleteObject(bitmap);
|
||||
ReleaseDC(0, display_dc);
|
||||
|
@ -43,7 +43,6 @@ SOURCES += \
|
||||
qwindowsmime.cpp \
|
||||
qwindowsdrag.cpp \
|
||||
qwindowscursor.cpp \
|
||||
pixmaputils.cpp \
|
||||
qwindowsinputcontext.cpp \
|
||||
qwindowsaccessibility.cpp \
|
||||
qwindowstheme.cpp \
|
||||
@ -70,7 +69,6 @@ HEADERS += \
|
||||
qwindowsdrag.h \
|
||||
qwindowsinternalmimedata.h \
|
||||
qwindowscursor.h \
|
||||
pixmaputils.h \
|
||||
array.h \
|
||||
qwindowsinputcontext.h \
|
||||
qwindowsaccessibility.h \
|
||||
|
@ -60,6 +60,7 @@
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
Q_GUI_EXPORT HBITMAP qt_pixmapToWinHBITMAP(const QPixmap &p, int hbitmapFormat = 0);
|
||||
extern QPainterPath qt_regionToPath(const QRegion ®ion);
|
||||
|
||||
// #define QT_DEBUG_DRAW
|
||||
@ -626,64 +627,6 @@ enum HBitmapFormat
|
||||
HBitmapAlpha
|
||||
};
|
||||
|
||||
HBITMAP qPixmapToWinHBITMAP(const QPixmap &p, HBitmapFormat format)
|
||||
{
|
||||
if (p.isNull())
|
||||
return 0;
|
||||
|
||||
HBITMAP bitmap = 0;
|
||||
if (p.handle()->classId() != QPlatformPixmap::RasterClass) {
|
||||
QRasterPlatformPixmap *data = new QRasterPlatformPixmap(p.depth() == 1 ?
|
||||
QRasterPlatformPixmap::BitmapType : QRasterPlatformPixmap::PixmapType);
|
||||
data->fromImage(p.toImage(), Qt::AutoColor);
|
||||
return qPixmapToWinHBITMAP(QPixmap(data), format);
|
||||
}
|
||||
|
||||
QRasterPlatformPixmap *d = static_cast<QRasterPlatformPixmap*>(p.handle());
|
||||
const QImage *rasterImage = d->buffer();
|
||||
const int w = rasterImage->width();
|
||||
const int h = rasterImage->height();
|
||||
|
||||
HDC display_dc = GetDC(0);
|
||||
|
||||
// Define the header
|
||||
BITMAPINFO bmi;
|
||||
memset(&bmi, 0, sizeof(bmi));
|
||||
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
||||
bmi.bmiHeader.biWidth = w;
|
||||
bmi.bmiHeader.biHeight = -h;
|
||||
bmi.bmiHeader.biPlanes = 1;
|
||||
bmi.bmiHeader.biBitCount = 32;
|
||||
bmi.bmiHeader.biCompression = BI_RGB;
|
||||
bmi.bmiHeader.biSizeImage = w * h * 4;
|
||||
|
||||
// Create the pixmap
|
||||
uchar *pixels = 0;
|
||||
bitmap = CreateDIBSection(display_dc, &bmi, DIB_RGB_COLORS, (void **) &pixels, 0, 0);
|
||||
ReleaseDC(0, display_dc);
|
||||
if (!bitmap) {
|
||||
qErrnoWarning("%s, failed to create dibsection", __FUNCTION__);
|
||||
return 0;
|
||||
}
|
||||
if (!pixels) {
|
||||
qErrnoWarning("%s, did not allocate pixel data", __FUNCTION__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Copy over the data
|
||||
QImage::Format imageFormat = QImage::Format_ARGB32;
|
||||
if (format == HBitmapAlpha)
|
||||
imageFormat = QImage::Format_RGB32;
|
||||
else if (format == HBitmapPremultipliedAlpha)
|
||||
imageFormat = QImage::Format_ARGB32_Premultiplied;
|
||||
const QImage image = rasterImage->convertToFormat(imageFormat);
|
||||
const int bytes_per_line = w * 4;
|
||||
for (int y=0; y < h; ++y)
|
||||
memcpy(pixels + y * bytes_per_line, image.scanLine(y), bytes_per_line);
|
||||
|
||||
return bitmap;
|
||||
}
|
||||
|
||||
void QWin32PrintEngine::drawPixmap(const QRectF &targetRect,
|
||||
const QPixmap &originalPixmap,
|
||||
const QRectF &sourceRect)
|
||||
@ -760,7 +703,7 @@ void QWin32PrintEngine::drawPixmap(const QRectF &targetRect,
|
||||
}
|
||||
|
||||
QPixmap p = pixmap.copy(tileSize * x, tileSize * y, imgw, imgh);
|
||||
HBITMAP hbitmap = qPixmapToWinHBITMAP(p, HBitmapNoAlpha);
|
||||
HBITMAP hbitmap = qt_pixmapToWinHBITMAP(p, HBitmapNoAlpha);
|
||||
HDC display_dc = GetDC(0);
|
||||
HDC hbitmap_hdc = CreateCompatibleDC(display_dc);
|
||||
HGDIOBJ null_bitmap = SelectObject(hbitmap_hdc, hbitmap);
|
||||
@ -795,7 +738,7 @@ void QWin32PrintEngine::drawTiledPixmap(const QRectF &r, const QPixmap &pm, cons
|
||||
int dc_state = SaveDC(d->hdc);
|
||||
|
||||
HDC display_dc = GetDC(0);
|
||||
HBITMAP hbitmap = qPixmapToWinHBITMAP(pm, HBitmapNoAlpha);
|
||||
HBITMAP hbitmap = qt_pixmapToWinHBITMAP(pm, HBitmapNoAlpha);
|
||||
HDC hbitmap_hdc = CreateCompatibleDC(display_dc);
|
||||
HGDIOBJ null_bitmap = SelectObject(hbitmap_hdc, hbitmap);
|
||||
|
||||
|
@ -320,6 +320,8 @@ bool QVistaHelper::setDWMTitleBar(TitleBarChangeType type)
|
||||
|
||||
void QVistaHelper::drawTitleBar(QPainter *painter)
|
||||
{
|
||||
Q_GUI_EXPORT HICON qt_pixmapToWinHICON(const QPixmap &);
|
||||
|
||||
Q_ASSERT(backButton_);
|
||||
QPlatformNativeInterface *nativeInterface = QGuiApplication::platformNativeInterface();
|
||||
QBackingStore *backingStore = backButton_->backingStore();
|
||||
@ -351,9 +353,10 @@ void QVistaHelper::drawTitleBar(QPainter *painter)
|
||||
QRect(titleOffset() - glowOffset, verticalCenter - textHeight / 2, textWidth, textHeight),
|
||||
hdc);
|
||||
|
||||
if (!wizard->windowIcon().isNull()) {
|
||||
const QIcon windowIcon = wizard->windowIcon();
|
||||
if (!windowIcon.isNull()) {
|
||||
QRect rect(leftMargin(), verticalCenter - iconSize() / 2, iconSize(), iconSize());
|
||||
HICON hIcon = 0; //###FIXME wizard->windowIcon().pixmap(iconSize()).toWinHICON();
|
||||
const HICON hIcon = qt_pixmapToWinHICON(windowIcon.pixmap(iconSize()));
|
||||
DrawIconEx(hdc, rect.left(), rect.top(), hIcon, 0, 0, 0, NULL, DI_NORMAL | DI_COMPAT);
|
||||
DestroyIcon(hIcon);
|
||||
}
|
||||
|
@ -46,11 +46,14 @@
|
||||
#include <qapplication.h>
|
||||
#include <qdir.h>
|
||||
#include <qpixmapcache.h>
|
||||
#if defined(Q_WS_WIN)
|
||||
#if defined(Q_OS_WIN)
|
||||
# define _WIN32_IE 0x0500
|
||||
# include <qt_windows.h>
|
||||
# include <commctrl.h>
|
||||
# include <objbase.h>
|
||||
|
||||
Q_GUI_EXPORT QPixmap qt_pixmapFromWinHICON(HICON icon);
|
||||
|
||||
#elif defined(Q_WS_MAC)
|
||||
# include <private/qt_cocoa_helpers_mac_p.h>
|
||||
#endif
|
||||
@ -96,7 +99,7 @@ class QFileIconProviderPrivate
|
||||
public:
|
||||
QFileIconProviderPrivate();
|
||||
QIcon getIcon(QStyle::StandardPixmap name) const;
|
||||
#ifdef Q_WS_WIN
|
||||
#ifdef Q_OS_WIN
|
||||
QIcon getWinIcon(const QFileInfo &fi) const;
|
||||
#elif defined(Q_WS_MAC)
|
||||
QIcon getMacIcon(const QFileInfo &fi) const;
|
||||
@ -229,7 +232,7 @@ QIcon QFileIconProvider::icon(IconType type) const
|
||||
return QIcon();
|
||||
}
|
||||
|
||||
#ifdef Q_WS_WIN
|
||||
#ifdef Q_OS_WIN
|
||||
QIcon QFileIconProviderPrivate::getWinIcon(const QFileInfo &fileInfo) const
|
||||
{
|
||||
QIcon retIcon;
|
||||
@ -284,7 +287,7 @@ QIcon QFileIconProviderPrivate::getWinIcon(const QFileInfo &fileInfo) const
|
||||
}
|
||||
if (pixmap.isNull()) {
|
||||
#ifndef Q_OS_WINCE
|
||||
pixmap = QPixmap::fromWinHICON(info.hIcon);
|
||||
pixmap = qt_pixmapFromWinHICON(info.hIcon);
|
||||
#else
|
||||
pixmap = QPixmap::fromWinHICON(ImageList_GetIcon((HIMAGELIST) val, info.iIcon, ILD_NORMAL));
|
||||
#endif
|
||||
@ -314,7 +317,7 @@ QIcon QFileIconProviderPrivate::getWinIcon(const QFileInfo &fileInfo) const
|
||||
key = QString::fromLatin1("qt_dir_%1").arg(info.iIcon);
|
||||
}
|
||||
#ifndef Q_OS_WINCE
|
||||
pixmap = QPixmap::fromWinHICON(info.hIcon);
|
||||
pixmap = qt_pixmapFromWinHICON(info.hIcon);
|
||||
#else
|
||||
pixmap = QPixmap::fromWinHICON(ImageList_GetIcon((HIMAGELIST) val, info.iIcon, ILD_NORMAL));
|
||||
#endif
|
||||
@ -418,13 +421,13 @@ QIcon QFileIconProvider::icon(const QFileInfo &info) const
|
||||
QIcon retIcon = d->getMacIcon(info);
|
||||
if (!retIcon.isNull())
|
||||
return retIcon;
|
||||
#elif defined Q_WS_WIN
|
||||
#elif defined Q_OS_WIN
|
||||
QIcon icon = d->getWinIcon(info);
|
||||
if (!icon.isNull())
|
||||
return icon;
|
||||
#endif
|
||||
if (info.isRoot())
|
||||
#if defined (Q_WS_WIN) && !defined(Q_WS_WINCE)
|
||||
#if defined (Q_OS_WIN) && !defined(Q_WS_WINCE)
|
||||
{
|
||||
UINT type = GetDriveType((wchar_t *)info.absoluteFilePath().utf16());
|
||||
|
||||
@ -482,7 +485,7 @@ QString QFileIconProvider::type(const QFileInfo &info) const
|
||||
}
|
||||
|
||||
if (info.isDir())
|
||||
#ifdef Q_WS_WIN
|
||||
#ifdef Q_OS_WIN
|
||||
return QApplication::translate("QFileDialog", "File Folder", "Match Windows Explorer");
|
||||
#else
|
||||
return QApplication::translate("QFileDialog", "Folder", "All other platforms");
|
||||
|
@ -1,4 +1,5 @@
|
||||
# Qt/Windows only configuration file
|
||||
# --------------------------------------------------------------------
|
||||
|
||||
INCLUDEPATH += ../3rdparty/wintab
|
||||
INCLUDEPATH += ../3rdparty/wintab
|
||||
LIBS *= -lshell32
|
||||
|
@ -79,7 +79,7 @@
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
#if defined(Q_WS_WIN)
|
||||
#if defined(Q_OS_WIN)
|
||||
|
||||
QT_BEGIN_INCLUDE_NAMESPACE
|
||||
#include "qt_windows.h"
|
||||
@ -109,7 +109,9 @@ typedef struct
|
||||
typedef HRESULT (WINAPI *PtrSHGetStockIconInfo)(int siid, int uFlags, QSHSTOCKICONINFO *psii);
|
||||
static PtrSHGetStockIconInfo pSHGetStockIconInfo = 0;
|
||||
|
||||
#endif //Q_WS_WIN
|
||||
Q_GUI_EXPORT HICON qt_pixmapToWinHICON(const QPixmap &);
|
||||
Q_GUI_EXPORT QPixmap qt_pixmapFromWinHICON(HICON icon);
|
||||
#endif //Q_OS_WIN
|
||||
|
||||
QT_BEGIN_INCLUDE_NAMESPACE
|
||||
#include <limits.h>
|
||||
@ -123,7 +125,7 @@ enum QSliderDirection { SlUp, SlDown, SlLeft, SlRight };
|
||||
QWindowsStylePrivate::QWindowsStylePrivate()
|
||||
: alt_down(false), menuBarTimer(0), animationFps(10), animateTimer(0), animateStep(0)
|
||||
{
|
||||
#if defined(Q_WS_WIN) && !defined(Q_OS_WINCE)
|
||||
#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
|
||||
if ((QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA
|
||||
&& QSysInfo::WindowsVersion < QSysInfo::WV_NT_based)) {
|
||||
QSystemLibrary shellLib(QLatin1String("shell32"));
|
||||
@ -290,7 +292,7 @@ QWindowsStyle::~QWindowsStyle()
|
||||
{
|
||||
}
|
||||
|
||||
#ifdef Q_WS_WIN
|
||||
#ifdef Q_OS_WIN
|
||||
static inline QRgb colorref2qrgb(COLORREF col)
|
||||
{
|
||||
return qRgb(GetRValue(col), GetGValue(col), GetBValue(col));
|
||||
@ -312,7 +314,7 @@ void QWindowsStyle::polish(QApplication *app)
|
||||
d->inactiveGradientCaptionColor = app->palette().dark().color();
|
||||
d->inactiveCaptionText = app->palette().background().color();
|
||||
|
||||
#if defined(Q_WS_WIN) //fetch native title bar colors
|
||||
#if defined(Q_OS_WIN) //fetch native title bar colors
|
||||
if(app->desktopSettingsAware()){
|
||||
DWORD activeCaption = GetSysColor(COLOR_ACTIVECAPTION);
|
||||
DWORD gradientActiveCaption = GetSysColor(COLOR_GRADIENTACTIVECAPTION);
|
||||
@ -390,7 +392,7 @@ int QWindowsStyle::pixelMetric(PixelMetric pm, const QStyleOption *opt, const QW
|
||||
break;
|
||||
#endif
|
||||
case PM_MaximumDragDistance:
|
||||
#if defined(Q_WS_WIN)
|
||||
#if defined(Q_OS_WIN)
|
||||
{
|
||||
HDC hdcScreen = GetDC(0);
|
||||
int dpi = GetDeviceCaps(hdcScreen, LOGPIXELSX);
|
||||
@ -487,7 +489,7 @@ int QWindowsStyle::pixelMetric(PixelMetric pm, const QStyleOption *opt, const QW
|
||||
#endif // QT_NO_MENU
|
||||
|
||||
|
||||
#if defined(Q_WS_WIN)
|
||||
#if defined(Q_OS_WIN)
|
||||
case PM_TitleBarHeight:
|
||||
if (widget && (widget->windowType() == Qt::Tool)) {
|
||||
// MS always use one less than they say
|
||||
@ -514,13 +516,13 @@ int QWindowsStyle::pixelMetric(PixelMetric pm, const QStyleOption *opt, const QW
|
||||
ret = QCommonStyle::pixelMetric(pm, opt, widget);
|
||||
}
|
||||
break;
|
||||
#endif // Q_WS_WIN
|
||||
#endif // Q_OS_WIN
|
||||
|
||||
case PM_SplitterWidth:
|
||||
ret = qMax(4, QApplication::globalStrut().width());
|
||||
break;
|
||||
|
||||
#if defined(Q_WS_WIN)
|
||||
#if defined(Q_OS_WIN)
|
||||
case PM_MdiSubWindowFrameWidth:
|
||||
#if defined(Q_OS_WINCE)
|
||||
ret = GetSystemMetrics(SM_CYDLGFRAME);
|
||||
@ -926,7 +928,7 @@ static const char *const question_xpm[] = {
|
||||
|
||||
#endif //QT_NO_IMAGEFORMAT_XPM
|
||||
|
||||
#ifdef Q_WS_WIN
|
||||
#ifdef Q_OS_WIN
|
||||
static QPixmap loadIconFromShell32( int resourceId, int size )
|
||||
{
|
||||
#ifdef Q_OS_WINCE
|
||||
@ -937,7 +939,7 @@ static QPixmap loadIconFromShell32( int resourceId, int size )
|
||||
if( hmod ) {
|
||||
HICON iconHandle = (HICON)LoadImage(hmod, MAKEINTRESOURCE(resourceId), IMAGE_ICON, size, size, 0);
|
||||
if( iconHandle ) {
|
||||
QPixmap iconpixmap = QPixmap::fromWinHICON( iconHandle );
|
||||
QPixmap iconpixmap = qt_pixmapFromWinHICON(iconHandle);
|
||||
DestroyIcon(iconHandle);
|
||||
return iconpixmap;
|
||||
}
|
||||
@ -952,7 +954,7 @@ static QPixmap loadIconFromShell32( int resourceId, int size )
|
||||
QPixmap QWindowsStyle::standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt,
|
||||
const QWidget *widget) const
|
||||
{
|
||||
#if defined(Q_WS_WIN) && !defined(Q_OS_WINCE)
|
||||
#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
|
||||
QPixmap desktopIcon;
|
||||
switch(standardPixmap) {
|
||||
case SP_DriveCDIcon:
|
||||
@ -1035,28 +1037,28 @@ QPixmap QWindowsStyle::standardPixmap(StandardPixmap standardPixmap, const QStyl
|
||||
case SP_MessageBoxInformation:
|
||||
{
|
||||
HICON iconHandle = LoadIcon(NULL, IDI_INFORMATION);
|
||||
desktopIcon = QPixmap::fromWinHICON( iconHandle );
|
||||
desktopIcon = qt_pixmapFromWinHICON(iconHandle);
|
||||
DestroyIcon(iconHandle);
|
||||
break;
|
||||
}
|
||||
case SP_MessageBoxWarning:
|
||||
{
|
||||
HICON iconHandle = LoadIcon(NULL, IDI_WARNING);
|
||||
desktopIcon = QPixmap::fromWinHICON( iconHandle );
|
||||
desktopIcon = qt_pixmapFromWinHICON(iconHandle);
|
||||
DestroyIcon(iconHandle);
|
||||
break;
|
||||
}
|
||||
case SP_MessageBoxCritical:
|
||||
{
|
||||
HICON iconHandle = LoadIcon(NULL, IDI_ERROR);
|
||||
desktopIcon = QPixmap::fromWinHICON( iconHandle );
|
||||
desktopIcon = qt_pixmapFromWinHICON(iconHandle);
|
||||
DestroyIcon(iconHandle);
|
||||
break;
|
||||
}
|
||||
case SP_MessageBoxQuestion:
|
||||
{
|
||||
HICON iconHandle = LoadIcon(NULL, IDI_QUESTION);
|
||||
desktopIcon = QPixmap::fromWinHICON( iconHandle );
|
||||
desktopIcon = qt_pixmapFromWinHICON(iconHandle);
|
||||
DestroyIcon(iconHandle);
|
||||
break;
|
||||
}
|
||||
@ -1071,7 +1073,7 @@ QPixmap QWindowsStyle::standardPixmap(StandardPixmap standardPixmap, const QStyl
|
||||
memset(&iconInfo, 0, sizeof(iconInfo));
|
||||
iconInfo.cbSize = sizeof(iconInfo);
|
||||
if (pSHGetStockIconInfo(_SIID_SHIELD, _SHGFI_ICON | _SHGFI_SMALLICON, &iconInfo) == S_OK) {
|
||||
pixmap = QPixmap::fromWinHICON(iconInfo.hIcon);
|
||||
pixmap = qt_pixmapFromWinHICON(iconInfo.hIcon);
|
||||
DestroyIcon(iconInfo.hIcon);
|
||||
return pixmap;
|
||||
}
|
||||
@ -1154,7 +1156,7 @@ int QWindowsStyle::styleHint(StyleHint hint, const QStyleOption *opt, const QWid
|
||||
ret = 0;
|
||||
break;
|
||||
|
||||
#if defined(Q_WS_WIN)
|
||||
#if defined(Q_OS_WIN)
|
||||
case SH_UnderlineShortcut:
|
||||
{
|
||||
ret = 1;
|
||||
@ -1204,7 +1206,7 @@ int QWindowsStyle::styleHint(StyleHint hint, const QStyleOption *opt, const QWid
|
||||
#endif // QT_NO_RUBBERBAND
|
||||
case SH_LineEdit_PasswordCharacter:
|
||||
{
|
||||
#ifdef Q_WS_WIN
|
||||
#ifdef Q_OS_WIN
|
||||
if (widget && (QSysInfo::WindowsVersion >= QSysInfo::WV_XP && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based)) {
|
||||
const QFontMetrics &fm = widget->fontMetrics();
|
||||
if (fm.inFont(QChar(0x25CF)))
|
||||
@ -3105,7 +3107,7 @@ QIcon QWindowsStyle::standardIconImplementation(StandardPixmap standardIcon, con
|
||||
{
|
||||
QIcon icon;
|
||||
QPixmap pixmap;
|
||||
#ifdef Q_WS_WIN
|
||||
#ifdef Q_OS_WIN
|
||||
switch (standardIcon) {
|
||||
case SP_FileDialogNewFolder:
|
||||
{
|
||||
@ -3216,7 +3218,7 @@ QIcon QWindowsStyle::standardIconImplementation(StandardPixmap standardIcon, con
|
||||
memset(&iconInfo, 0, sizeof(iconInfo));
|
||||
iconInfo.cbSize = sizeof(iconInfo);
|
||||
if (pSHGetStockIconInfo(_SIID_SHIELD, _SHGFI_ICON | _SHGFI_LARGEICON, &iconInfo) == S_OK) {
|
||||
icon.addPixmap(QPixmap::fromWinHICON(iconInfo.hIcon));
|
||||
icon.addPixmap(qt_pixmapFromWinHICON(iconInfo.hIcon));
|
||||
DestroyIcon(iconInfo.hIcon);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user