当前位置: 首页>>代码示例>>C++>>正文


C++ WidgetContainer::OnInputPointerPress方法代码示例

本文整理汇总了C++中WidgetContainer::OnInputPointerPress方法的典型用法代码示例。如果您正苦于以下问题:C++ WidgetContainer::OnInputPointerPress方法的具体用法?C++ WidgetContainer::OnInputPointerPress怎么用?C++ WidgetContainer::OnInputPointerPress使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在WidgetContainer的用法示例。


在下文中一共展示了WidgetContainer::OnInputPointerPress方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: OnInputPointerPress

void WidgetContainer::OnInputPointerPress(const EventInputPointer *ev)
{
	ASSERT_NULL(ev);

	WidgetIterator it = vWidget.begin();
	WidgetIterator end = vWidget.end();

	f32 cX = ev->GetX();
	f32 cY = ev->GetY();
	BOOL found = FALSE;
	
	for (; it != end; ++it)
	{
		IWidget *w = (*it);
		ASSERT_NULL(w);

		bEventConsumed = FALSE;

		if (w->IsDisabled())
			continue;

		if (!w->ContainsPoint(cX, cY))
			continue;

		if (w->GetObjectType() == Seed::ObjectGuiWidgetContainer)
		{
			WidgetContainer *wc = reinterpret_cast<WidgetContainer *>(w);
			wc->OnInputPointerPress(ev);

			bEventConsumed = wc->IsEventConsumed();
			if (bEventConsumed)
				break;
		}

		if (!(w->GetTrigger() & ev->GetPressed()))
			continue;

		u32 j = ev->GetJoystick();

		//LOG("> PRESS [%d, %f, %f]", j, cX, cY);

		if (w->GetState() == Seed::WidgetStateDrag)
		{
			continue;
		}
		
		found = TRUE;

		const EventWidget newEvent(w, NULL, WidgetEventPressed, j, cX, cY, ev->GetPressed(), ev->GetHold(), ev->GetReleased());

		LOG(">PRESSED_OVER [id: %d]", w->GetId());
		// GetState eh o baseado em prioridade a partir de todos os inputs.
		if (w->GetState() != Seed::WidgetStatePressedOver && w->GetPlayerState(j) != Seed::WidgetStatePressedOver)
		{
			// muda apenas o estado interno do widget
			LOG("\tEstado WIDGET");
			w->OnWidgetPress(&newEvent);
		}

		w->SetState(Seed::WidgetStatePressed);
		w->SetPlayerState(Seed::WidgetStatePressedOver, j);
		LOG("\tEstado PLAYER");

		w->SendOnPress(&newEvent);
		LOG("\tEvento");
		//if (newEvent.IsConsumed())
		bEventConsumed = newEvent.IsConsumed();
		if (bEventConsumed)
			break;
	}

	if (!found) // avoid call
	{
		// If no widget have collision, then we try distance based input;
		f32 maxDist = pConfiguration->GetInputDistanceRadius();
		if (maxDist)
		{
			IWidget *nearest = this->FindNearestByRadius(maxDist, ev);
			if (nearest)
			{
				IWidget *w = nearest;
				if (w->GetObjectType() == Seed::ObjectGuiWidgetContainer)
				{
					WidgetContainer *wc = reinterpret_cast<WidgetContainer *>(w);
					wc->OnInputPointerPress(ev);

					bEventConsumed = wc->IsEventConsumed();
					if (bEventConsumed)
						return;
				}

				u32 j = ev->GetJoystick();

				const EventWidget newEvent(w, NULL, WidgetEventPressed, j, cX, cY, ev->GetPressed(), ev->GetHold(), ev->GetReleased());

				LOG(">PRESSED_OVER [id: %d]", w->GetId());
				// GetState eh o baseado em prioridade a partir de todos os inputs.
				if (w->GetState() != Seed::WidgetStatePressedOver && w->GetPlayerState(j) != Seed::WidgetStatePressedOver)
				{
					// muda apenas o estado interno do widget
//.........这里部分代码省略.........
开发者ID:doorxp,项目名称:seed,代码行数:101,代码来源:WidgetContainer.cpp

示例2: OnInputPointerPress

void WidgetContainer::OnInputPointerPress(const EventInputPointer *ev)
{
	ASSERT_NULL(ev);

	WidgetIterator it = vWidget.begin();
	WidgetIterator end = vWidget.end();

	for (; it != end; ++it)
	{
		IWidget *w = (*it);
		ASSERT_NULL(w);

		bEventConsumed = FALSE;

		if (w->IsDisabled())
			continue;

		f32 cX = ev->GetX();
		f32 cY = ev->GetY();

		if (!w->ContainsPoint(cX, cY))
			continue;

		if (w->GetObjectType() == Seed::ObjectGuiWidgetContainer)
		{
			WidgetContainer *wc = reinterpret_cast<WidgetContainer *>(w);
			wc->OnInputPointerPress(ev);

			bEventConsumed = wc->IsEventConsumed();
			if (bEventConsumed)
				break;
		}

		if (!(w->GetTrigger() & ev->GetPressed()))
			continue;

		u32 j = ev->GetJoystick();

		//LOG("> PRESS [%d, %f, %f]", j, cX, cY);

		if (w->GetState() == Seed::WidgetStateDrag)
		{
			continue;
		}

		const EventWidget newEvent(w, NULL, WidgetEventPressed, j, cX, cY, ev->GetPressed(), ev->GetHold(), ev->GetReleased());

		LOG(">PRESSED_OVER [id: %d]", w->GetId());
		// GetState eh o baseado em prioridade a partir de todos os inputs.
		if (w->GetState() != Seed::WidgetStatePressedOver && w->GetPlayerState(j) != Seed::WidgetStatePressedOver)
		{
			// muda apenas o estado interno do widget
			LOG("\tEstado WIDGET");
			w->OnWidgetPress(&newEvent);
		}

		w->SetState(Seed::WidgetStatePressed);
		w->SetPlayerState(Seed::WidgetStatePressedOver, j);
		LOG("\tEstado PLAYER");

		w->SendOnPress(&newEvent);
		LOG("\tEvento");
		//if (newEvent.IsConsumed())
		bEventConsumed = newEvent.IsConsumed();
		if (bEventConsumed)
			break;
	}
}
开发者ID:Patuti,项目名称:seed,代码行数:68,代码来源:WidgetContainer.cpp


注:本文中的WidgetContainer::OnInputPointerPress方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。