示例#1
0
BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
{
		/*
	// If auto-rotate occurs, tag mouse-outside-slop to make sure the drag
	// gets started.
	const S32 ROTATE_H_MARGIN = (S32) (0.1f * gViewerWindow->getWindowWidth() );
	const F32 ROTATE_ANGLE_PER_SECOND = 30.f * DEG_TO_RAD;
	const F32 rotate_angle = ROTATE_ANGLE_PER_SECOND / gFPSClamped;
	// ...normal modes can only yaw
	if (x < ROTATE_H_MARGIN)
	{
		gAgent.yaw(rotate_angle);
		mMouseOutsideSlop = TRUE;
	}
	else if (x > gViewerWindow->getWindowWidth() - ROTATE_H_MARGIN)
	{
		gAgent.yaw(-rotate_angle);
		mMouseOutsideSlop = TRUE;
	}
	*/

	

	LLViewerObject *object = NULL;
	LLViewerObject *parent = NULL;
//	object = gViewerWindow->getHoverPick().getObject();
// [RLVa:KB] - Alternate: Snowglobe-1.2.4 | Checked: 2010-01-02 (RLVa-1.1.0l) | Modified: RLVa-1.1.0l
	// Block all special click action cursors when:
	//   - @fartouch=n restricted and the object is out of range
	//   - @interact=n restricted and the object isn't a HUD attachment
	const LLPickInfo& pick = gViewerWindow->getHoverPick();
	object = pick.getObject();
	if ( (object) && (rlv_handler_t::isEnabled()) && 
		( ((gRlvHandler.hasBehaviour(RLV_BHVR_FARTOUCH))) && (!gRlvHandler.canTouch(object, pick.mObjectOffset)) || 
		  ((gRlvHandler.hasBehaviour(RLV_BHVR_INTERACT)) && (!object->isHUDAttachment())) ) )
	{
		gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW);
		return TRUE;
	}
// [/RLVa:KB]

	if (object)
	{
		parent = object->getRootEdit();

		if (object && useClickAction(FALSE, mask, object, parent))
		{
			ECursorType cursor = cursor_from_object(object);
			gViewerWindow->getWindow()->setCursor(cursor);
		}
		else if (handle_media_hover(gViewerWindow->getHoverPick()))
		{
			// cursor set by media object
		}
// [RLVa:KB] - Checked: 2010-01-02 (RLVa-1.1.0l) | Added: RLVa-1.1.0l
		else if ( (rlv_handler_t::isEnabled()) && (!gRlvHandler.canTouch(object)) )
		{
			// Block showing the "grab" or "touch" cursor if we can't touch the object (@fartouch=n is handled above)
			gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW);
		}
// [/RLVa:KB]
		else if ((object && !object->isAvatar() && object->usePhysics()) 
				 || (parent && !parent->isAvatar() && parent->usePhysics()))
		{
			gViewerWindow->getWindow()->setCursor(UI_CURSOR_TOOLGRAB);
		}
		else if ( (object && object->flagHandleTouch()) 
				  || (parent && parent->flagHandleTouch()))
		{
			gViewerWindow->getWindow()->setCursor(UI_CURSOR_HAND);
		}
		
		else 
		{
			gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW);
		}

	}
	else
	{
		gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW);
		// We need to clear media hover flag
		if (LLViewerMediaFocus::getInstance()->getMouseOverFlag())
		{
			LLViewerMediaFocus::getInstance()->setMouseOverFlag(false);
		}

	}

	return TRUE;
}
示例#2
0
BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
{
		/*
	// If auto-rotate occurs, tag mouse-outside-slop to make sure the drag
	// gets started.
	const S32 ROTATE_H_MARGIN = (S32) (0.1f * gViewerWindow->getWindowWidth() );
	const F32 ROTATE_ANGLE_PER_SECOND = 30.f * DEG_TO_RAD;
	const F32 rotate_angle = ROTATE_ANGLE_PER_SECOND / gFPSClamped;
	// ...normal modes can only yaw
	if (x < ROTATE_H_MARGIN)
	{
		gAgent.yaw(rotate_angle);
		mMouseOutsideSlop = TRUE;
	}
	else if (x > gViewerWindow->getWindowWidth() - ROTATE_H_MARGIN)
	{
		gAgent.yaw(-rotate_angle);
		mMouseOutsideSlop = TRUE;
	}
	*/

	
	gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW);

	LLViewerObject *object = NULL;
	LLViewerObject *parent = NULL;
	object = gViewerWindow->getHoverPick().getObject();

	if (object)
	{
		parent = object->getRootEdit();

		if (object && useClickAction(FALSE, mask, object, parent))
		{
			ECursorType cursor = cursor_from_object(object);
			gViewerWindow->getWindow()->setCursor(cursor);
		}
		else if (handle_media_hover(gViewerWindow->getHoverPick()))
		{
			// cursor set by media object
		}
		else if ((object && !object->isAvatar() && object->usePhysics()) 
				 || (parent && !parent->isAvatar() && parent->usePhysics()))
		{
			gViewerWindow->getWindow()->setCursor(UI_CURSOR_TOOLGRAB);
		}
		else if ( (object && object->flagHandleTouch()) 
				  || (parent && parent->flagHandleTouch()))
		{
			gViewerWindow->getWindow()->setCursor(UI_CURSOR_HAND);
		}
	}
	else
	{
		// We need to clear media hover flag
		if (LLViewerMediaFocus::getInstance()->getMouseOverFlag())
		{
			LLViewerMediaFocus::getInstance()->setMouseOverFlag(false);
		}

	}

	return TRUE;
}