From 4cf5304c79ac26b66b18b150a2dedcb50c17e0eb Mon Sep 17 00:00:00 2001 From: shweet Date: Tue, 16 Dec 2025 20:18:49 -0500 Subject: [PATCH] OH SHIT ROOT FRAME TINT/COLOR OFFSET! --- src/imgui/window/animation_preview.cpp | 5 ++-- src/imgui/window/frame_properties.cpp | 40 ++++++++++++++++++++------ src/settings.h | 10 +++++++ 3 files changed, 45 insertions(+), 10 deletions(-) diff --git a/src/imgui/window/animation_preview.cpp b/src/imgui/window/animation_preview.cpp index e725a47..a2ebe37 100644 --- a/src/imgui/window/animation_preview.cpp +++ b/src/imgui/window/animation_preview.cpp @@ -555,8 +555,9 @@ namespace anm2ed::imgui auto uvMin = frame.crop / texSize; auto uvMax = (frame.crop + frame.size) / texSize; - vec3 frameColorOffset = frame.colorOffset + colorOffset + sampleColor; - vec4 frameTint = frame.tint; + auto rootFrame = animation->rootAnimation.frame_generate(sampleTime, anm2::ROOT); + vec3 frameColorOffset = frame.colorOffset + rootFrame.colorOffset + colorOffset + sampleColor; + vec4 frameTint = frame.tint * rootFrame.tint; frameTint.a = std::max(0.0f, frameTint.a - (alphaOffset + sampleAlpha)); auto vertices = math::uv_vertices_get(uvMin, uvMax); diff --git a/src/imgui/window/frame_properties.cpp b/src/imgui/window/frame_properties.cpp index 83bbcc5..6b68fc3 100644 --- a/src/imgui/window/frame_properties.cpp +++ b/src/imgui/window/frame_properties.cpp @@ -182,6 +182,8 @@ namespace anm2ed::imgui else { auto& isCrop = settings.changeIsCrop; + auto& isCropX = settings.changeIsCropX; + auto& isCropY = settings.changeIsCropY; auto& isSize = settings.changeIsSize; auto& isPosition = settings.changeIsPosition; auto& isPivot = settings.changeIsPivot; @@ -204,7 +206,7 @@ namespace anm2ed::imgui auto& isVisible = settings.changeIsVisible; auto& isInterpolated = settings.changeIsInterpolated; -#define PROPERTIES_WIDGET(body) \ +#define PROPERTIES_WIDGET(body, checkboxLabel, isEnabled) \ ImGui::Checkbox(checkboxLabel, &isEnabled); \ ImGui::SameLine(); \ ImGui::BeginDisabled(!isEnabled); \ @@ -212,29 +214,51 @@ namespace anm2ed::imgui ImGui::EndDisabled(); auto bool_value = [&](const char* checkboxLabel, const char* valueLabel, bool& isEnabled, bool& value) - { PROPERTIES_WIDGET(ImGui::Checkbox(valueLabel, &value)); }; + { PROPERTIES_WIDGET(ImGui::Checkbox(valueLabel, &value), checkboxLabel, isEnabled) }; auto color3_value = [&](const char* checkboxLabel, const char* valueLabel, bool& isEnabled, vec3& value) - { PROPERTIES_WIDGET(ImGui::ColorEdit3(valueLabel, value_ptr(value))); }; + { PROPERTIES_WIDGET(ImGui::ColorEdit3(valueLabel, value_ptr(value)), checkboxLabel, isEnabled); }; auto color4_value = [&](const char* checkboxLabel, const char* valueLabel, bool& isEnabled, vec4& value) - { PROPERTIES_WIDGET(ImGui::ColorEdit4(valueLabel, value_ptr(value))); }; + { PROPERTIES_WIDGET(ImGui::ColorEdit4(valueLabel, value_ptr(value)), checkboxLabel, isEnabled); }; auto float2_value = [&](const char* checkboxLabel, const char* valueLabel, bool& isEnabled, vec2& value) - { PROPERTIES_WIDGET(ImGui::InputFloat2(valueLabel, value_ptr(value), vec2_format_get(value))); }; + { + PROPERTIES_WIDGET(ImGui::InputFloat2(valueLabel, value_ptr(value), vec2_format_get(value)), checkboxLabel, + isEnabled); + }; + + auto float2_value_new = [&](const char* checkboxXLabel, const char* checkboxYLabel, const char* valueXLabel, + const char* valueYLabel, bool& isXEnabled, bool& isYEnabled, vec2& value) + { + auto width = + (ImGui::CalcItemWidth() - ImGui::GetTextLineHeight() - (ImGui::GetStyle().ItemInnerSpacing.x * 6)) / 2; + + PROPERTIES_WIDGET(ImGui::PushItemWidth(width); + ImGui::DragFloat(valueXLabel, &value.x, DRAG_SPEED, 0.0f, 0.0f, float_format_get(value.x)); + ImGui::PopItemWidth(), checkboxXLabel, isXEnabled); + ImGui::SameLine(); + PROPERTIES_WIDGET(ImGui::PushItemWidth(width); + ImGui::DragFloat(valueYLabel, &value.y, DRAG_SPEED, 0.0f, 0.0f, float_format_get(value.y)); + ImGui::PopItemWidth(), checkboxYLabel, isYEnabled); + }; auto float_value = [&](const char* checkboxLabel, const char* valueLabel, bool& isEnabled, float& value) - { PROPERTIES_WIDGET(ImGui::InputFloat(valueLabel, &value, STEP, STEP_FAST, float_format_get(value))); }; + { + PROPERTIES_WIDGET(ImGui::InputFloat(valueLabel, &value, STEP, STEP_FAST, float_format_get(value)), + checkboxLabel, isEnabled); + }; auto duration_value = [&](const char* checkboxLabel, const char* valueLabel, bool& isEnabled, int& value) { PROPERTIES_WIDGET( - input_int_range(valueLabel, value, anm2::FRAME_DURATION_MIN, anm2::FRAME_DURATION_MAX, STEP, STEP_FAST)); + input_int_range(valueLabel, value, anm2::FRAME_DURATION_MIN, anm2::FRAME_DURATION_MAX, STEP, STEP_FAST), + checkboxLabel, isEnabled); }; #undef PROPERTIES_WIDGET - float2_value("##Is Crop", localize.get(BASIC_CROP), isCrop, crop); + float2_value_new("##Is Crop X", "##Is Crop Y", "##Crop X", localize.get(BASIC_CROP), isCropX, isCropY, crop); float2_value("##Is Size", localize.get(BASIC_SIZE), isSize, size); float2_value("##Is Position", localize.get(BASIC_POSITION), isPosition, position); float2_value("##Is Pivot", localize.get(BASIC_PIVOT), isPivot, pivot); diff --git a/src/settings.h b/src/settings.h index 9ec65ce..253d727 100644 --- a/src/settings.h +++ b/src/settings.h @@ -70,10 +70,20 @@ namespace anm2ed X(PLAYBACK_IS_CLAMP, playbackIsClamp, STRING_UNDEFINED, BOOL, true) \ \ X(CHANGE_IS_CROP, changeIsCrop, STRING_UNDEFINED, BOOL, false) \ + X(CHANGE_IS_CROP_X, changeIsCropX, STRING_UNDEFINED, BOOL, false) \ + X(CHANGE_IS_CROP_Y, changeIsCropY, STRING_UNDEFINED, BOOL, false) \ X(CHANGE_IS_SIZE, changeIsSize, STRING_UNDEFINED, BOOL, false) \ + X(CHANGE_IS_SIZE_X, changeIsSizeX, STRING_UNDEFINED, BOOL, false) \ + X(CHANGE_IS_SIZE_Y, changeIsSizeY, STRING_UNDEFINED, BOOL, false) \ X(CHANGE_IS_POSITION, changeIsPosition, STRING_UNDEFINED, BOOL, false) \ + X(CHANGE_IS_POSITION_X, changeIsPositionX, STRING_UNDEFINED, BOOL, false) \ + X(CHANGE_IS_POSITION_Y, changeIsPositionY, STRING_UNDEFINED, BOOL, false) \ X(CHANGE_IS_PIVOT, changeIsPivot, STRING_UNDEFINED, BOOL, false) \ + X(CHANGE_IS_PIVOT_X, changeIsPivotX, STRING_UNDEFINED, BOOL, false) \ + X(CHANGE_IS_PIVOT_Y, changeIsPivotY, STRING_UNDEFINED, BOOL, false) \ X(CHANGE_IS_SCALE, changeIsScale, STRING_UNDEFINED, BOOL, false) \ + X(CHANGE_IS_SCALE_X, changeIsScaleX, STRING_UNDEFINED, BOOL, false) \ + X(CHANGE_IS_SCALE_Y, changeIsScaleY, STRING_UNDEFINED, BOOL, false) \ X(CHANGE_IS_ROTATION, changeIsRotation, STRING_UNDEFINED, BOOL, false) \ X(CHANGE_IS_DURATION, changeIsDuration, STRING_UNDEFINED, BOOL, false) \ X(CHANGE_IS_TINT, changeIsTint, STRING_UNDEFINED, BOOL, false) \