bool ChessModel::isWin(char player) { if (player == 'A') { if (!posB[24].first || !posB[24].second) { return 1; } for (int i = 0; i < 25; i++) for (int j = 0; j < 8; j++) { QPair<int, int> tmp = posB[i]; tmp.first += dx[j]; tmp.second += dy[j]; if (isMovable('B', posB[i], tmp)) return 0; } return 1; } else { if (!posA[24].first || !posA[24].second) { qDebug() << "FAIL"; return 1; } for (int i = 0; i < 25; i++) for (int j = 0; j < 8; j++) { QPair<int, int> tmp = posA[i], tt; tt = posA[i]; tt.first = 14 - tt.first; tt.second = 6 - tt.second; tmp.first += dx[j]; tmp.second += dy[j]; tmp.first = 14 - tmp.first; tmp.second = 6 - tmp.second; if (isMovable('A', tt, tmp)) return 0; } return 1; } }
void KTabBar::mouseMoveEvent( QMouseEvent *event ) { if ( event->buttons() == Qt::LeftButton && !isMovable() ) { int tab = selectTab( event->pos() ); if ( d->mDragSwitchTab && tab != d->mDragSwitchTab ) { d->mActivateDragSwitchTabTimer->stop(); d->mDragSwitchTab = 0; } int delay = KGlobalSettings::dndEventDelay(); QPoint newPos = event->pos(); if ( newPos.x() > d->mDragStart.x() + delay || newPos.x() < d->mDragStart.x() - delay || newPos.y() > d->mDragStart.y() + delay || newPos.y() < d->mDragStart.y() - delay ) { if ( tab != -1 ) { emit initiateDrag( tab ); return; } } } else if ( event->buttons() == Qt::MidButton && !isMovable() ) { if ( d->mReorderStartTab == -1 ) { int delay = KGlobalSettings::dndEventDelay(); QPoint newPos = event->pos(); if ( newPos.x() > d->mDragStart.x() + delay || newPos.x() < d->mDragStart.x() - delay || newPos.y() > d->mDragStart.y() + delay || newPos.y() < d->mDragStart.y() - delay ) { int tab = selectTab( event->pos() ); if ( tab != -1 && d->mTabReorderingEnabled ) { d->mReorderStartTab = tab; grabMouse( Qt::SizeAllCursor ); return; } } } else { int tab = selectTab( event->pos() ); if ( tab != -1 ) { int reorderStopTab = tab; if ( d->mReorderStartTab != reorderStopTab && d->mReorderPreviousTab != reorderStopTab ) { emit moveTab( d->mReorderStartTab, reorderStopTab ); d->mReorderPreviousTab = d->mReorderStartTab; d->mReorderStartTab = reorderStopTab; return; } } } } else if ( event->button() == Qt::NoButton && event->buttons() == Qt::MidButton && isMovable() ) { // compatibility feature for old middle mouse tab moving d->mMiddleMouseTabMoveInProgress = true; event->accept(); QMouseEvent fakedMouseEvent(event->type(), event->pos(), event->button(), Qt::LeftButton, event->modifiers()); QCoreApplication::sendEvent(this, &fakedMouseEvent); return; } QTabBar::mouseMoveEvent( event ); }
int QTabBar::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QWidget::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 8) qt_static_metacall(this, _c, _id, _a); _id -= 8; } #ifndef QT_NO_PROPERTIES else if (_c == QMetaObject::ReadProperty) { void *_v = _a[0]; switch (_id) { case 0: *reinterpret_cast< Shape*>(_v) = shape(); break; case 1: *reinterpret_cast< int*>(_v) = currentIndex(); break; case 2: *reinterpret_cast< int*>(_v) = count(); break; case 3: *reinterpret_cast< bool*>(_v) = drawBase(); break; case 4: *reinterpret_cast< QSize*>(_v) = iconSize(); break; case 5: *reinterpret_cast< Qt::TextElideMode*>(_v) = elideMode(); break; case 6: *reinterpret_cast< bool*>(_v) = usesScrollButtons(); break; case 7: *reinterpret_cast< bool*>(_v) = tabsClosable(); break; case 8: *reinterpret_cast< SelectionBehavior*>(_v) = selectionBehaviorOnRemove(); break; case 9: *reinterpret_cast< bool*>(_v) = expanding(); break; case 10: *reinterpret_cast< bool*>(_v) = isMovable(); break; case 11: *reinterpret_cast< bool*>(_v) = documentMode(); break; } _id -= 12; } else if (_c == QMetaObject::WriteProperty) { void *_v = _a[0]; switch (_id) { case 0: setShape(*reinterpret_cast< Shape*>(_v)); break; case 1: setCurrentIndex(*reinterpret_cast< int*>(_v)); break; case 3: setDrawBase(*reinterpret_cast< bool*>(_v)); break; case 4: setIconSize(*reinterpret_cast< QSize*>(_v)); break; case 5: setElideMode(*reinterpret_cast< Qt::TextElideMode*>(_v)); break; case 6: setUsesScrollButtons(*reinterpret_cast< bool*>(_v)); break; case 7: setTabsClosable(*reinterpret_cast< bool*>(_v)); break; case 8: setSelectionBehaviorOnRemove(*reinterpret_cast< SelectionBehavior*>(_v)); break; case 9: setExpanding(*reinterpret_cast< bool*>(_v)); break; case 10: setMovable(*reinterpret_cast< bool*>(_v)); break; case 11: setDocumentMode(*reinterpret_cast< bool*>(_v)); break; } _id -= 12; } else if (_c == QMetaObject::ResetProperty) { _id -= 12; } else if (_c == QMetaObject::QueryPropertyDesignable) { _id -= 12; } else if (_c == QMetaObject::QueryPropertyScriptable) { _id -= 12; } else if (_c == QMetaObject::QueryPropertyStored) { _id -= 12; } else if (_c == QMetaObject::QueryPropertyEditable) { _id -= 12; } else if (_c == QMetaObject::QueryPropertyUser) { _id -= 12; } #endif // QT_NO_PROPERTIES return _id; }
void WGraphicsRectItem::mouseReleaseEvent(WGraphicsSceneMouseEvent* event) { if (isSelected() && (event->button() == Ws::LeftButton) && _dragging) { _dragging = false; WWorldPointF pos = event->scenePos(); WMatrix matrix = getRotateMatrix_1(); //获取逆向矩阵 if (_select_flag != SF_ROTATE) //矩形不是在旋转 { if (_select_flag != SF_CONTENT || isMovable()) { const int (&f)[4] = ADJUST_TABLE[bit(_select_flag)]; WWorldPointF offset = pos - scene()->dragStartPos(); WWorldRectF rect = data()->rect.adjusted(offset.x() * f[0], offset.y() * f[1], offset.x() * f[2], offset.y() * f[3]); setRect(rect, false, true); } } else //矩形在旋转 { WWorldPointF c = data()->rect.center(); double ag = WWorldLineF(c, pos).angle() - 90; setAngle(data()->angle + ag, false, true); } scene()->update(); } }
void ToolBar::updateMenu() { QMainWindow *mainWindow = qobject_cast<QMainWindow *>(parentWidget()); Q_ASSERT(mainWindow != 0); const Qt::ToolBarArea area = mainWindow->toolBarArea(this); const Qt::ToolBarAreas areas = allowedAreas(); movableAction->setChecked(isMovable()); allowLeftAction->setChecked(isAreaAllowed(Qt::LeftToolBarArea)); allowRightAction->setChecked(isAreaAllowed(Qt::RightToolBarArea)); allowTopAction->setChecked(isAreaAllowed(Qt::TopToolBarArea)); allowBottomAction->setChecked(isAreaAllowed(Qt::BottomToolBarArea)); if (allowedAreasActions->isEnabled()) { allowLeftAction->setEnabled(area != Qt::LeftToolBarArea); allowRightAction->setEnabled(area != Qt::RightToolBarArea); allowTopAction->setEnabled(area != Qt::TopToolBarArea); allowBottomAction->setEnabled(area != Qt::BottomToolBarArea); } leftAction->setChecked(area == Qt::LeftToolBarArea); rightAction->setChecked(area == Qt::RightToolBarArea); topAction->setChecked(area == Qt::TopToolBarArea); bottomAction->setChecked(area == Qt::BottomToolBarArea); if (areaActions->isEnabled()) { leftAction->setEnabled(areas & Qt::LeftToolBarArea); rightAction->setEnabled(areas & Qt::RightToolBarArea); topAction->setEnabled(areas & Qt::TopToolBarArea); bottomAction->setEnabled(areas & Qt::BottomToolBarArea); } }
void StOutIZ3D::beforeClose() { if(isMovable() && myWasUsed) { mySettings->saveInt32Rect(ST_SETTING_WINDOWPOS, StWindow::getWindowedPlacement()); } mySettings->saveParam(params.Glasses); mySettings->flush(); }
cControl *cControl::getMovableControl() { if (isMovable()) { return this; } else if (parent_) { return parent_->getMovableControl(); } else { return 0; } }
int QToolBar::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QWidget::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 13) qt_static_metacall(this, _c, _id, _a); _id -= 13; } #ifndef QT_NO_PROPERTIES else if (_c == QMetaObject::ReadProperty) { void *_v = _a[0]; switch (_id) { case 0: *reinterpret_cast< bool*>(_v) = isMovable(); break; case 1: *reinterpret_cast< Qt::ToolBarAreas*>(_v) = allowedAreas(); break; case 2: *reinterpret_cast< Qt::Orientation*>(_v) = orientation(); break; case 3: *reinterpret_cast< QSize*>(_v) = iconSize(); break; case 4: *reinterpret_cast< Qt::ToolButtonStyle*>(_v) = toolButtonStyle(); break; case 5: *reinterpret_cast< bool*>(_v) = isFloating(); break; case 6: *reinterpret_cast< bool*>(_v) = isFloatable(); break; } _id -= 7; } else if (_c == QMetaObject::WriteProperty) { void *_v = _a[0]; switch (_id) { case 0: setMovable(*reinterpret_cast< bool*>(_v)); break; case 1: setAllowedAreas(*reinterpret_cast< Qt::ToolBarAreas*>(_v)); break; case 2: setOrientation(*reinterpret_cast< Qt::Orientation*>(_v)); break; case 3: setIconSize(*reinterpret_cast< QSize*>(_v)); break; case 4: setToolButtonStyle(*reinterpret_cast< Qt::ToolButtonStyle*>(_v)); break; case 6: setFloatable(*reinterpret_cast< bool*>(_v)); break; } _id -= 7; } else if (_c == QMetaObject::ResetProperty) { _id -= 7; } else if (_c == QMetaObject::QueryPropertyDesignable) { bool *_b = reinterpret_cast<bool*>(_a[0]); switch (_id) { case 0: *_b = (qobject_cast<QMainWindow*>(parentWidget())!=0); break; case 1: *_b = (qobject_cast<QMainWindow*>(parentWidget())!=0); break; case 2: *_b = (qobject_cast<QMainWindow*>(parentWidget())==0); break; } _id -= 7; } else if (_c == QMetaObject::QueryPropertyScriptable) { _id -= 7; } else if (_c == QMetaObject::QueryPropertyStored) { _id -= 7; } else if (_c == QMetaObject::QueryPropertyEditable) { _id -= 7; } else if (_c == QMetaObject::QueryPropertyUser) { _id -= 7; } #endif // QT_NO_PROPERTIES return _id; }
void KBBGraphicsItemOnBox::mousePressEvent (QGraphicsSceneMouseEvent* event) { m_dragXPos = x(); m_dragYPos = y(); m_dragX = event->scenePos().x(); m_dragY = event->scenePos().y(); if (isMovable()) { setCursor(Qt::ClosedHandCursor); removeInteractionInfos(); } }
StOutIZ3D::StOutIZ3D(const StHandle<StResourceManager>& theResMgr, const StNativeWin_t theParentWindow) : StWindow(theResMgr, theParentWindow), mySettings(new StSettings(theResMgr, ST_OUT_PLUGIN_NAME)), myFrBuffer(new StGLStereoFrameBuffer()), myToCompressMem(myInstancesNb.increment() > 1), myIsBroken(false) { const StSearchMonitors& aMonitors = StWindow::getMonitors(); // detect connected displays int aSupportLevel = ST_DEVICE_SUPPORT_NONE; for(size_t aMonIter = 0; aMonIter < aMonitors.size(); ++aMonIter) { const StMonitor& aMon = aMonitors[aMonIter]; if(isFrontDisplay(aMon.getPnPId()) || isBackDisplay (aMon.getPnPId())) { aSupportLevel = ST_DEVICE_SUPPORT_PREFER; // we sure that iZ3D connected break; }/* else if(aMon.getPnPId() == IZ3D_MODEL_MATROXTH2GO0 || aMon.getPnPId() == IZ3D_MODEL_MATROXTH2GO1) { aSupportLevel = ST_DEVICE_SUPPORT_FULL; // is it possible }*/ } // devices list StHandle<StOutDevice> aDevice = new StOutDevice(); aDevice->PluginId = ST_OUT_PLUGIN_NAME; aDevice->DeviceId = stCString("iZ3D"); aDevice->Priority = aSupportLevel; aDevice->Name = stCString("IZ3D Display"); myDevices.add(aDevice); // shader switch option params.Glasses = new StEnumParam(myShaders.getMode(), stCString("tableId"), stCString("tableId")); params.Glasses->signals.onChanged.connect(&myShaders, &StOutIZ3DShaders::doSetMode); // load window position if(isMovable()) { StRect<int32_t> aRect; if(!mySettings->loadInt32Rect(ST_SETTING_WINDOWPOS, aRect)) { aRect = defaultRect(); } StWindow::setPlacement(aRect, true); } updateStrings(); StWindow::setTitle("sView - iZ3D Renderer"); // load parameters mySettings->loadParam(params.Glasses); // request slave window StWindow::setAttribute(StWinAttr_SlaveCfg, StWinSlave_slaveSync); }
KBBGraphicsItemOnBox::KBBGraphicsItemOnBox(KBBScalableGraphicWidget::itemType itemType, KBBScalableGraphicWidget* parent, KBBThemeManager* themeManager, const int boxPosition, const int columns, const int rows) : KBBGraphicsItem(itemType, parent->scene(), themeManager), KBBItemWithPosition() { m_widget = parent; m_columns = columns; m_rows = rows; m_itemType = itemType; setBoxPosition(boxPosition); if (isMovable()) { setAcceptDrops(true); setFlag(QGraphicsItem::ItemIsMovable); } }
void StOutIZ3D::releaseResources() { if(!myContext.isNull()) { myShaders.release(*myContext); myTexTableOld.release(*myContext); myTexTableNew.release(*myContext); myFrBuffer->release(*myContext); } myContext.nullify(); // read windowed placement StWindow::hide(); if(isMovable()) { StWindow::setFullScreen(false); } }
void Window::mouseDragged(MouseEvent& mouseEvent) { if (mouseEvent.isConsumed() || mouseEvent.getSource() != this) { return; } if (isMovable() && mMoved) { setPosition(mouseEvent.getX() - mDragOffsetX + getX(), mouseEvent.getY() - mDragOffsetY + getY()); } mouseEvent.consume(); }
void ToolBar::mouseMoveEvent(QMouseEvent *e) { if (isMovable() && (e->buttons() & Qt::LeftButton) && (MouseStart - e->pos()).manhattanLength() >= 15) { QAction *action = actionAt(MouseStart); if (!action) return; foreach (const ToolBarAction &toolBarAction, ToolBarActions) { if (toolBarAction.action == action) { QDrag *drag = new ActionDrag(toolBarAction.actionName, toolBarAction.style, this); drag->exec(Qt::MoveAction); e->accept(); } } }
void SeparateTabBar::mouseMoveEvent (QMouseEvent *event) { if (isMovable ()) { QTabBar::mouseMoveEvent (event); return; } if (!(event->buttons () & Qt::LeftButton)) return; if ((event->pos () - DragStartPos_).manhattanLength () < QApplication::startDragDistance ()) return; const int dragIdx = tabAt (DragStartPos_); auto widget = TabWidget_->Widget (dragIdx); auto itw = qobject_cast<ITabWidget*> (widget); if (!itw) { qWarning () << Q_FUNC_INFO << "widget at" << dragIdx << "doesn't implement ITabWidget"; return; } auto px = QPixmap::grabWidget (widget); px = px.scaledToWidth (px.width () / 2, Qt::SmoothTransformation); auto idt = qobject_cast<IDNDTab*> (widget); auto data = new QMimeData (); if (!idt || QApplication::keyboardModifiers () == Qt::ControlModifier) { data->setData ("x-leechcraft/tab-drag-action", "reordering"); data->setData ("x-leechcraft/tab-tabclass", itw->GetTabClassInfo ().TabClass_); } else if (idt) idt->FillMimeData (data); auto drag = new QDrag (this); drag->setMimeData (data); drag->setPixmap (px); drag->exec (); }
Ws::CursorShape WGraphicsRectItem::getCursorShape(int flag) { switch(flag) { case SF_NONE : return Ws::ArrowCursor; case SF_TL : return Ws::SizeFDiagCursor; case SF_TC : return Ws::SizeVerCursor; case SF_TR : return Ws::SizeBDiagCursor; case SF_RC : return Ws::SizeHorCursor; case SF_BR : return Ws::SizeFDiagCursor; case SF_BC : return Ws::SizeVerCursor; case SF_BL : return Ws::SizeBDiagCursor; case SF_LC : return Ws::SizeHorCursor; case SF_CONTENT : return isMovable() ? Ws::SizeAllCursor : Ws::ForbiddenCursor; case SF_ROTATE : return Ws::BusyCursor; default: return Ws::ArrowCursor; } }
void KBBGraphicsItemOnBox::mouseReleaseEvent (QGraphicsSceneMouseEvent* event) { // Let's Qt handle the drag en drop QGraphicsItem::mouseReleaseEvent(event); qreal dropX = event->scenePos().x(); qreal dropY = event->scenePos().y(); if ((dropX==m_dragX) && (dropY==m_dragY)) { setCursor(Qt::ArrowCursor); if ((position()!=NO_POSITION) && (position()<(m_columns*m_rows))) m_widget->mouseBoxClick(event->button(), position()); } else if (isMovable()) { setCursor(Qt::ArrowCursor); if ((boxPosition(dropX, dropY)==NO_POSITION) || (boxPosition(dropX, dropY)==boxPosition(m_dragX, m_dragY)) || (boxPosition(dropX, dropY)>=m_columns*m_rows)) // Cancel move setPos(m_dragXPos, m_dragYPos); else { if (m_itemType==KBBScalableGraphicWidget::markerNothing) setBoxPosition(m_widget->moveMarkerNothing(boxPosition(m_dragX, m_dragY), boxPosition(dropX, dropY))); else { int newPos = m_widget->positionAfterMovingBall(boxPosition(m_dragX, m_dragY), boxPosition(dropX, dropY)); // if we do move from outside the board. Because in this case and if the move is OK, we will destroy ourself to put a "real" new ball over the board... So we cannot do anything else more after calling m_widget->moveBall()... if ((m_boxPosition==NO_POSITION) || (m_boxPosition>=(m_columns*m_rows))) { if (newPos==m_boxPosition) setPos(m_dragXPos, m_dragYPos); else m_widget->moveBall(boxPosition(m_dragX, m_dragY), boxPosition(dropX, dropY)); } else setBoxPosition(m_widget->moveBall(boxPosition(m_dragX, m_dragY), boxPosition(dropX, dropY))); } } } }
StOutIZ3D::StOutIZ3D(const StHandle<StResourceManager>& theResMgr, const StNativeWin_t theParentWindow) : StWindow(theResMgr, theParentWindow), mySettings(new StSettings(theResMgr, ST_OUT_PLUGIN_NAME)), myFrBuffer(new StGLStereoFrameBuffer()), myToCompressMem(myInstancesNb.increment() > 1), myIsBroken(false) { const StSearchMonitors& aMonitors = StWindow::getMonitors(); StTranslations aLangMap(getResourceManager(), ST_OUT_PLUGIN_NAME); // about string StString& aTitle = aLangMap.changeValueId(STTR_PLUGIN_TITLE, "sView - iZ3D Output module"); StString& aVerString = aLangMap.changeValueId(STTR_VERSION_STRING, "version"); StString& aDescr = aLangMap.changeValueId(STTR_PLUGIN_DESCRIPTION, "(C) {0} Kirill Gavrilov <{1}>\nOfficial site: {2}\n\nThis library is distributed under LGPL3.0"); myAbout = aTitle + '\n' + aVerString + " " + StVersionInfo::getSDKVersionString() + "\n \n" + aDescr.format("2009-2015", "*****@*****.**", "www.sview.ru"); // detect connected displays int aSupportLevel = ST_DEVICE_SUPPORT_NONE; for(size_t aMonIter = 0; aMonIter < aMonitors.size(); ++aMonIter) { const StMonitor& aMon = aMonitors[aMonIter]; if(isFrontDisplay(aMon.getPnPId()) || isBackDisplay (aMon.getPnPId())) { aSupportLevel = ST_DEVICE_SUPPORT_PREFER; // we sure that iZ3D connected break; }/* else if(aMon.getPnPId() == IZ3D_MODEL_MATROXTH2GO0 || aMon.getPnPId() == IZ3D_MODEL_MATROXTH2GO1) { aSupportLevel = ST_DEVICE_SUPPORT_FULL; // is it possible }*/ } // devices list StHandle<StOutDevice> aDevice = new StOutDevice(); aDevice->PluginId = ST_OUT_PLUGIN_NAME; aDevice->DeviceId = "iZ3D"; aDevice->Priority = aSupportLevel; aDevice->Name = aLangMap.changeValueId(STTR_IZ3D_NAME, "IZ3D Display"); aDevice->Desc = aLangMap.changeValueId(STTR_IZ3D_DESC, "IZ3D Display"); myDevices.add(aDevice); // shader switch option StHandle<StEnumParam> aGlasses = new StEnumParam(myShaders.getMode(), aLangMap.changeValueId(STTR_PARAMETER_GLASSES, "iZ3D glasses")); aGlasses->changeValues().add(aLangMap.changeValueId(STTR_PARAMETER_GLASSES_CLASSIC, "Classic")); aGlasses->changeValues().add(aLangMap.changeValueId(STTR_PARAMETER_GLASSES_MODERN, "Modern")); aGlasses->changeValues().add(aLangMap.changeValueId(STTR_PARAMETER_GLASSES_CLASSIC_FAST, "Classic (fast)")); aGlasses->signals.onChanged.connect(&myShaders, &StOutIZ3DShaders::doSetMode); params.Glasses = aGlasses; // load window position if(isMovable()) { StRect<int32_t> aRect; if(!mySettings->loadInt32Rect(ST_SETTING_WINDOWPOS, aRect)) { aRect = defaultRect(); } StWindow::setPlacement(aRect, true); } StWindow::setTitle("sView - iZ3D Renderer"); // load parameters mySettings->loadParam(ST_SETTING_TABLE, params.Glasses); // request slave window StWindow::setAttribute(StWinAttr_SlaveCfg, StWinSlave_slaveSync); }
void Window::mouseDragged(gcn::MouseEvent &event) { // Let Guichan handle title bar drag gcn::Window::mouseDragged(event); // Keep guichan window inside screen when it may be moved if (isMovable() && mMoved) { int newX = std::max(0, getX()); int newY = std::max(0, getY()); newX = std::min(graphics->getWidth() - getWidth(), newX); newY = std::min(graphics->getHeight() - getHeight(), newY); setPosition(newX, newY); } if (mouseResize && !mMoved) { const int dx = event.getX() - mDragOffsetX; const int dy = event.getY() - mDragOffsetY; gcn::Rectangle newDim = getDimension(); if (mouseResize & (TOP | BOTTOM)) { int newHeight = newDim.height + ((mouseResize & TOP) ? -dy : dy); newDim.height = std::min(mMaxWinHeight, std::max(mMinWinHeight, newHeight)); if (mouseResize & TOP) newDim.y -= newDim.height - getHeight(); } if (mouseResize & (LEFT | RIGHT)) { int newWidth = newDim.width + ((mouseResize & LEFT) ? -dx : dx); newDim.width = std::min(mMaxWinWidth, std::max(mMinWinWidth, newWidth)); if (mouseResize & LEFT) newDim.x -= newDim.width - getWidth(); } // Keep guichan window inside screen (supports resizing any side) if (newDim.x < 0) { newDim.width += newDim.x; newDim.x = 0; } if (newDim.y < 0) { newDim.height += newDim.y; newDim.y = 0; } if (newDim.x + newDim.width > graphics->getWidth()) { newDim.width = graphics->getWidth() - newDim.x; } if (newDim.y + newDim.height > graphics->getHeight()) { newDim.height = graphics->getHeight() - newDim.y; } // Update mouse offset when dragging bottom or right border if (mouseResize & BOTTOM) { mDragOffsetY += newDim.height - getHeight(); } if (mouseResize & RIGHT) { mDragOffsetX += newDim.width - getWidth(); } // Set the new window and content dimensions setDimension(newDim); } }
void WorldViewer::update(double time_diff) { FWK_PROFILE("WorldViewer::update"); Actor *spectator = m_world->refEntity<Actor>(m_spectator); if((int)m_entities.size() != m_world->entityCount()) m_entities.resize(m_world->entityCount()); if(!m_spectator) { for(int n = 0; n < (int)m_entities.size(); n++) { Entity *entity = m_world->refEntity(n); VisEntity &vis_entity = m_entities[n]; vis_entity.ref = entity? entity->ref() : EntityRef(); vis_entity.mode = entity? VisEntity::visible : VisEntity::invisible; vis_entity.occluder_id = -1; } return; } if(!spectator) return; FBox bbox = spectator->boundingBox(); m_cur_pos = bbox.center(); m_eye_pos = asXZY(m_cur_pos.xz(), bbox.min.y + bbox.height() * 0.75f); for(int n = 0; n < (int)m_entities.size(); n++) { Entity *entity = m_world->refEntity(n); VisEntity &vis_entity = m_entities[n]; if(!entity) { vis_entity = VisEntity(); continue; } const auto *desc = m_world->refEntityDesc(n); DASSERT(desc); bool is_visible = m_see_all || spectator == entity || spectator->canSee(entity->ref(), !isMovable(*entity)); if(vis_entity.ref != entity->ref()) { vis_entity = VisEntity(); vis_entity.ref = entity->ref(); vis_entity.mode = is_visible? VisEntity::visible : VisEntity::invisible; } if(is_visible) { vis_entity.occluder_id = desc->occluder_id; if(vis_entity.mode == VisEntity::visible) continue; if(vis_entity.mode == VisEntity::shadowed || vis_entity.mode == VisEntity::pre_blending_out) { vis_entity.shadow.reset(); vis_entity.mode = VisEntity::visible; } else { float blend_value = 0.0; if(vis_entity.mode == VisEntity::blending_in) blend_value = vis_entity.blend_value; else if(vis_entity.mode == VisEntity::blending_out) blend_value = blend_time - vis_entity.blend_value; blend_value += time_diff; vis_entity.mode = blend_value > blend_time? VisEntity::visible : VisEntity::blending_in; vis_entity.blend_value = blend_value; } } else { if(vis_entity.mode == VisEntity::shadowed || vis_entity.mode == VisEntity::invisible) continue; if(vis_entity.mode == VisEntity::visible) { vis_entity.blend_value = 0.0f; vis_entity.mode = VisEntity::pre_blending_out; } if(vis_entity.mode == VisEntity::pre_blending_out) { vis_entity.blend_value += time_diff; if(vis_entity.blend_value > blend_time) { if(isMovable(*entity)) { vis_entity.mode = VisEntity::blending_out; vis_entity.blend_value = vis_entity.blend_value - blend_time; } else { vis_entity.mode = VisEntity::shadowed; vis_entity.occluder_id = desc->occluder_id; vis_entity.shadow.reset(entity->clone()); } } } else { float blend_value = 0.0f; if(vis_entity.mode == VisEntity::blending_in) blend_value = blend_time - vis_entity.blend_value; else if(vis_entity.mode == VisEntity::blending_out) blend_value = vis_entity.blend_value; vis_entity.blend_value = blend_value + time_diff; vis_entity.mode = VisEntity::blending_out; if(vis_entity.blend_value > blend_time) vis_entity.mode = VisEntity::invisible; } } } if(m_occluder_config.update(spectator->boundingBox())) m_world->tileMap().updateVisibility(m_occluder_config); }
void Windowiki::mouseDragged(gcn::MouseEvent &event) { // Let Guichan handle title bar drag gcn::Window::mouseDragged(event); // Keep guichan window inside screen when it may be moved if (isMovable() && mIsMoving) { int newX = std::max(0, getX()); int newY = std::max(0, getY()); newX = std::min(windowikiContainer->getWidth() - getWidth(), newX); newY = std::min(windowikiContainer->getHeight() - getHeight(), newY); setPosition(newX, newY); } if (mMouseResize && !mIsMoving) { const int dx = event.getX() - mDragOffsetX + ((event.getSource() == mGrip) ? mGrip->getX() : 0); const int dy = event.getY() - mDragOffsetY + ((event.getSource() == mGrip) ? mGrip->getY() : 0); gcn::Rectangle newDim = getDimension(); if (mMouseResize & (TOP | BOTTOM)) { int newHeight = newDim.height + ((mMouseResize & TOP) ? -dy : dy); newDim.height = std::min(mMaxWinHeight, std::max(mMinWinHeight, newHeight)); if (mMouseResize & TOP) { newDim.y -= newDim.height - getHeight(); } } if (mMouseResize & (LEFT | RIGHT)) { int newWidth = newDim.width + ((mMouseResize & LEFT) ? -dx : dx); newDim.width = std::min(mMaxWinWidth, std::max(mMinWinWidth, newWidth)); if (mMouseResize & LEFT) { newDim.x -= newDim.width - getWidth(); } } // Keep guichan window inside screen (supports resizing any side) if (newDim.x < 0) { newDim.width += newDim.x; newDim.x = 0; } if (newDim.y < 0) { newDim.height += newDim.y; newDim.y = 0; } if (newDim.x + newDim.width > windowikiContainer->getWidth()) { newDim.width = windowikiContainer->getWidth() - newDim.x; } if (newDim.y + newDim.height > windowikiContainer->getHeight()) { newDim.height = windowikiContainer->getHeight() - newDim.y; } // Update mouse offset when dragging bottom or right border if (mMouseResize & BOTTOM) { mDragOffsetY += newDim.height - getHeight(); } if (mMouseResize & RIGHT) { mDragOffsetX += newDim.width - getWidth(); } // Set the new window and content dimensions setDimension(newDim); const gcn::Rectangle area = getChildrenArea(); mChrome->setSize(area.width, area.height); } }
void WGraphicsRectItem::paint(WPainter* painter) { WPainterProxy proxy(painter); painter->setRenderHint(Ws::Antialiasing, false); painter->setRenderHint(Ws::TextAntialiasing, false); painter->setWorldTransform(getRotateMatrix(), true); //设置旋转矩阵 painter->setBrush(brush()); painter->setPen(pen()); painter->drawRect(data()->rect); //绘制矩形 if (isSelected()) //矩形被选中,绘制所有的控制点 { painter->drawLine(WWorldLineF(_rotate_pt, WWorldPointF(_rotate_pt.x(), data()->rect.top()))); painter->setPen(CP_PEN); painter->setBrush(CP_BRUSH); for (unsigned i=0; i<array_size(_cp); ++i) { if (i & 1) { painter->drawRect(WWorldRectF(_cp[i].x() - CP_RADIUS, _cp[i].y() - CP_RADIUS, CP_RADIUS * 2, CP_RADIUS * 2)); } else { painter->drawEllipse(WWorldRectF(_cp[i].x() - CP_RADIUS, _cp[i].y() - CP_RADIUS, CP_RADIUS * 2, CP_RADIUS * 2)); } } painter->setBrush(ROTATE_BRUSH); painter->drawEllipse(WWorldRectF(_rotate_pt.x() - CP_RADIUS, _rotate_pt.y() - CP_RADIUS, CP_RADIUS * 2, CP_RADIUS * 2)); } if (_dragging) //矩形在拖动,绘制正在拖动的矩形 { WWorldPointF pos = scene()->attachedPoint(scene()->mousePos()); WPen dragPen = data()->pen; WBrush dragBrush = data()->brush; dragPen.setColor(dragPen.color().lighter(2.0)); dragBrush.setColor(dragBrush.color().lighter(2.0)); painter->setPen(dragPen); painter->setBrush(dragBrush); if (_select_flag != SF_ROTATE) { if (_select_flag != SF_CONTENT || isMovable()) { WWorldPointF offset = pos - scene()->dragStartPos(); const int (&f)[4] = ADJUST_TABLE[bit(_select_flag)]; painter->drawRect(data()->rect.adjusted(offset.x() * f[0], offset.y() * f[1], offset.x() * f[2], offset.y() * f[3])); } } else { painter->setWorldTransform(getRotateMatrix_1(), true); WWorldPointF c = data()->rect.center(); double ag = WWorldLineF(c, pos).angle() - 90; painter->setWorldTransform(WMatrix().translate(-c.x(), -c.y()) * WMatrix().rotate(ag + data()->angle) * WMatrix().translate(c.x(), c.y())); painter->drawRect(data()->rect); } } }
void WGraphicsRectItem::mouseMoveEvent(WGraphicsSceneMouseEvent* event) { WMatrix matrix = getRotateMatrix_1(); WWorldPointF pos = matrix.map(event->scenePos()); if (isSelected()) { if (event->buttons() & Ws::LeftButton) //drag move { _dragging = true; WWorldPointF lastPos = matrix.map(event->lastScenePos()); WWorldPointF dragPos = matrix.map(scene()->dragStartPos()); WWorldRectF r = boundingRect(); if (_select_flag != SF_ROTATE) //矩形不是在旋转 { if (_select_flag != SF_CONTENT || isMovable()) //矩形不是整个被选中 { const int (&f)[4] = ADJUST_TABLE[bit(_select_flag)]; WWorldPointF offsetFrom = lastPos - dragPos; WWorldPointF offsetTo = pos - dragPos; WWorldRectF rectFrom = data()->rect.adjusted(offsetFrom.x() * f[0], offsetFrom.y() * f[1], offsetFrom.x() * f[2], offsetFrom.y() * f[3]); WWorldRectF rectTo = data()->rect.adjusted(offsetTo.x() * f[0], offsetTo.y() * f[1], offsetTo.x() * f[2], offsetTo.y() * f[3]); scene()->update(expanded(rectFrom | rectTo | boundingRect())); } } else //矩形在旋转 { double radius = std::max(data()->rect.width() / 2, data()->rect.height() / 2); WWorldPointF c = data()->rect.center(); scene()->update(WWorldRectF(c.x(), c.y(), 0.0, 0.0).adjusted(-radius, -radius, radius, radius)); } } else //update select flag (status transfer) { int old_flag = _select_flag; if (!contains(pos)) //other status ---> none selected { _select_flag = SF_NONE; } else { unsigned i=0; unsigned size = array_size(_cp); for (; i<size; ++i) { if (distance(pos, _cp[i]) < CP_RADIUS) //detect wheter control point is selected { _select_flag = (1 << i); //control point _cp[i] is presently selected break; } } if (i == size) { _select_flag = (distance(_rotate_pt, pos) < CP_RADIUS) ? SF_ROTATE : SF_CONTENT; } } if (_select_flag != old_flag) //select status changed { scene()->update(boundingRect()); event->widget()->setCursor(WCursor(getCursorShape(_select_flag))); } } } }
int QToolBar::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QWidget::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: actionTriggered((*reinterpret_cast< QAction*(*)>(_a[1]))); break; case 1: movableChanged((*reinterpret_cast< bool(*)>(_a[1]))); break; case 2: allowedAreasChanged((*reinterpret_cast< Qt::ToolBarAreas(*)>(_a[1]))); break; case 3: orientationChanged((*reinterpret_cast< Qt::Orientation(*)>(_a[1]))); break; case 4: iconSizeChanged((*reinterpret_cast< const QSize(*)>(_a[1]))); break; case 5: toolButtonStyleChanged((*reinterpret_cast< Qt::ToolButtonStyle(*)>(_a[1]))); break; case 6: topLevelChanged((*reinterpret_cast< bool(*)>(_a[1]))); break; case 7: setIconSize((*reinterpret_cast< const QSize(*)>(_a[1]))); break; case 8: setToolButtonStyle((*reinterpret_cast< Qt::ToolButtonStyle(*)>(_a[1]))); break; case 9: d_func()->_q_toggleView((*reinterpret_cast< bool(*)>(_a[1]))); break; case 10: d_func()->_q_updateIconSize((*reinterpret_cast< const QSize(*)>(_a[1]))); break; case 11: d_func()->_q_updateToolButtonStyle((*reinterpret_cast< Qt::ToolButtonStyle(*)>(_a[1]))); break; default: ; } _id -= 12; } #ifndef QT_NO_PROPERTIES else if (_c == QMetaObject::ReadProperty) { void *_v = _a[0]; switch (_id) { case 0: *reinterpret_cast< bool*>(_v) = isMovable(); break; case 1: *reinterpret_cast< Qt::ToolBarAreas*>(_v) = allowedAreas(); break; case 2: *reinterpret_cast< Qt::Orientation*>(_v) = orientation(); break; case 3: *reinterpret_cast< QSize*>(_v) = iconSize(); break; case 4: *reinterpret_cast< Qt::ToolButtonStyle*>(_v) = toolButtonStyle(); break; case 5: *reinterpret_cast< bool*>(_v) = isFloating(); break; case 6: *reinterpret_cast< bool*>(_v) = isFloatable(); break; } _id -= 7; } else if (_c == QMetaObject::WriteProperty) { void *_v = _a[0]; switch (_id) { case 0: setMovable(*reinterpret_cast< bool*>(_v)); break; case 1: setAllowedAreas(*reinterpret_cast< Qt::ToolBarAreas*>(_v)); break; case 2: setOrientation(*reinterpret_cast< Qt::Orientation*>(_v)); break; case 3: setIconSize(*reinterpret_cast< QSize*>(_v)); break; case 4: setToolButtonStyle(*reinterpret_cast< Qt::ToolButtonStyle*>(_v)); break; case 6: setFloatable(*reinterpret_cast< bool*>(_v)); break; } _id -= 7; } else if (_c == QMetaObject::ResetProperty) { _id -= 7; } else if (_c == QMetaObject::QueryPropertyDesignable) { bool *_b = reinterpret_cast<bool*>(_a[0]); switch (_id) { case 0: *_b = (qobject_cast<QMainWindow*>(parentWidget())!=0); break; case 1: *_b = (qobject_cast<QMainWindow*>(parentWidget())!=0); break; case 2: *_b = (qobject_cast<QMainWindow*>(parentWidget())==0); break; } _id -= 7; } else if (_c == QMetaObject::QueryPropertyScriptable) { _id -= 7; } else if (_c == QMetaObject::QueryPropertyStored) { _id -= 7; } else if (_c == QMetaObject::QueryPropertyEditable) { _id -= 7; } else if (_c == QMetaObject::QueryPropertyUser) { _id -= 7; } #endif // QT_NO_PROPERTIES return _id; }