summaryrefslogtreecommitdiff
path: root/src/imgui_ui_viewport.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/imgui_ui_viewport.cpp')
-rw-r--r--src/imgui_ui_viewport.cpp44
1 files changed, 30 insertions, 14 deletions
diff --git a/src/imgui_ui_viewport.cpp b/src/imgui_ui_viewport.cpp
index 2489cd5..ed26ce7 100644
--- a/src/imgui_ui_viewport.cpp
+++ b/src/imgui_ui_viewport.cpp
@@ -394,7 +394,11 @@ ImGui_Viewport_TransformUI2(project_data *File, project_state *State, memory *Me
real32 U = LayerPoint.x / BoxLength.x;
real32 V = LayerPoint.y / BoxLength.y;
+ ImVec2 BoxScreenDimensions = IV2(BoxLength)*CompScale;
+
real32 HandleSize = ImGui::GetFontSize() * 2;
+ if (BoxScreenDimensions.x < (HandleSize*2) || BoxScreenDimensions.y < (HandleSize*2))
+ HandleSize *= 0.5;
ImVec2 ScaleHandleSize(HandleSize, HandleSize);
bool32 OtherActions = ImGui::IsKeyDown(ImGuiKey_Z);
@@ -669,7 +673,7 @@ ImGui_Viewport_TransformUI2(project_data *File, project_state *State, memory *Me
Assert(State->Tool == tool_default);
if (!io.KeyShift) {
- Layer_DeselectAll(File, State, Memory);
+ Layer_DeselectAll(File, State, Memory, 1);
State->Interact_Transform = {};
}
if (Selection != -1)
@@ -928,7 +932,7 @@ ImGui_Viewport_TransformUI(project_data *File, project_state *State, memory *Mem
History_Entry_Commit(Memory, "Transform layers");
while (Block_Loop(Memory, F_Layers, File->Layer_Count, &h, &c, &i)) {
block_layer *Layer = (block_layer *)Memory_Block_AddressAtIndex(Memory, F_Layers, i);
- if (Layer->IsSelected == 1) {
+ if (Layer->IsSelected & 0x01) {
// if (io.KeyCtrl) {
// layer_transforms T = Layer_GetTransforms(Layer);
// Transform_ApplyInteractive(*(interact_transform *)&State->Interact_Offset[0], &T.x, &T.y, &T.rotation, &T.scale);
@@ -987,7 +991,7 @@ ImGui_Viewport_SelectedLayerUI(project_state *State, memory *Memory, ui *UI, ImG
}
ImGui_Viewport_SelectedLayerUI(State, Memory, UI, io, draw_list, MainComp, Layer->Block_Source_Index, NewExtraT, PointCount, PointData, SortedCompArray, SortedLayerArray);
}
- if (Layer->IsSelected == 1) {
+ if (Layer->IsSelected & 0x01) {
uint32 Width = 0, Height = 0;
void *Data;
uint32 NumberOfVerts;
@@ -1017,11 +1021,11 @@ ImGui_Viewport_SelectedLayerUI(project_state *State, memory *Memory, ui *UI, ImG
layer_transforms T = Layer_GetTransforms(Layer);
if ((State->Interact_Active == interact_type_viewport_transform ||
- State->Interact_Active == interact_type_viewport_transform_gizmo) && Layer->IsSelected == 1) {
+ State->Interact_Active == interact_type_viewport_transform_gizmo) && Layer->IsSelected & 0x01) {
Transform_ApplyInteractive(State->Interact_Transform, &T.x, &T.y, &T.rotation, &T.scale);
}
if (State->Interact_Active == interact_type_viewport_duplicate && SortEntry.IsFake) {
- Assert(Layer->IsSelected);
+ Assert(Layer->IsSelected & 0x01);
T.x += State->Interact_Offset[0];
T.y += State->Interact_Offset[1];
}
@@ -1226,7 +1230,7 @@ ImGui_Viewport(project_data *File, project_state *State, ui *UI, memory *Memory,
block_layer *Layer = (block_layer *)Memory_Block_AddressAtIndex(Memory, F_Layers, i);
if (!Layer->IsPrecomp) {
block_source *Source = (block_source *)Memory_Block_AddressAtIndex(Memory, F_Sources, Layer->Block_Source_Index);
- if (Layer->IsSelected && Source->Type == source_type_principal) {
+ if ((Layer->IsSelected & 0x01) && Source->Type == source_type_principal) {
Assert(Source->BytesPerPixel == 4);
Arbitrary_Zero((uint8 *)State->Brush.TransientBitmap, 2048*2048*4);
State->Interact_Active = interact_type_brush;
@@ -1263,7 +1267,7 @@ ImGui_Viewport(project_data *File, project_state *State, ui *UI, memory *Memory,
if (BoxMax.x - BoxMin.x > 0.1f && BoxMax.y - BoxMin.y > 0.1f) {
Assert(BoxMax.x > BoxMin.x &&
BoxMax.y > BoxMin.y)
- BoxMax.y = (MousePos.y > ClickedPos.y) ? MousePos.y : ClickedPos.y;
+
if (io.MouseDelta.x || io.MouseDelta.y) {
if (State->Tool == tool_default && State->Interact_Active == interact_type_none) {
layer_transforms T = {};
@@ -1271,22 +1275,26 @@ ImGui_Viewport(project_data *File, project_state *State, ui *UI, memory *Memory,
v2 CompPoint = ImGui_ScreenPointToCompUV(ViewportMin, UI->CompPos, UI->CompZoom, io.MousePos) * V2(MainComp->Width, MainComp->Height);
int32 Selection = LayerIterate_TestSelection(State, Memory, File->PrincipalCompIndex, T, CompPoint,
SortedCompArray, SortedLayerArray, io.KeyShift);
- if (!State->InteractTransformMode && Selection != -1) {
- if (!io.KeyShift)
- Layer_DeselectAll(File, State, Memory);
+ if (!io.KeyShift && !State->InteractTransformMode && Selection != -1) {
+ Layer_DeselectAll(File, State, Memory);
Layer_Select(Memory, State, Selection);
State->Interact_Active = interact_type_viewport_transform_gizmo;
State->Interact_OutOfDrag = true;
State->InteractTransformMode = 3;
} else {
State->Interact_Active = interact_type_viewport_selection;
+ if (io.KeyShift) {
+ Interact_BoxSelect_Start(File, State, Memory);
+ }
}
}
if (State->Interact_Active == interact_type_viewport_selection) {
- Layer_DeselectAll(File, State, Memory);
+ Layer_DeselectAll(File, State, Memory, 1);
v2 MinPos_Comp = ImGui_ScreenPointToCompUV(ViewportMin, UI->CompPos, UI->CompZoom, BoxMin) * V2(MainComp->Width, MainComp->Height);
v2 MaxPos_Comp = ImGui_ScreenPointToCompUV(ViewportMax, UI->CompPos, UI->CompZoom, BoxMax) * V2(MainComp->Width, MainComp->Height);
- Layer_TestBoxSelect(Memory, State, UI, SortedCompArray, SortedLayerArray, File->PrincipalCompIndex, MinPos_Comp, MaxPos_Comp);
+ layer_transforms T = {};
+ T.scale = 1.0f;
+ Layer_TestBoxSelect(Memory, State, UI, SortedCompArray, SortedLayerArray, File->PrincipalCompIndex, T, MinPos_Comp, MaxPos_Comp);
}
}
if (State->Interact_Active == interact_type_viewport_selection) {
@@ -1326,6 +1334,7 @@ ImGui_Viewport(project_data *File, project_state *State, ui *UI, memory *Memory,
}
if (IsDeactivated && State->Interact_Active == interact_type_viewport_selection) {
+ Interact_BoxSelect_End(File, State, Memory);
State->Interact_Active = interact_type_none;
}
@@ -1465,8 +1474,15 @@ ImGui_Viewport(project_data *File, project_state *State, ui *UI, memory *Memory,
real32 Distance = 0;
if (IsActive) {
- if (ImGui::IsMouseDragging(ImGuiMouseButton_Left, -1.0f))
+ if (ImGui::IsMouseDragging(ImGuiMouseButton_Left, -1.0f)) {
+ real32 MouseVecLength = Length(io.MousePos - io.MouseClickedPos[0]);
+ real32 MouseMaxLength = ViewportScale.x;
Distance = io.MouseDelta.x + io.MouseDelta.y;
+ real32 Multiplier = -log(1.0f - (MouseVecLength / MouseMaxLength));
+ if (isnan(Multiplier))
+ Multiplier = 0.0f;
+ Distance = Distance + (Distance * Multiplier);
+ }
if (ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left))
Distance = 200;
}
@@ -1494,7 +1510,7 @@ ImGui_Viewport(project_data *File, project_state *State, ui *UI, memory *Memory,
State->Interact_Active = interact_type_none;
State->Interact_Modifier = 0;
v2 Offset = V2(State->Interact_Offset[0], State->Interact_Offset[1]);
- Project_Layer_Duplicate(File, State, Memory, SortedCompArray, SortedLayerArray, Offset, 1);
+ Project_Layer_Duplicate(File, State, Memory, SortedCompArray, SortedLayerArray, Offset, 1, io.KeyCtrl);
State->Interact_Dup_Previous[0] = State->Interact_Offset[0];
State->Interact_Dup_Previous[1] = State->Interact_Offset[1];
State->Interact_Offset[0] = 0;