void TextureControl::loadMouseRelative() { MyGUI::IntPoint viewOffset = mView->getViewOffset(); MyGUI::IntCoord viewCoord = mView->getViewCoord(); MyGUI::IntSize canvasSize = mView->getCanvasSize(); MyGUI::IntPoint mousePoint = MyGUI::InputManager::getInstance().getMousePositionByLayer(); // смещение мыши относительно вью MyGUI::IntPoint mouseOffset = mousePoint - mView->getAbsolutePosition() - viewCoord.point(); // смещение нужной точки внутри текстуры в пикселях MyGUI::IntPoint canvasPointOffset((int)(mMouseRelative.left * (float)canvasSize.width), (int)(mMouseRelative.top * (float)canvasSize.height)); // смещение вью в пикселях MyGUI::IntPoint canvasOffset = canvasPointOffset - mouseOffset; mView->setViewOffset(MyGUI::IntPoint(-canvasOffset.left, -canvasOffset.top)); }
size_t WobbleNodeAnimator::animate( bool _update, size_t _quad_count, MyGUI::VectorQuadData& _data, float _time, MyGUI::IVertexBuffer* _buffer, MyGUI::ITexture* _texture, const MyGUI::RenderTargetInfo& _info, const MyGUI::IntCoord& _coord, bool& _isAnimate ) { if (mDestroy) { return _quad_count; } // проверяем смещения виджета if (mOldCoord.empty()) { mOldCoord = _coord; } else if (mOldCoord.size() != _coord.size() && mOldCoord.point() != _coord.point()) { mInertiaPoint.set(0.5, 0.5); mInertiaMode = false; addInertia(MyGUI::FloatPoint(_coord.left-mOldCoord.left, _coord.top-mOldCoord.top)); } else if (mOldCoord.size() != _coord.size()) { mInertiaMode = true; addInertia(MyGUI::FloatPoint(_coord.width - mOldCoord.width, _coord.height-mOldCoord.height)); } else if (mOldCoord.point() != _coord.point()) { const MyGUI::IntPoint& point = MyGUI::InputManager::getInstance().getMousePosition(); mInertiaPoint = MyGUI::FloatPoint((float)(point.left - _coord.left) / (float)_coord.width , (float)(point.top - _coord.top) / (float)_coord.height); mInertiaMode = false; addInertia(MyGUI::FloatPoint(_coord.left-mOldCoord.left, _coord.top-mOldCoord.top)); } mOldCoord = _coord; addTime(_time); bool anim_update = squaredLength(mDragOffset) >= 0.3f; if (!anim_update) { return _quad_count; } _isAnimate = true; _quad_count = tesselation( _quad_count, _data, _texture, _info, _coord); buildQuadVertex(_data); return _quad_count; }