Exemplo n.º 1
0
bool MkWindowThemedNode::_UpdateThemeComponent(void)
{
	m_UpdateCommand.Set(eUC_Region); // theme, component, shadow가 변경되면 region도 갱신되야 함

	const MkWindowThemeFormData* formData = MK_STATIC_RES.GetWindowThemeSet().GetFormData(m_ThemeName, m_ComponentType, m_CustomFormName);
	if ((formData != NULL) && formData->AttachForm(this))
	{
		if (m_UseShadow)
		{
			if (ChildExist(ShadowNodeName))
			{
				MkWindowThemedNode* shadowNode = dynamic_cast<MkWindowThemedNode*>(GetChildNode(ShadowNodeName));
				if (shadowNode != NULL)
				{
					shadowNode->SetThemeName(m_ThemeName);
				}
			}
			else
			{
				MkWindowThemedNode* shadowNode = CreateChildNode(this, ShadowNodeName);
				if (shadowNode != NULL)
				{
					shadowNode->SetLocalDepth(0.1f); // form panel들과 겹치는 것을 피하기 위해 0.1f만큼 뒤에 위치
					shadowNode->SetThemeName(m_ThemeName);
					shadowNode->SetComponentType(MkWindowThemeData::eCT_ShadowBox);
					shadowNode->SetFormState(MkWindowThemeFormData::eS_Default);
					shadowNode->SetAlignmentTargetIsWindowRect(false); // 자신과 shadow node의 client rect끼리 정렬
					shadowNode->SetAlignmentPosition(eRAP_LeftBottom); // client size를 동일하게 맞출 것이므로 아무거나 상관 없음
				}
			}
		}
		return true;
	}

	MkWindowThemeFormData::RemoveForm(this);
	RemoveChildNode(ShadowNodeName);
	return false;
}