📄 qwidget_qws.cpp
字号:
r.setBottom(tlw->geometry().bottom()); //qDebug("QWidget::setMicroFocusHint %d %d %d %d", r.x(), // r.y(), r.width(), r.height()); QInputContext::setMicroFocusWidget(this); qwsDisplay()->setIMInfo(winid, gp.x(), gp.y(), r); //send font info, ###if necessary qwsDisplay()->setInputFont(winid, font()); }#endif}#endifvoid QWidgetPrivate::updateSystemBackground() {}#ifndef QT_NO_CURSORvoid QWidgetPrivate::setCursor_sys(const QCursor &cursor){ Q_UNUSED(cursor); Q_Q(QWidget); if (q->isVisible()) updateCursor();}void QWidgetPrivate::unsetCursor_sys(){ Q_Q(QWidget); if (q->isVisible()) updateCursor();}#endif //QT_NO_CURSORvoid QWidgetPrivate::setWindowTitle_sys(const QString &caption){ Q_Q(QWidget); QWidget::qwsDisplay()->setWindowCaption(q, caption);}void QWidgetPrivate::setWindowIcon_sys(bool /*forceReset*/){#if 0 QTLWExtra* x = d->topData(); delete x->icon; x->icon = 0; QBitmap mask; if (unscaledPixmap.isNull()) { } else { QImage unscaledIcon = unscaledPixmap.toImage(); QPixmap pixmap = QPixmap::fromImage(unscaledIcon.scale(16, 16, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); x->icon = new QPixmap(pixmap); mask = pixmap.mask() ? *pixmap.mask() : pixmap.createHeuristicMask(); }#endif}void QWidgetPrivate::setWindowIconText_sys(const QString &iconText){ Q_UNUSED(iconText);}void QWidget::grabMouse(){ if (qt_mouseGrb) qt_mouseGrb->releaseMouse(); qwsDisplay()->grabMouse(this,true); qt_mouseGrb = this; qt_pressGrab = 0;}#ifndef QT_NO_CURSORvoid QWidget::grabMouse(const QCursor &cursor){ if (qt_mouseGrb) qt_mouseGrb->releaseMouse(); qwsDisplay()->grabMouse(this,true); qwsDisplay()->selectCursor(this, cursor.handle()); qt_mouseGrb = this; qt_pressGrab = 0;}#endifvoid QWidget::releaseMouse(){ if (qt_mouseGrb == this) { qwsDisplay()->grabMouse(this,false); qt_mouseGrb = 0; }}void QWidget::grabKeyboard(){ if (keyboardGrb) keyboardGrb->releaseKeyboard(); qwsDisplay()->grabKeyboard(this, true); keyboardGrb = this;}void QWidget::releaseKeyboard(){ if (keyboardGrb == this) { qwsDisplay()->grabKeyboard(this, false); keyboardGrb = 0; }}QWidget *QWidget::mouseGrabber(){ if (qt_mouseGrb) return qt_mouseGrb; return qt_pressGrab;}QWidget *QWidget::keyboardGrabber(){ return keyboardGrb;}void QWidget::activateWindow(){ QWidget *tlw = window(); if (tlw->isVisible()) { Q_ASSERT(tlw->testAttribute(Qt::WA_WState_Created)); qwsDisplay()->requestFocus(tlw->internalWinId(), true); }}void QWidgetPrivate::dirtyWidget_sys(const QRegion &rgn){ Q_Q(QWidget); QWidget *tlw = q->window(); QWidgetBackingStore *wbs = tlw->d_func()->topData()->backingStore; QRegion wrgn(rgn); if (tlw != q) { QPoint offs(q->mapTo(tlw, QPoint())); wrgn.translate(offs); } QWSWindowSurface *surface = static_cast<QWSWindowSurface*>(wbs->windowSurface); if (surface) { surface->setDirty(wrgn);#ifdef Q_BACKINGSTORE_SUBSURFACES // dirty on all subsurfaces... QList<QWindowSurface*> subSurfaces = wbs->subSurfaces; // XXX: hw: only if region intersects any of the subsurfaces for (int i = 0; i < subSurfaces.size(); ++i) { QWSWindowSurface *s = static_cast<QWSWindowSurface*>(subSurfaces.at(i)); QPoint p = s->window()->mapTo(tlw, QPoint()); // must use widget? s->setDirty(wrgn.translated(-p)); }#endif // Q_BACKINGSTORE_SUBSURFACES }}void QWidgetPrivate::cleanWidget_sys(const QRegion& rgn){ Q_UNUSED(rgn);}/* Should we require that q is a toplevel window ??? Used by QWSManager */void QWidgetPrivate::blitToScreen(const QRegion &globalrgn){ Q_Q(QWidget); QWidget *win = q->window(); QBrush bgBrush = win->palette().brush(win->backgroundRole()); bool opaque = bgBrush.style() == Qt::NoBrush || bgBrush.isOpaque(); QWidget::qwsDisplay()->repaintRegion(win->data->winid, win->windowFlags(), opaque, globalrgn);}void QWidgetPrivate::show_sys(){ Q_Q(QWidget); q->setAttribute(Qt::WA_Mapped); if (q->isWindow()) { if (QWindowSurface *surface = q->windowSurface()) { const QRect frameRect = q->frameGeometry(); if (surface->geometry() != frameRect) surface->setGeometry(frameRect); } QRegion r = localRequestedRegion();#ifndef QT_NO_QWS_MANAGER if (extra && extra->topextra && extra->topextra->qwsManager) { r.translate(data.crect.topLeft()); r += extra->topextra->qwsManager->region(); r.translate(-data.crect.topLeft()); }#endif data.fstrut_dirty = true; invalidateBuffer(r); if (q->windowType() != Qt::Popup && q->windowType() != Qt::Tool && q->windowType() != Qt::ToolTip ) { QWidget::qwsDisplay()->requestFocus(data.winid,true); } bool staysontop = (q->windowFlags() & Qt::WindowStaysOnTopHint) || (q->windowState() & Qt::WindowFullScreen) || q->windowType() == Qt::Popup; QWSChangeAltitudeCommand::Altitude altitude; altitude = staysontop ? QWSChangeAltitudeCommand::StaysOnTop : QWSChangeAltitudeCommand::Raise; QWidget::qwsDisplay()->setAltitude(data.winid, altitude, true); }#ifdef Q_BACKINGSTORE_SUBSURFACES else if (q->windowSurface()) { QWSWindowSurface *surface; surface = static_cast<QWSWindowSurface*>(q->windowSurface()); const QPoint p = q->mapToGlobal(QPoint()); surface->setGeometry(QRect(p, q->size())); }#endif if (!q->window()->data->in_show) { invalidateBuffer(q->rect()); }}void QWidgetPrivate::hide_sys(){ Q_Q(QWidget); deactivateWidgetCleanup(); if (q->isWindow()) { q->releaseMouse();// requestWindowRegion(QRegion()); extra->topextra->backingStore->releaseBuffer(); QWidget::qwsDisplay()->requestFocus(data.winid,false); } else { QWidget *p = q->parentWidget(); if (p &&p->isVisible()) { invalidateBuffer(q->rect()); } }}static Qt::WindowStates effectiveState(Qt::WindowStates state) { if (state & Qt::WindowMinimized) return Qt::WindowMinimized; else if (state & Qt::WindowFullScreen) return Qt::WindowFullScreen; else if (state & Qt::WindowMaximized) return Qt::WindowMaximized; return Qt::WindowNoState; }void QWidgetPrivate::setMaxWindowState_helper(){ // in_set_window_state is usually set in setWindowState(), but this // function is used in other functions as well // (e.g QApplicationPrivate::setMaxWindowRect()) const uint old_state = data.in_set_window_state; data.in_set_window_state = 1;#ifndef QT_NO_QWS_MANAGER if (extra && extra->topextra && extra->topextra->qwsManager) extra->topextra->qwsManager->maximize(); else#endif { Q_Q(QWidget); const QApplicationPrivate *ap = QApplicationPrivate::instance(); const QRect maxWindowRect = ap->maxWindowRect(getScreen()); q->setGeometry(maxWindowRect); } data.in_set_window_state = old_state;}void QWidget::setWindowState(Qt::WindowStates newstate){ Q_D(QWidget); Qt::WindowStates oldstate = windowState(); if (oldstate == newstate) return; if (isWindow() && !testAttribute(Qt::WA_WState_Created)) create(); data->window_state = newstate; data->in_set_window_state = 1; bool needShow = false; Qt::WindowStates newEffectiveState = effectiveState(newstate); Qt::WindowStates oldEffectiveState = effectiveState(oldstate); if (isWindow() && newEffectiveState != oldEffectiveState) { d->createTLExtra(); if (oldEffectiveState == Qt::WindowNoState) { //normal d->topData()->normalGeometry = geometry(); } else if (oldEffectiveState == Qt::WindowFullScreen) { setParent(0, d->topData()->savedFlags); needShow = true; } else if (oldEffectiveState == Qt::WindowMinimized) { needShow = true; } if (newEffectiveState == Qt::WindowMinimized) { //### not ideal... hide(); needShow = false; } else if (newEffectiveState == Qt::WindowFullScreen) { d->topData()->savedFlags = windowFlags(); setParent(0, Qt::FramelessWindowHint | (windowFlags() & Qt::WindowStaysOnTopHint)); const QRect screen = qApp->desktop()->screenGeometry(qApp->desktop()->screenNumber(this)); move(screen.topLeft()); resize(screen.size()); raise(); needShow = true; } else if (newEffectiveState == Qt::WindowMaximized) { createWinId(); d->setMaxWindowState_helper(); } else { //normal QRect r = d->topData()->normalGeometry; if (r.width() >= 0) { d->topData()->normalGeometry = QRect(0,0,-1,-1); setGeometry(r); } } } data->in_set_window_state = 0; if (needShow) show(); if (newstate & Qt::WindowActive) activateWindow(); QWindowStateChangeEvent e(oldstate); QApplication::sendEvent(this, &e);}void QWidgetPrivate::setFocus_sys(){}void QWidgetPrivate::raise_sys(){ Q_Q(QWidget); //@@@ transaction if (q->isWindow()) { Q_ASSERT(q->testAttribute(Qt::WA_WState_Created)); QWidget::qwsDisplay()->setAltitude(q->internalWinId(), QWSChangeAltitudeCommand::Raise); // XXX: subsurfaces?#ifdef QT_NO_WINDOWGROUPHINT#else QObjectList childObjects = q->children(); if (!childObjects.isEmpty()) { QWidgetList toraise; for (int i = 0; i < childObjects.size(); ++i) { QObject *obj = childObjects.at(i); if (obj->isWidgetType()) { QWidget* w = static_cast<QWidget*>(obj); if (w->isWindow()) toraise.append(w); } } for (int i = 0; i < toraise.size(); ++i) { QWidget *w = toraise.at(i); if (w->isVisible()) w->raise(); } }#endif // QT_NO_WINDOWGROUPHINT } else { setDirtyOpaqueRegion(); invalidateBuffer(q->rect()); }}void QWidgetPrivate::lower_sys(){ Q_Q(QWidget); if (q->isWindow()) { Q_ASSERT(q->testAttribute(Qt::WA_WState_Created)); QWidget::qwsDisplay()->setAltitude(data.winid, QWSChangeAltitudeCommand::Lower); } else if (QWidget *p = q->parentWidget()) { setDirtyOpaqueRegion(); p->d_func()->invalidateBuffer(q->geometry()); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -