| 216 | } |
| 217 | |
| 218 | Uint32 UIImageViewer::onMessage( const NodeMessage* msg ) { |
| 219 | if ( msg->getMsg() == NodeMessage::MouseDown ) { |
| 220 | if ( ( msg->getFlags() & EE_BUTTON_LMASK ) && getEventDispatcher() && |
| 221 | getEventDispatcher()->getNodeDragging() == nullptr ) { |
| 222 | mImage->setFocus(); |
| 223 | mImage->startDragging( getEventDispatcher()->getMousePosf() ); |
| 224 | return 1; |
| 225 | } |
| 226 | if ( msg->getFlags() & EE_BUTTON_RMASK ) { |
| 227 | Line2f line( getEventDispatcher()->getMousePosf(), |
| 228 | mImage->getScreenPos() + mImage->getPixelsSize() * 0.5f ); |
| 229 | mImage->setRotation( line.getAngle() ); |
| 230 | return 1; |
| 231 | } |
| 232 | if ( msg->getFlags() & EE_BUTTON_MMASK ) { |
| 233 | if ( !mMouseMiddlePressing ) { |
| 234 | mMouseMiddlePressing = true; |
| 235 | mInitialScale = mImage->getScale().x; |
| 236 | mMouseMiddleStartClick = getEventDispatcher()->getMousePosf(); |
| 237 | Vector2f localPos( mImage->convertToNodeSpace( mMouseMiddleStartClick ) ); |
| 238 | auto size( mImage->getPixelsSize() ); |
| 239 | localPos.x = eeclamp( localPos.x, 0.f, size.x ); |
| 240 | localPos.y = eeclamp( localPos.y, 0.f, size.y ); |
| 241 | mImage->setScaleOriginPointPixels( { localPos.x, localPos.y } ); |
| 242 | } |
| 243 | } |
| 244 | } else if ( msg->getMsg() == NodeMessage::MouseMove ) { |
| 245 | if ( msg->getFlags() & EE_BUTTON_MMASK ) { |
| 246 | mMouseMiddlePressing = true; |
| 247 | Vector2f v1( mMouseMiddleStartClick ); |
| 248 | Vector2f v2( getEventDispatcher()->getMousePosf() ); |
| 249 | Line2f l1( v1, v2 ); |
| 250 | Float dist = eeabs( v1.y - v2.y ) * 0.01f; |
| 251 | Float ang = l1.getAngle(); |
| 252 | if ( dist ) { |
| 253 | if ( ang >= 0.0f && ang <= 180.0f ) { |
| 254 | Float scale = eemax( mInitialScale - dist, mMinScale ); |
| 255 | mImage->setScale( scale ); |
| 256 | } else { |
| 257 | Float scale = eemin( mInitialScale + dist, mMaxScale ); |
| 258 | mImage->setScale( scale ); |
| 259 | } |
| 260 | } |
| 261 | } |
| 262 | } else if ( msg->getMsg() == NodeMessage::MouseUp ) { |
| 263 | if ( msg->getFlags() & EE_BUTTON_MMASK ) { |
| 264 | mMouseMiddlePressing = false; |
| 265 | } |
| 266 | |
| 267 | if ( getInput()->isKeyModPressed() ) { |
| 268 | Vector2f localPos( mImage->convertToNodeSpace( getEventDispatcher()->getMousePosf() ) ); |
| 269 | auto size( mImage->getPixelsSize() ); |
| 270 | localPos.x = eeclamp( localPos.x, 0.f, size.x ); |
| 271 | localPos.y = eeclamp( localPos.y, 0.f, size.y ); |
| 272 | OriginPoint origin( { localPos.x, localPos.y } ); |
| 273 | |
| 274 | if ( msg->getFlags() & EE_BUTTON_WUMASK ) { |
| 275 | mImage->setScale( eemin( mMaxScale, mImage->getScale().x + mMinScale ), origin ); |
nothing calls this directly
no test coverage detected