fixup! Editor widget selection and creation

This commit is contained in:
2016-01-19 13:32:32 +01:00
parent 260203fa4d
commit 8854794cbc
6 changed files with 64 additions and 94 deletions
+1
View File
@@ -131,6 +131,7 @@ private:
// Custom UI elements
bool createDeleteButton(const std::string& componentType);
void createWidgetToolButton(WidgetMode mode);
};
#endif
@@ -3,6 +3,9 @@
<Components>
<c:Transform/>
<c:UniformScale>
<Scale X="0.200000003" Y="0.200000003" Z="0.200000003"/>
</c:UniformScale>
</Components>
<Children>
@@ -12,7 +15,6 @@
<Type>
<Rotate/>
</Type>
<Axis X="1" Y="0" Z="0"/>
</c:EditorWidget>
<c:Model>
<Resource>Models/RotationWidgetX.obj</Resource>
@@ -27,7 +29,6 @@
<Type>
<Rotate/>
</Type>
<Axis X="0" Y="1" Z="0"/>
</c:EditorWidget>
<c:Model>
<Resource>Models/RotationWidgetY.obj</Resource>
@@ -42,7 +43,6 @@
<Type>
<Rotate/>
</Type>
<Axis X="0" Y="0" Z="1"/>
</c:EditorWidget>
<c:Model>
<Resource>Models/RotationWidgetZ.obj</Resource>
@@ -53,7 +53,10 @@
</Entity>
<Entity name="Light">
<Components>
<c:PointLight/>
<c:PointLight>
<Intensity>-1</Intensity>
<Falloff>0</Falloff>
</c:PointLight>
<c:Transform/>
</Components>
<Children/>
@@ -6,6 +6,9 @@
<Resource>Models/ScaleWidgetOrigin.obj</Resource>
</c:Model>
<c:Transform/>
<c:UniformScale>
<Scale X="0.200000003" Y="0.200000003" Z="0.200000003"/>
</c:UniformScale>
</Components>
<Children>
@@ -15,7 +18,6 @@
<Type>
<Scale/>
</Type>
<Axis X="1" Y="0" Z="0"/>
</c:EditorWidget>
<c:Model>
<Resource>Models/ScaleWidgetX.obj</Resource>
@@ -30,7 +32,6 @@
<Type>
<Scale/>
</Type>
<Axis X="0" Y="1" Z="0"/>
</c:EditorWidget>
<c:Model>
<Resource>Models/ScaleWidgetY.obj</Resource>
@@ -45,7 +46,6 @@
<Type>
<Scale/>
</Type>
<Axis X="0" Y="0" Z="1"/>
</c:EditorWidget>
<c:Model>
<Resource>Models/ScaleWidgetZ.obj</Resource>
@@ -6,17 +6,15 @@
<Resource>Models/TranslationWidgetOrigin.obj</Resource>
</c:Model>
<c:Transform/>
<c:UniformScale>
<Scale X="0.200000003" Y="0.200000003" Z="0.200000003"/>
</c:UniformScale>
</Components>
<Children>
<Entity name="X">
<Components>
<c:EditorWidget>
<Type>
<Translate/>
</Type>
<Axis X="1" Y="0" Z="0"/>
</c:EditorWidget>
<c:EditorWidget/>
<c:Model>
<Resource>Models/TranslationWidgetX.obj</Resource>
</c:Model>
@@ -26,12 +24,7 @@
</Entity>
<Entity name="Y">
<Components>
<c:EditorWidget>
<Type>
<Translate/>
</Type>
<Axis X="0" Y="1" Z="0"/>
</c:EditorWidget>
<c:EditorWidget/>
<c:Model>
<Resource>Models/TranslationWidgetY.obj</Resource>
</c:Model>
@@ -41,12 +34,7 @@
</Entity>
<Entity name="Z">
<Components>
<c:EditorWidget>
<Type>
<Translate/>
</Type>
<Axis X="0" Y="0" Z="1"/>
</c:EditorWidget>
<c:EditorWidget/>
<c:Model>
<Resource>Models/TranslationWidgetZ.obj</Resource>
</c:Model>
@@ -56,12 +44,7 @@
</Entity>
<Entity name="XPlane">
<Components>
<c:EditorWidget>
<Type>
<Translate/>
</Type>
<Axis X="0" Y="1" Z="1"/>
</c:EditorWidget>
<c:EditorWidget/>
<c:Model>
<Resource>Models/WidgetPlaneX.obj</Resource>
</c:Model>
@@ -71,12 +54,7 @@
</Entity>
<Entity name="YPlane">
<Components>
<c:EditorWidget>
<Type>
<Translate/>
</Type>
<Axis X="1" Y="0" Z="1"/>
</c:EditorWidget>
<c:EditorWidget/>
<c:Model>
<Resource>Models/WidgetPlaneY.obj</Resource>
</c:Model>
@@ -86,12 +64,7 @@
</Entity>
<Entity name="ZPlane">
<Components>
<c:EditorWidget>
<Type>
<Translate/>
</Type>
<Axis X="1" Y="1" Z="0"/>
</c:EditorWidget>
<c:EditorWidget/>
<c:Model>
<Resource>Models/WidgetPlaneZ.obj</Resource>
</c:Model>
+39 -46
View File
@@ -35,57 +35,20 @@ void EditorGUI::drawTools()
return;
}
// Translate widget button
if (ImGui::ImageButton(
(void*)tryLoadTexture("Textures/Icons/Translate.png"),
ImVec2(24, 24),
ImVec2(0, 1),
ImVec2(1, 0),
-1,
ImVec4(0, 0, 0, 0),
(m_CurrentWidgetMode == WidgetMode::Translate) ? ImVec4(0, 1, 0, 1) : ImVec4(1, 1, 1, 1)
)
) {
m_CurrentWidgetMode = WidgetMode::Translate;
if (m_OnWidgetMode != nullptr) {
m_OnWidgetMode(m_CurrentWidgetMode);
}
createWidgetToolButton(WidgetMode::Translate);
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Translate");
}
// Rotate widget button
ImGui::SameLine();
if (ImGui::ImageButton(
(void*)tryLoadTexture("Textures/Icons/Rotate.png"),
ImVec2(24, 24),
ImVec2(0, 1),
ImVec2(1, 0),
-1,
ImVec4(0, 0, 0, 0),
(m_CurrentWidgetMode == WidgetMode::Rotate) ? ImVec4(0, 1, 0, 1) : ImVec4(1, 1, 1, 1)
)
) {
m_CurrentWidgetMode = WidgetMode::Rotate;
if (m_OnWidgetMode != nullptr) {
m_OnWidgetMode(m_CurrentWidgetMode);
}
createWidgetToolButton(WidgetMode::Rotate);
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Rotate");
}
// Scale widget button
ImGui::SameLine();
if (ImGui::ImageButton(
(void*)tryLoadTexture("Textures/Icons/Scale.png"),
ImVec2(24, 24),
ImVec2(0, 1),
ImVec2(1, 0),
-1,
ImVec4(0, 0, 0, 0),
(m_CurrentWidgetMode == WidgetMode::Scale) ? ImVec4(0, 1, 0, 1) : ImVec4(1, 1, 1, 1)
)
) {
m_CurrentWidgetMode = WidgetMode::Scale;
if (m_OnWidgetMode != nullptr) {
m_OnWidgetMode(m_CurrentWidgetMode);
}
createWidgetToolButton(WidgetMode::Scale);
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Scale");
}
ImGui::SameLine();
ImGui::ItemSize(ImVec2(5, 0));
@@ -497,6 +460,36 @@ bool EditorGUI::createDeleteButton(const std::string& componentType)
return pressed;
}
void EditorGUI::createWidgetToolButton(WidgetMode mode)
{
GLuint texture = 0;
switch (mode) {
case WidgetMode::Translate:
texture = tryLoadTexture("Textures/Icons/Translate.png");
break;
case WidgetMode::Rotate:
texture = tryLoadTexture("Textures/Icons/Rotate.png");
break;
case WidgetMode::Scale:
texture = tryLoadTexture("Textures/Icons/Scale.png");
break;
}
if (ImGui::ImageButton(
(void*)texture,
ImVec2(24, 24),
ImVec2(0, 1),
ImVec2(1, 0),
-1,
ImVec4(0, 0, 0, 0),
(m_CurrentWidgetMode == mode) ? ImVec4(0, 1, 0, 1) : ImVec4(1, 1, 1, 1)
)
) {
if (m_OnWidgetMode != nullptr) {
m_OnWidgetMode(mode);
}
m_CurrentWidgetMode = mode;
}
}
boost::filesystem::path EditorGUI::fileOpenDialog()
{
+5 -5
View File
@@ -126,6 +126,8 @@ void EditorSystem::setWidgetMode(EditorGUI::WidgetMode mode)
return;
}
m_WidgetMode = mode;
if (m_Widget.Valid()) {
m_Widget.World->DeleteEntity(m_Widget.ID);
m_Widget = EntityWrapper::Invalid;
@@ -137,17 +139,15 @@ void EditorSystem::setWidgetMode(EditorGUI::WidgetMode mode)
switch (mode) {
case EditorGUI::WidgetMode::Translate:
m_Widget = importEntity(EntityWrapper(m_World, EntityID_Invalid), "Schema/Entities/EditorWidgetTranslate.xml");
m_Widget = importEntity(EntityWrapper(m_EditorWorld, EntityID_Invalid), "Schema/Entities/EditorWidgetTranslate.xml");
break;
case EditorGUI::WidgetMode::Rotate:
m_Widget = importEntity(EntityWrapper(m_World, EntityID_Invalid), "Schema/Entities/EditorWidgetRotate.xml");
m_Widget = importEntity(EntityWrapper(m_EditorWorld, EntityID_Invalid), "Schema/Entities/EditorWidgetRotate.xml");
break;
case EditorGUI::WidgetMode::Scale:
m_Widget = importEntity(EntityWrapper(m_World, EntityID_Invalid), "Schema/Entities/EditorWidgetScale.xml");
m_Widget = importEntity(EntityWrapper(m_EditorWorld, EntityID_Invalid), "Schema/Entities/EditorWidgetScale.xml");
break;
}
m_Widget["Transform"]["Position"] = Transform::AbsolutePosition(m_CurrentSelection.World, m_CurrentSelection.ID);
m_WidgetMode = mode;
}