diff options
author | Fox Caminiti <fox@foxcam.net> | 2023-03-05 13:29:14 -0500 |
---|---|---|
committer | Fox Caminiti <fox@foxcam.net> | 2023-03-05 13:29:14 -0500 |
commit | f7a194270e25deeb3ce9c9b9fbce0da8b6be71ca (patch) | |
tree | 3a9716248df5a2da58546e29c1b476c67500d621 /src/main.cpp | |
parent | d0410bddcd7ea43c51b6bf2442a99e58710e70eb (diff) |
Diffstat (limited to 'src/main.cpp')
-rw-r--r-- | src/main.cpp | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/src/main.cpp b/src/main.cpp index 42c07a9..7cc4745 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -329,7 +329,7 @@ GL_Test(const ImDrawList* parent_list, const ImDrawCmd* cmd) GL_UpdateTexture2(&MSBuffer2, NULL, A[2], A[3], RenderData->BytesPerPixel, 0); glBindFramebuffer(GL_FRAMEBUFFER, MSBuffer.FramebufferObject); glBindTexture(GL_TEXTURE_2D, 0); - glClearColor(0.0f, 0.0f, 0.0f, 0.0f); + glClearColor(RenderData->BGColor.r, RenderData->BGColor.g, RenderData->BGColor.b, 0.0f); glClear(GL_COLOR_BUFFER_BIT); glUseProgram(DefaultShaderProgram); @@ -565,7 +565,7 @@ LayerIterate_TestSelection(project_state *State, memory *Memory, uint32 Principa // finding the inverse transform-- i.e. transforming the layers locally rather // than transforming them in comp space. static void -LayerIterate(project_state *State, memory *Memory, uint32 CompIndex, layer_transforms ExtraT, v2 Center, +LayerIterate(project_state *State, memory *Memory, uint32 CompIndex, interact_transform Interact_Transform, layer_transforms ExtraT, v2 Center, sorted_comp_array *SortedCompArray, sorted_layer_array *SortedLayerArray) { block_composition *Comp = (block_composition *)Memory_Block_AddressAtIndex(Memory, F_Precomps, CompIndex); @@ -585,14 +585,14 @@ LayerIterate(project_state *State, memory *Memory, uint32 CompIndex, layer_trans v2 NewCenter = T_CompPosToLayerPos(NewExtraT, Comp->Width, Comp->Height, Width, Height, Center.x, Center.y); NewExtraT.rotation = ExtraT.rotation - NewExtraT.rotation; NewExtraT.scale = ExtraT.scale / NewExtraT.scale; - LayerIterate(State, Memory, Layer->Block_Source_Index, NewExtraT, NewCenter, SortedCompArray, SortedLayerArray); + LayerIterate(State, Memory, Layer->Block_Source_Index, Interact_Transform, NewExtraT, NewCenter, SortedCompArray, SortedLayerArray); } if (Layer->IsSelected & 0x01) { #if DEBUG if (Layer->IsPrecomp) PostMsg(State, "DEBUG: Precomp transformed!"); #endif - v2 Position = State->Interact_Transform.Position; + v2 Position = Interact_Transform.Position; real32 Rad = (ExtraT.rotation * (PI / 180)); v2 XAxis = Position.x * ExtraT.scale * V2(cos(Rad), sin(Rad)); v2 YAxis = Position.y * -ExtraT.scale * V2(sin(Rad), -cos(Rad)); @@ -602,7 +602,7 @@ LayerIterate(project_state *State, memory *Memory, uint32 CompIndex, layer_trans History_Action_Swap(Memory, F_Layers, sizeof(Layer->y.CurrentValue), &Layer->y.CurrentValue); History_Action_Swap(Memory, F_Layers, sizeof(Layer->scale.CurrentValue), &Layer->scale.CurrentValue); History_Action_Swap(Memory, F_Layers, sizeof(Layer->rotation.CurrentValue), &Layer->rotation.CurrentValue); - Transform_ApplyLocal(State->Interact_Transform, Position, Center, + Transform_ApplyLocal(Interact_Transform, Position, Center, &Layer->x.CurrentValue, &Layer->y.CurrentValue, &Layer->rotation.CurrentValue, &Layer->scale.CurrentValue); } } @@ -1242,6 +1242,8 @@ int main(int argc, char *argv[]) { File->Comp_Count = 1; + File->UI.BGColor= V4(0.1, 0.1, 0.1, 0.0); + SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO); SDL_AudioSpec Audio = {0}; @@ -1508,8 +1510,25 @@ int main(int argc, char *argv[]) { State->Interact_Active = interact_type_viewport_duplicate; sorted_file Sorted = File_Sort_Push(File, State, &Memory); History_Entry_Commit(&Memory, "Duplicate layers"); - v2 Offset = V2(State->Interact_Dup_Previous[0], State->Interact_Dup_Previous[1]); - Project_Layer_Duplicate(File, State, &Memory, Sorted.CompArray, Sorted.LayerArray, Offset, io.KeyCtrl); + Project_Layer_Duplicate(File, State, &Memory, Sorted.CompArray, Sorted.LayerArray, V2(0, 0), 0); + if (!io.KeyCtrl) + { + interact_transform Interact = State->Interact_Transform_Prev; + v2 BoxLength = Interact.Max - Interact.Min; + v2 Center = Interact.Max - (BoxLength/2); + if (Interact.RadianOffset != 0.0f) { + v2 LocalCenter = Interact.NewCenter; + real32 Rad = Interact.RadianOffset; + real32 Point0X = Center.x - Interact.OGCenter.x; + real32 Point0Y = Center.y - Interact.OGCenter.y; + v2 XAxis = (Point0X * 1.0f)*V2(cos(Rad), sin(Rad)); + v2 YAxis = (Point0Y * 1.0f)*V2(sin(Rad), -cos(Rad)); + Center = Interact.OGCenter + XAxis + YAxis; + } + layer_transforms T = {}; + T.scale = 1.0f; + LayerIterate(State, &Memory, File->PrincipalCompIndex, Interact, T, Center, Sorted.CompArray, Sorted.LayerArray); + } State->Interact_Transform = {}; History_Entry_End(&Memory); File_Sort_Pop(&Memory, Sorted.Layer_SortSize, Sorted.Property_SortSize, Sorted.Source_SortSize); |