⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qwindowsurface_raster.cpp

📁 奇趣公司比较新的qt/emd版本
💻 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 <qglobal.h> // for Q_WS_WIN define (non-PCH)#ifdef Q_WS_WIN#include <qt_windows.h>#endif#include <QtGui/qpaintdevice.h>#include <QtGui/qwidget.h>#include "private/qwindowsurface_raster_p.h"#include "private/qpaintengine_raster_p.h"class MetricAccessor : public QWidget {public:    int metric(PaintDeviceMetric m) const { return QWidget::metric(m); }};class QRasterPaintDevice : public QPaintDevice{public:    QRasterPaintDevice()    {        m_window = 0;        m_engine.setFlushOnEnd(false);    }    QWidget *window() const    {        return m_window;    }    void setWindow(QWidget *window)    {        m_window = window;    }    QSize size() const    {        return m_engine.size();    }    virtual int metric(PaintDeviceMetric m) const    {        Q_ASSERT(m_window);        return ((MetricAccessor *) m_window)->metric(m);    }    QPaintEngine *paintEngine() const    {        return const_cast<QRasterPaintEngine *>(&m_engine);    }private:    QRasterPaintEngine m_engine;    QWidget *m_window;};struct QRasterWindowSurfacePrivate{    QRasterPaintDevice device;};QRasterWindowSurface::QRasterWindowSurface(QWidget *window)    : QWindowSurface(window), d_ptr(new QRasterWindowSurfacePrivate){    Q_ASSERT(window->isTopLevel());    d_ptr->device.setWindow(window);}QRasterWindowSurface::~QRasterWindowSurface(){    delete d_ptr;}QPaintDevice *QRasterWindowSurface::paintDevice(){    return &d_ptr->device;}void QRasterWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint &offset){#ifdef Q_WS_WIN    QPoint wOffset = qt_qwidget_data(widget)->wrect.topLeft();    QRasterPaintEngine *engine = static_cast<QRasterPaintEngine *>(d_ptr->device.paintEngine());    HDC engine_dc = engine->getDC();    HDC widget_dc = widget->getDC();    QRect br = rgn.boundingRect();    QRect wbr = br.translated(-wOffset);    BitBlt(widget_dc, wbr.x(), wbr.y(), wbr.width(), wbr.height(),           engine_dc, br.x() + offset.x(), br.y() + offset.y(), SRCCOPY);    widget->releaseDC(widget_dc);    engine->releaseDC(engine_dc);#else    Q_UNUSED(widget);    Q_UNUSED(rgn);    Q_UNUSED(offset);#endif}void QRasterWindowSurface::setGeometry(const QRect &rect){    QWindowSurface::setGeometry(rect);    const QSize size = static_cast<QRasterPaintEngine*>(d_ptr->device.paintEngine())->size();    if (size == rect.size())        return;    static_cast<QRasterPaintEngine *>(d_ptr->device.paintEngine())->releaseBuffer();}bool QRasterWindowSurface::scroll(const QRegion &area, int dx, int dy){#ifdef Q_WS_WIN    QRect rect = area.boundingRect();    QRasterPaintEngine *engine = static_cast<QRasterPaintEngine *>(d_ptr->device.paintEngine());    HDC engine_dc = engine->getDC();    if (!engine_dc)        return false;    BitBlt(engine_dc, rect.x()+dx, rect.y()+dy, rect.width(), rect.height(),           engine_dc, rect.x(), rect.y(), SRCCOPY);    engine->releaseDC(engine_dc);    return true;#else    Q_UNUSED(area);    Q_UNUSED(dx);    Q_UNUSED(dy);    return false;#endif}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -