Esempio n. 1
0
void uiSequenceNode::draw (uiNode_t* node)
{
	if (EXTRADATA(node).context != nullptr && EXTRADATA(node).playing) {
		bool finished = false;
		vec2_t pos;
		vec2_t screenPos;
		UI_GetNodeAbsPos(node, pos);
		UI_GetNodeScreenPos(node, screenPos);

		R_PushMatrix();
		R_CleanupDepthBuffer(pos[0], pos[1], node->box.size[0], node->box.size[1]);
		UI_PushClipRect(screenPos[0], screenPos[1], node->box.size[0], node->box.size[1]);

		SEQ_SetView(EXTRADATA(node).context, pos, node->box.size);
		finished = !SEQ_Render(EXTRADATA(node).context);

		UI_PopClipRect();
		R_PopMatrix();

		if (finished) {
			if (EXTRADATA(node).onEnd != nullptr) {
				UI_ExecuteEventActions(node, EXTRADATA(node).onEnd);
			}
			else if (EXTRADATA(node).lua_onEnd != LUA_NOREF) {
				UI_ExecuteLuaEventScript(node, EXTRADATA(node).lua_onEnd);
			}
			EXTRADATA(node).playing = false;
		}
	}
}
Esempio n. 2
0
/**
 * @brief Activate the node. Can be used without the mouse (ie. a button will execute onClick)
 */
void uiRadioButtonNode::onActivate (uiNode_t* node)
{
	/* no cvar given? */
	if (!EXTRADATA(node).cvar || !*(char*)(EXTRADATA(node).cvar)) {
		Com_Printf("UI_RadioButtonNodeClick: node '%s' doesn't have a valid cvar assigned\n", UI_GetPath(node));
		return;
	}

	/* its not a cvar! */
	/** @todo the parser should already check that the property value is a right cvar */
	char const* const cvarName = Q_strstart((char const*)(EXTRADATA(node).cvar), "*cvar:");
	if (!cvarName)
		return;

	UI_GetReferenceFloat(node, EXTRADATA(node).cvar);
	/* Is we click on the already selected button, we can continue */
	if (UI_RadioButtonNodeIsSelected(node))
		return;

	if (EXTRADATA(node).string == nullptr) {
		Cvar_SetValue(cvarName, EXTRADATA(node).value);
	} else {
		Cvar_Set(cvarName, "%s", EXTRADATA(node).string);
	}
	if (node->onChange) {
		UI_ExecuteEventActions(node, node->onChange);
	}
	if (node->lua_onChange != LUA_NOREF) {
		UI_ExecuteLuaEventScript(node, node->lua_onChange);
	}
}
Esempio n. 3
0
/**
 * @brief Auto scroll the list
 */
bool uiOptionListNode::onScroll (uiNode_t* node, int deltaX, int deltaY)
{
	bool down = deltaY > 0;
	bool updated;
	if (deltaY == 0)
		return false;
	updated = EXTRADATA(node).scrollY.moveDelta(down ? 1 : -1);
	if (updated) {
		if (EXTRADATA(node).onViewChange) {
			UI_ExecuteEventActions(node, EXTRADATA(node).onViewChange);
		}
		else if (EXTRADATA(node).lua_onViewChange != LUA_NOREF) {
			UI_ExecuteLuaEventScript (node, EXTRADATA(node).lua_onViewChange);
		}
	}
	/* @todo use super behaviour */
	if (node->onWheelUp && !down) {
		UI_ExecuteEventActions(node, node->onWheelUp);
		updated = true;
	}
	if (node->onWheelDown && down) {
		UI_ExecuteEventActions(node, node->onWheelDown);
		updated = true;
	}
	if (node->onWheel) {
		UI_ExecuteEventActions(node, node->onWheel);
		updated = true;
	}
	return updated;
}
Esempio n. 4
0
/**
 * @brief Set the position of the scrollbar to a value
 */
void UI_AbstractScrollbarNodeSet (uiNode_t* node, int value)
{
	int pos = value;

	if (pos < 0) {
		pos = 0;
	} else if (pos > EXTRADATA(node).fullsize - EXTRADATA(node).viewsize) {
		pos = EXTRADATA(node).fullsize - EXTRADATA(node).viewsize;
	}
	if (pos < 0)
		pos = 0;

	/* nothing change */
	if (EXTRADATA(node).pos == pos)
		return;

	/* update status */
	EXTRADATA(node).pos = pos;

	/* fire change event */
	if (node->onChange) {
		UI_ExecuteEventActions(node, node->onChange);
	}
	if (node->lua_onChange != LUA_NOREF) {
		UI_ExecuteLuaEventScript(node, node->lua_onChange);
	}
}
Esempio n. 5
0
/**
 * @brief Activate the node. Can be used without the mouse (ie. a button will execute onClick)
 * @todo The old implementation calls onClick when activated. This is odd and should be replaced by
 * a correct onActivate event handler.
 */
void uiNode::onActivate(uiNode_t* node) {
	if (node->onClick) {
		UI_ExecuteEventActions(node, node->onClick);
	}
	if (node->lua_onActivate != LUA_NOREF) {
		UI_ExecuteLuaEventScript(node, node->lua_onActivate);
	}
}
Esempio n. 6
0
/**
 * Mouse leave the node (a child node is part of the node)
 */
void uiLocatedNode::onMouseLeave(uiNode_t* node)
{
	if (node->onMouseLeave != nullptr) {
		UI_ExecuteEventActions(node, node->onMouseLeave);
	}
	if (node->lua_onMouseLeave != LUA_NOREF) {
		UI_ExecuteLuaEventScript(node, node->lua_onMouseLeave);
	}
}
Esempio n. 7
0
/**
 * @brief Update display of scroll buttons.
 * @param[in] node Context node
 */
static void UI_BaseInventoryNodeUpdateScroll (uiNode_t* node)
{
	if (EXTRADATA(node).onViewChange) {
		UI_ExecuteEventActions(node, EXTRADATA(node).onViewChange);
	}
	else if (EXTRADATA(node).lua_onViewChange != LUA_NOREF) {
		UI_ExecuteLuaEventScript (node, EXTRADATA(node).lua_onViewChange);
	}
}
Esempio n. 8
0
void UI_AbstractOption_SetCurrentValue(uiNode_t* node, const char* value)
{
	const char* cvarName = &EXTRADATA(node).cvar[6];
	Cvar_Set(cvarName, "%s", value);
	if (node->onChange) {
		UI_ExecuteEventActions(node, node->onChange);
	}
	if (node->lua_onChange != LUA_NOREF) {
		UI_ExecuteLuaEventScript(node, node->lua_onChange);
	}
}
Esempio n. 9
0
/**
 * @brief Called when we close the node on the screen
 */
void uiWindowNode::onWindowClosed (uiNode_t* node)
{
	uiLocatedNode::onWindowClosed(node);

	/* script callback */
	if (EXTRADATA(node).onWindowClosed) {
		UI_ExecuteEventActions(node, EXTRADATA(node).onWindowClosed);
	}
	if (EXTRADATA(node).lua_onWindowClosed != LUA_NOREF) {
		UI_ExecuteLuaEventScript(node, EXTRADATA(node).lua_onWindowClosed);
	}
}
Esempio n. 10
0
void uiVideoNode::drawOverWindow (uiNode_t* node)
{
	if (EXTRADATA(node).cin.status == CIN_STATUS_INVALID) {
		/** @todo Maybe draw a black screen? */
		return;
	}

	if (EXTRADATA(node).cin.status == CIN_STATUS_NONE) {
		vec2_t pos;
		bool nosound = UI_VIDEOEXTRADATACONST(node).nosound;

		CIN_OpenCinematic(&(EXTRADATA(node).cin), va("videos/%s", EXTRADATA(node).source));
		if (EXTRADATA(node).cin.status == CIN_STATUS_INVALID) {
			if (EXTRADATA(node).onEnd != nullptr) {
				UI_ExecuteEventActions(node, EXTRADATA(node).onEnd);
			}
			else if (EXTRADATA(node).lua_onEnd != LUA_NOREF) {
				UI_ExecuteLuaEventScript(node, EXTRADATA(node).lua_onEnd);
			}
			return;
		}

		UI_GetNodeAbsPos(node, pos);
		CIN_SetParameters(&(EXTRADATA(node).cin), pos[0], pos[1], node->box.size[0], node->box.size[1], CIN_STATUS_PLAYING, nosound);
	}

	if (EXTRADATA(node).cin.status == CIN_STATUS_PLAYING || EXTRADATA(node).cin.status == CIN_STATUS_PAUSE) {
		/* only set replay to true if video was found and is running */
		CIN_RunCinematic(&(EXTRADATA(node).cin));
		if (EXTRADATA(node).cin.status == CIN_STATUS_NONE) {
			if (EXTRADATA(node).onEnd != nullptr) {
				UI_ExecuteEventActions(node, EXTRADATA(node).onEnd);
			}
			else if (EXTRADATA(node).lua_onEnd != LUA_NOREF) {
				UI_ExecuteLuaEventScript(node, EXTRADATA(node).lua_onEnd);
			}
		}
	}
}
Esempio n. 11
0
/**
 * @brief callback from the keyboard
 */
static void UI_TextEntryNodeValidateEdition (uiNode_t* node)
{
	/* invalidate cache */
	editedCvar = nullptr;
	cvarValueBackup[0] = '\0';

	/* fire change event */
	if (node->onChange) {
		UI_ExecuteEventActions(node, node->onChange);
	}
	if (node->lua_onChange != LUA_NOREF) {
		UI_ExecuteLuaEventScript(node, node->lua_onChange);
	}
}
Esempio n. 12
0
void uiOptionListNode::onCapturedMouseMove (uiNode_t* node, int x, int y)
{
	const int lineHeight = getCellHeight(node);
	const int deltaY = (mouseScrollY - y) / lineHeight;
	/* We're doing only vertical scroll, that's enough for the most instances */
	if (deltaY != 0) {
		bool updated;
		updated = EXTRADATA(node).scrollY.moveDelta(deltaY);
		if (updated) {
			if (EXTRADATA(node).onViewChange) {
				UI_ExecuteEventActions(node, EXTRADATA(node).onViewChange);
			}
			else if (EXTRADATA(node).lua_onViewChange != LUA_NOREF) {
				UI_ExecuteLuaEventScript (node, EXTRADATA(node).lua_onViewChange);
			}
		}
		/* @todo not accurate */
		mouseScrollX = x;
		mouseScrollY = y;
	}
	onMouseMove(node, x, y);
}
Esempio n. 13
0
/**
 * @brief Update the scroll according to the number
 * of items and the size of the node
 */
static void UI_OptionListNodeUpdateScroll (uiNode_t* node)
{
	int lineHeight;
	bool updated;
	int elements;

	lineHeight =  EXTRADATA(node).lineHeight;
	if (lineHeight == 0) {
		const char* font = UI_GetFontFromNode(node);
		lineHeight = UI_FontGetHeight(font);
	}

	elements = (node->box.size[1] - node->padding - node->padding) / lineHeight;
	updated = EXTRADATA(node).scrollY.set(-1, elements, EXTRADATA(node).count);
	if (updated) {
		if (EXTRADATA(node).onViewChange) {
			UI_ExecuteEventActions(node, EXTRADATA(node).onViewChange);
		}
		else if (EXTRADATA(node).lua_onViewChange != LUA_NOREF) {
			UI_ExecuteLuaEventScript (node, EXTRADATA(node).lua_onViewChange);
		}
	}
}
Esempio n. 14
0
void uiBaseInventoryNode::onMouseDown (uiNode_t* node, int x, int y, int button)
{
	switch (button) {
	case K_MOUSE1:
	{
		/* start drag and drop */
		int fromX, fromY;
		dragInfoIC = UI_BaseInventoryNodeGetItem(node, x, y, &fromX, &fromY);
		if (dragInfoIC) {
			dragInfoFromX = fromX;
			dragInfoFromY = fromY;
			oldMouseX = x;
			oldMouseY = y;
			UI_SetMouseCapture(node);
			EXTRADATA(node).super.lastSelectedId = dragInfoIC->def()->idx;
			if (EXTRADATA(node).super.onSelect) {
				UI_ExecuteEventActions(node, EXTRADATA(node).super.onSelect);
			}
			if (EXTRADATA(node).super.lua_onSelect != LUA_NOREF) {
				UI_ExecuteLuaEventScript(node, EXTRADATA(node).super.lua_onSelect);
			}
		}
		break;
	}
	case K_MOUSE2:
		if (UI_DNDIsDragging()) {
			UI_DNDAbort();
		} else {
			/* auto place */
			UI_ContainerNodeAutoPlace(node, x, y);
		}
		break;
	default:
		break;
	}
}
Esempio n. 15
0
void uiLocatedNode::onFocusLost(uiNode_t* node) {
	if (node->lua_onFocusLost != LUA_NOREF) {
		UI_ExecuteLuaEventScript(node, node->lua_onFocusLost);
	}
}
Esempio n. 16
0
void uiNode::onLoaded(uiNode_t* node) {
	if (node->lua_onLoaded != LUA_NOREF) {
		UI_ExecuteLuaEventScript(node, node->lua_onLoaded);
	}
}