/************************************************************************* Handler for mouse move events *************************************************************************/ void FrameWindow::onMouseMove(MouseEventArgs& e) { // default processing (this is now essential as it controls event firing). Window::onMouseMove(e); // if we are not the window containing the mouse, do NOT change the cursor if (getGUIContext().getWindowContainingMouse() != this) { return; } if (isSizingEnabled()) { Vector2f localMousePos(CoordConverter::screenToWindow(*this, e.position)); if (d_beingSized) { SizingLocation dragEdge = getSizingBorderAtPoint(d_dragPoint); // calculate sizing deltas... float deltaX = localMousePos.d_x - d_dragPoint.d_x; float deltaY = localMousePos.d_y - d_dragPoint.d_y; URect new_area(d_area); bool top_left_sizing = false; // size left or right edges if (isLeftSizingLocation(dragEdge)) { top_left_sizing |= moveLeftEdge(deltaX, new_area); } else if (isRightSizingLocation(dragEdge)) { top_left_sizing |= moveRightEdge(deltaX, new_area); } // size top or bottom edges if (isTopSizingLocation(dragEdge)) { top_left_sizing |= moveTopEdge(deltaY, new_area); } else if (isBottomSizingLocation(dragEdge)) { top_left_sizing |= moveBottomEdge(deltaY, new_area); } setArea_impl(new_area.d_min, new_area.getSize(), top_left_sizing); } else { setCursorForPoint(localMousePos); } } // mark event as handled ++e.handled; }
/************************************************************************* Handler for mouse move events *************************************************************************/ void FrameWindow::onMouseMove(MouseEventArgs& e) { // default processing (this is now essential as it controls event firing). Window::onMouseMove(e); // if we are not the window containing the mouse, do NOT change the cursor if (System::getSingleton().getWindowContainingMouse() != this) { return; } if (isSizingEnabled()) { Point localMousePos(CoordConverter::screenToWindow(*this, e.position)); if (d_beingSized) { SizingLocation dragEdge = getSizingBorderAtPoint(d_dragPoint); // calculate sizing deltas... float deltaX = localMousePos.d_x - d_dragPoint.d_x; float deltaY = localMousePos.d_y - d_dragPoint.d_y; // size left or right edges if (isLeftSizingLocation(dragEdge)) { moveLeftEdge(deltaX); } else if (isRightSizingLocation(dragEdge)) { moveRightEdge(deltaX); } // size top or bottom edges if (isTopSizingLocation(dragEdge)) { moveTopEdge(deltaY); } else if (isBottomSizingLocation(dragEdge)) { moveBottomEdge(deltaY); } } else { setCursorForPoint(localMousePos); } } // mark event as handled e.handled = true; }
Vec3 CCamera::GetWorldMousePos( const Vec2& mousePos ) const { Vec3 nearPlaneHalfSize = GetNearPlaneHalfSize(); float width = float(pRenderTarget->GetWidth()); float height = float(pRenderTarget->GetHeight()); Vec2 normalizedMousePos( (mousePos.x / width) * 2.0f - 1.0f, 1.0f - (mousePos.y / height) * 2.0f ); Vec3 localMousePos( nearPlaneHalfSize.x * normalizedMousePos.x, nearPlaneHalfSize.y, nearPlaneHalfSize.z * normalizedMousePos.y ); return transform * localMousePos; }
/************************************************************************* Handler method for when a segment is dragged & dropped. *************************************************************************/ bool ListHeader::segmentMovedHandler(const EventArgs& e) { const Vector2f mousePos(getUnprojectedPosition( getGUIContext().getMouseCursor().getPosition())); // segment must be dropped within the window if (isHit(mousePos)) { // get mouse position as something local Vector2f localMousePos(CoordConverter::screenToWindow(*this, mousePos)); // set up to allow for current offsets float currwidth = -d_segmentOffset; // calculate column where dragged segment was dropped uint col; for (col = 0; col < getColumnCount(); ++col) { currwidth += d_segments[col]->getPixelSize().d_width; if (localMousePos.d_x < currwidth) { // this is the column, exit loop early break; } } // find original column for dragged segment. ListHeaderSegment* seg = ((ListHeaderSegment*)((WindowEventArgs&)e).window); uint curcol = getColumnFromSegment(*seg); // move column moveColumn(curcol, col); } return true; }
/************************************************************************* Handler for when mouse position changes in widget area (or captured) *************************************************************************/ void ListHeaderSegment::onMouseMove(MouseEventArgs& e) { // base class processing Window::onMouseMove(e); // // convert mouse position to something local // Point localMousePos(CoordConverter::screenToWindow(*this, e.position)); // handle drag sizing if (d_dragSizing) { doDragSizing(localMousePos); } // handle drag moving else if (d_dragMoving) { doDragMoving(localMousePos); } // not sizing, is mouse in the widget area? else if (isHit(e.position)) { // mouse in sizing area & sizing is enabled if ((localMousePos.d_x > (d_pixelSize.d_width - d_splitterSize)) && d_sizingEnabled) { initSizingHoverState(); } // mouse not in sizing area and/or sizing not enabled else { initSegmentHoverState(); // if we are pushed but not yet drag moving if (d_segmentPushed && !d_dragMoving) { if (isDragMoveThresholdExceeded(localMousePos)) { initDragMoving(); } } } } // mouse is no longer within the widget area... else { // only change settings if change is required if (d_splitterHover) { d_splitterHover = false; MouseCursor::getSingleton().setImage(getMouseCursor()); invalidate(); } // reset segment hover state if not already done. if (d_segmentHover) { d_segmentHover = false; invalidate(); } } ++e.handled; }