📄 qscreentransformed_qws.cpp
字号:
QRegion tr = mapToDevice(region, QSize(w,h)); Q_ASSERT(tr.boundingRect() == mapToDevice(region.boundingRect(), QSize(w,h)));#ifdef QT_REGION_DEBUG qDebug() << "QTransformedScreen::solidFill region" << region << "transformed" << tr;#endif d_ptr->subscreen->solidFill(color, tr);}/*! \reimp*/QSize QTransformedScreen::mapToDevice(const QSize &s) const{ switch (d_ptr->transformation) { case None: case Rot180: break; case Rot90: case Rot270: return QSize(s.height(), s.width()); break; } return s;}/*! \reimp*/QSize QTransformedScreen::mapFromDevice(const QSize &s) const{ switch (d_ptr->transformation) { case None: case Rot180: break; case Rot90: case Rot270: return QSize(s.height(), s.width()); break; } return s;}/*! \reimp*/QPoint QTransformedScreen::mapToDevice(const QPoint &p, const QSize &s) const{ QPoint rp(p); switch (d_ptr->transformation) { case None: break; case Rot90: rp.setX(p.y()); rp.setY(s.width() - p.x() - 1); break; case Rot180: rp.setX(s.width() - p.x() - 1); rp.setY(s.height() - p.y() - 1); break; case Rot270: rp.setX(s.height() - p.y() - 1); rp.setY(p.x()); break; } return rp;}/*! \reimp*/QPoint QTransformedScreen::mapFromDevice(const QPoint &p, const QSize &s) const{ QPoint rp(p); switch (d_ptr->transformation) { case None: break; case Rot90: rp.setX(s.height() - p.y() - 1); rp.setY(p.x()); break; case Rot180: rp.setX(s.width() - p.x() - 1); rp.setY(s.height() - p.y() - 1); break; case Rot270: rp.setX(p.y()); rp.setY(s.width() - p.x() - 1); break; } return rp;}/*! \reimp*/QRect QTransformedScreen::mapToDevice(const QRect &r, const QSize &s) const{ if (r.isNull()) return QRect(); QRect tr; switch (d_ptr->transformation) { case None: tr = r; break; case Rot90: tr.setCoords(r.y(), s.width() - r.x() - 1, r.bottom(), s.width() - r.right() - 1); break; case Rot180: tr.setCoords(s.width() - r.x() - 1, s.height() - r.y() - 1, s.width() - r.right() - 1, s.height() - r.bottom() - 1); break; case Rot270: tr.setCoords(s.height() - r.y() - 1, r.x(), s.height() - r.bottom() - 1, r.right()); break; } return correctNormalized(tr);}/*! \reimp*/QRect QTransformedScreen::mapFromDevice(const QRect &r, const QSize &s) const{ if (r.isNull()) return QRect(); QRect tr; switch (d_ptr->transformation) { case None: tr = r; break; case Rot90: tr.setCoords(s.height() - r.y() - 1, r.x(), s.height() - r.bottom() - 1, r.right()); break; case Rot180: tr.setCoords(s.width() - r.x() - 1, s.height() - r.y() - 1, s.width() - r.right() - 1, s.height() - r.bottom() - 1); break; case Rot270: tr.setCoords(r.y(), s.width() - r.x() - 1, r.bottom(), s.width() - r.right() - 1); break; } return correctNormalized(tr);}/*! \reimp*/QRegion QTransformedScreen::mapToDevice(const QRegion &rgn, const QSize &s) const{ if (d_ptr->transformation == None) return rgn;#ifdef QT_REGION_DEBUG qDebug() << "mapToDevice size" << s << "rgn: " << rgn;#endif QRect tr; QRegion trgn; QVector<QRect> a = rgn.rects(); const QRect *r = a.data(); int w = s.width(); int h = s.height(); int size = a.size(); switch (d_ptr->transformation) { case None: break; case Rot90: for (int i = 0; i < size; i++, r++) { tr.setCoords(r->y(), w - r->x() - 1, r->bottom(), w - r->right() - 1); trgn |= correctNormalized(tr); } break; case Rot180: for (int i = 0; i < size; i++, r++) { tr.setCoords(w - r->x() - 1, h - r->y() - 1, w - r->right() - 1, h - r->bottom() - 1); trgn |= correctNormalized(tr); } break; case Rot270: for (int i = 0; i < size; i++, r++) { tr.setCoords(h - r->y() - 1, r->x(), h - r->bottom() - 1, r->right()); trgn |= correctNormalized(tr); } break; }#ifdef QT_REGION_DEBUG qDebug() << "mapToDevice trgn: " << trgn;#endif return trgn;}/*! \reimp*/QRegion QTransformedScreen::mapFromDevice(const QRegion &rgn, const QSize &s) const{ if (d_ptr->transformation == None) return rgn;#ifdef QT_REGION_DEBUG qDebug() << "fromDevice: realRegion count: " << rgn.rects().size() << " isEmpty? " << rgn.isEmpty() << " bounds:" << rgn.boundingRect();#endif QRect tr; QRegion trgn; QVector<QRect> a = rgn.rects(); const QRect *r = a.data(); int w = s.width(); int h = s.height(); int size = a.size(); switch (d_ptr->transformation) { case None: break; case Rot90: for (int i = 0; i < size; i++, r++) { tr.setCoords(h - r->y() - 1, r->x(), h - r->bottom() - 1, r->right()); trgn |= correctNormalized(tr); } break; case Rot180: for (int i = 0; i < size; i++, r++) { tr.setCoords(w - r->x() - 1, h - r->y() - 1, w - r->right() - 1, h - r->bottom() - 1); trgn |= correctNormalized(tr); } break; case Rot270: for (int i = 0; i < size; i++, r++) { tr.setCoords(r->y(), w - r->x() - 1, r->bottom(), w - r->right() - 1); trgn |= correctNormalized(tr); } break; }#ifdef QT_REGION_DEBUG qDebug() << "fromDevice: transRegion count: " << trgn.rects().size() << " isEmpty? " << trgn.isEmpty() << " bounds:" << trgn.boundingRect();#endif return trgn;}/*! \reimp*/void QTransformedScreen::disconnect(){ if (d_ptr->subscreen) { d_ptr->subscreen->disconnect(); delete d_ptr->subscreen; d_ptr->subscreen = 0; }}/*! \reimp*/bool QTransformedScreen::initDevice(){ if (d_ptr->subscreen) return d_ptr->subscreen->initDevice(); return false;}/*! \reimp*/void QTransformedScreen::shutdownDevice(){ if (d_ptr->subscreen) d_ptr->subscreen->shutdownDevice();}/*! \reimp*/void QTransformedScreen::setMode(int w,int h, int d){ if (d_ptr->subscreen) { d_ptr->subscreen->setMode(w, h, d); d_ptr->configure(); exposeRegion(region(), 0); }}/*! \reimp*/bool QTransformedScreen::supportsDepth(int depth) const{ if (d_ptr->subscreen) return d_ptr->subscreen->supportsDepth(depth); return false;}/*! \reimp*/void QTransformedScreen::save(){ if (d_ptr->subscreen) d_ptr->subscreen->save(); QScreen::save();}/*! \reimp*/void QTransformedScreen::restore(){ if (d_ptr->subscreen) d_ptr->subscreen->restore(); QScreen::restore();}/*! \reimp*/void QTransformedScreen::blank(bool on){ if (d_ptr->subscreen) d_ptr->subscreen->blank(on);}/*! \reimp*/bool QTransformedScreen::onCard(const unsigned char *ptr) const{ if (d_ptr->subscreen) return d_ptr->subscreen->onCard(ptr); return false;}/*! \reimp*/bool QTransformedScreen::onCard(const unsigned char *ptr, ulong &offset) const{ if (d_ptr->subscreen) return d_ptr->subscreen->onCard(ptr, offset); return false;}/*! \reimp*/bool QTransformedScreen::isInterlaced() const{ if (d_ptr->subscreen) return d_ptr->subscreen->isInterlaced(); return false;}/*! \reimp*/int QTransformedScreen::memoryNeeded(const QString &str){ if (d_ptr->subscreen) return d_ptr->subscreen->memoryNeeded(str); else return QScreen::memoryNeeded(str);}/*! \reimp*/int QTransformedScreen::sharedRamSize(void *ptr){ if (d_ptr->subscreen) return d_ptr->subscreen->sharedRamSize(ptr); else return QScreen::sharedRamSize(ptr);}/*! \reimp*/void QTransformedScreen::haltUpdates(){ if (d_ptr->subscreen) d_ptr->subscreen->haltUpdates();}/*! \reimp*/void QTransformedScreen::resumeUpdates(){ if (d_ptr->subscreen) d_ptr->subscreen->resumeUpdates();}/*! \reimp*/void QTransformedScreen::setDirty(const QRect& rect){ if (!d_ptr->subscreen) return; const QRect r = mapToDevice(rect, QSize(width(), height())); d_ptr->subscreen->setDirty(r);}/*! \reimp*/QWSWindowSurface* QTransformedScreen::createSurface(QWidget *widget) const{ if (d_ptr->subscreen) return d_ptr->subscreen->createSurface(widget); return QScreen::createSurface(widget);}/*! \reimp*/QList<QScreen*> QTransformedScreen::subScreens() const{ if (d_ptr->subscreen) return d_ptr->subscreen->subScreens(); return QScreen::subScreens();}/*! \reimp*/QRegion QTransformedScreen::region() const{ QRegion deviceRegion; if (d_ptr->subscreen) deviceRegion = d_ptr->subscreen->region(); else deviceRegion = QScreen::region(); const QSize size(deviceWidth(), deviceHeight()); return mapFromDevice(deviceRegion, size);}#endif // QT_NO_QWS_TRANSFORMED
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -