diff --git a/Source/Plugins/GZDoomEditing/ClassicModes/CeilingAlignMode.cs b/Source/Plugins/GZDoomEditing/ClassicModes/CeilingAlignMode.cs index 244ef15ea1edd47632036858641a9fca06ba53cd..c787072ac7164c018f9cfb40fd0643abe586cb46 100644 --- a/Source/Plugins/GZDoomEditing/ClassicModes/CeilingAlignMode.cs +++ b/Source/Plugins/GZDoomEditing/ClassicModes/CeilingAlignMode.cs @@ -64,7 +64,8 @@ namespace CodeImp.DoomBuilder.GZDoomEditing public override string XOffsetName { get { return "xpanningceiling"; } } public override string YOffsetName { get { return "ypanningceiling"; } } public override string RotationName { get { return "rotationceiling"; } } - + public override string UndoDescription { get { return "Ceiling Alignment"; } } + #endregion #region ================== Constructor / Disposer diff --git a/Source/Plugins/GZDoomEditing/ClassicModes/FlatAlignMode.cs b/Source/Plugins/GZDoomEditing/ClassicModes/FlatAlignMode.cs index 6668dad9f5ac3eb1fab33de32f989e8bc5196c36..7470a7991d6ca5e831e25f5bd7cd364f28221e95 100644 --- a/Source/Plugins/GZDoomEditing/ClassicModes/FlatAlignMode.cs +++ b/Source/Plugins/GZDoomEditing/ClassicModes/FlatAlignMode.cs @@ -126,6 +126,7 @@ namespace CodeImp.DoomBuilder.GZDoomEditing public abstract string XOffsetName { get; } public abstract string YOffsetName { get; } public abstract string RotationName { get; } + public abstract string UndoDescription { get; } #endregion @@ -613,7 +614,7 @@ namespace CodeImp.DoomBuilder.GZDoomEditing if(selection.Count == 0) { General.Interface.MessageBeep(MessageBeepType.Default); - General.Interface.DisplayStatus(StatusType.Info, "A selected sector is required for this action."); + General.Interface.DisplayStatus(StatusType.Action, "A selected sector is required for this action."); General.Editing.CancelMode(); return; } @@ -625,7 +626,7 @@ namespace CodeImp.DoomBuilder.GZDoomEditing (texture.Width <= 0) || (texture.Height <= 0) || !texture.IsImageLoaded) { General.Interface.MessageBeep(MessageBeepType.Default); - General.Interface.DisplayStatus(StatusType.Info, "The selected sector must have a loaded texture to align."); + General.Interface.DisplayStatus(StatusType.Action, "The selected sector must have a loaded texture to align."); General.Editing.CancelMode(); return; } @@ -688,29 +689,33 @@ namespace CodeImp.DoomBuilder.GZDoomEditing { base.OnAccept(); - // Restore original values - RestoreSectors(); - General.Map.Map.Update(); - - // Make undo - General.Map.UndoRedo.CreateUndo("Flat Alignment"); + if(!modealreadyswitching) + { + modealreadyswitching = true; + + // Restore original values + RestoreSectors(); + General.Map.Map.Update(); - // Resume normal undo/redo recording - General.Map.UndoRedo.IgnorePropChanges = false; + // Make undo + General.Map.UndoRedo.CreateUndo(UndoDescription); - // Apply changes - UpdateSectors(); - General.Map.Map.Update(); + // Resume normal undo/redo recording + General.Map.UndoRedo.IgnorePropChanges = false; - // Clear selection - if(selection.Count == 1) - General.Map.Map.ClearAllSelected(); + // Apply changes + UpdateSectors(); + General.Map.Map.Update(); - // Done - General.Map.IsChanged = true; + // Clear selection + if(selection.Count == 1) + General.Map.Map.ClearAllSelected(); - if(!modealreadyswitching) - { + // Done + General.Map.IsChanged = true; + selection = null; + sectorinfo = null; + // Return to previous stable mode General.Editing.ChangeMode(General.Editing.PreviousStableMode.Name); } @@ -720,6 +725,7 @@ namespace CodeImp.DoomBuilder.GZDoomEditing public override void OnCancel() { base.OnCancel(); + modealreadyswitching = true; // Restore original values RestoreSectors(); @@ -865,7 +871,8 @@ namespace CodeImp.DoomBuilder.GZDoomEditing // This redraws the display public override void OnRedrawDisplay() { - UpdateRectangleComponents(); + if(sectorinfo != null) + UpdateRectangleComponents(); renderer.RedrawSurface(); @@ -886,41 +893,44 @@ namespace CodeImp.DoomBuilder.GZDoomEditing } // Render overlay - if(renderer.StartOverlay(true)) + if(sectorinfo != null) { - // Rectangle - PixelColor rectcolor = General.Colors.Highlight.WithAlpha(RECTANGLE_ALPHA); - renderer.RenderGeometry(cornerverts, null, true); - if(extensionline.GetLengthSq() > 0.0f) - renderer.RenderLine(extensionline.v1, extensionline.v2, 1, General.Colors.Indication.WithAlpha(EXTENSION_LINE_ALPHA), true); - renderer.RenderLine(corners[0], corners[1], 4, rectcolor, true); - renderer.RenderLine(corners[1], corners[2], 4, rectcolor, true); - renderer.RenderLine(corners[2], corners[3], 4, rectcolor, true); - renderer.RenderLine(corners[3], corners[0], 4, rectcolor, true); - - // Lines - renderer.RenderLine(corners[0], extends[0], 1f, General.Colors.Highlight, true); - renderer.RenderLine(corners[0], extends[1], 1f, General.Colors.Highlight, true); - renderer.RenderLine(corners[1], corners[2], 0.5f, General.Colors.Highlight, true); - renderer.RenderLine(corners[2], corners[3], 0.5f, General.Colors.Highlight, true); - - // Handles - renderer.RenderRectangleFilled(rotategrips[0], General.Colors.Background, true); - renderer.RenderRectangleFilled(rotategrips[1], General.Colors.Background, true); - renderer.RenderRectangle(rotategrips[0], 2f, General.Colors.Indication, true); - renderer.RenderRectangle(rotategrips[1], 2f, General.Colors.Indication, true); - renderer.RenderRectangleFilled(resizegrips[0], General.Colors.Background, true); - renderer.RenderRectangleFilled(resizegrips[1], General.Colors.Background, true); - renderer.RenderRectangle(resizegrips[0], 2f, General.Colors.Highlight, true); - renderer.RenderRectangle(resizegrips[1], 2f, General.Colors.Highlight, true); - - // Rotate/align point - if(showalignoffset) - renderer.RenderRectangleFilled(alignrect, General.Colors.Selection, true); - - renderer.Finish(); + if(renderer.StartOverlay(true)) + { + // Rectangle + PixelColor rectcolor = General.Colors.Highlight.WithAlpha(RECTANGLE_ALPHA); + renderer.RenderGeometry(cornerverts, null, true); + if(extensionline.GetLengthSq() > 0.0f) + renderer.RenderLine(extensionline.v1, extensionline.v2, 1, General.Colors.Indication.WithAlpha(EXTENSION_LINE_ALPHA), true); + renderer.RenderLine(corners[0], corners[1], 4, rectcolor, true); + renderer.RenderLine(corners[1], corners[2], 4, rectcolor, true); + renderer.RenderLine(corners[2], corners[3], 4, rectcolor, true); + renderer.RenderLine(corners[3], corners[0], 4, rectcolor, true); + + // Lines + renderer.RenderLine(corners[0], extends[0], 1f, General.Colors.Highlight, true); + renderer.RenderLine(corners[0], extends[1], 1f, General.Colors.Highlight, true); + renderer.RenderLine(corners[1], corners[2], 0.5f, General.Colors.Highlight, true); + renderer.RenderLine(corners[2], corners[3], 0.5f, General.Colors.Highlight, true); + + // Handles + renderer.RenderRectangleFilled(rotategrips[0], General.Colors.Background, true); + renderer.RenderRectangleFilled(rotategrips[1], General.Colors.Background, true); + renderer.RenderRectangle(rotategrips[0], 2f, General.Colors.Indication, true); + renderer.RenderRectangle(rotategrips[1], 2f, General.Colors.Indication, true); + renderer.RenderRectangleFilled(resizegrips[0], General.Colors.Background, true); + renderer.RenderRectangleFilled(resizegrips[1], General.Colors.Background, true); + renderer.RenderRectangle(resizegrips[0], 2f, General.Colors.Highlight, true); + renderer.RenderRectangle(resizegrips[1], 2f, General.Colors.Highlight, true); + + // Rotate/align point + if(showalignoffset) + renderer.RenderRectangleFilled(alignrect, General.Colors.Selection, true); + + renderer.Finish(); + } } - + renderer.Present(); } diff --git a/Source/Plugins/GZDoomEditing/ClassicModes/FloorAlignMode.cs b/Source/Plugins/GZDoomEditing/ClassicModes/FloorAlignMode.cs index 789e37bf8a31b44e9978e698a1b11709e55e3318..9c779eb428b291154cacb13d915a913e64a5cdb0 100644 --- a/Source/Plugins/GZDoomEditing/ClassicModes/FloorAlignMode.cs +++ b/Source/Plugins/GZDoomEditing/ClassicModes/FloorAlignMode.cs @@ -64,6 +64,7 @@ namespace CodeImp.DoomBuilder.GZDoomEditing public override string XOffsetName { get { return "xpanningfloor"; } } public override string YOffsetName { get { return "ypanningfloor"; } } public override string RotationName { get { return "rotationfloor"; } } + public override string UndoDescription { get { return "Floor Alignment"; } } #endregion diff --git a/Source/Plugins/GZDoomEditing/VisualModes/VisualCeiling.cs b/Source/Plugins/GZDoomEditing/VisualModes/VisualCeiling.cs index 9c7087d1dc86c0b917f513d973fbc96e7394278e..05a98794790c12877c1974070087a3a8875fbe2b 100644 --- a/Source/Plugins/GZDoomEditing/VisualModes/VisualCeiling.cs +++ b/Source/Plugins/GZDoomEditing/VisualModes/VisualCeiling.cs @@ -169,6 +169,7 @@ namespace CodeImp.DoomBuilder.GZDoomEditing float oldy = Sector.Sector.Fields.GetValue("ypanningceiling", 0.0f); Sector.Sector.Fields["xpanningceiling"] = new UniValue(UniversalType.Float, oldx + (float)xy.X); Sector.Sector.Fields["ypanningceiling"] = new UniValue(UniversalType.Float, oldy + (float)xy.Y); + Sector.Sector.UpdateNeeded = true; } // Paste texture diff --git a/Source/Plugins/GZDoomEditing/VisualModes/VisualFloor.cs b/Source/Plugins/GZDoomEditing/VisualModes/VisualFloor.cs index 3430d1f1220243147273a4f0ac93aee88e87f77b..a811a979649569bb4d4c8f674e97a2289cd7412d 100644 --- a/Source/Plugins/GZDoomEditing/VisualModes/VisualFloor.cs +++ b/Source/Plugins/GZDoomEditing/VisualModes/VisualFloor.cs @@ -168,6 +168,7 @@ namespace CodeImp.DoomBuilder.GZDoomEditing float oldy = Sector.Sector.Fields.GetValue("ypanningfloor", 0.0f); Sector.Sector.Fields["xpanningfloor"] = new UniValue(UniversalType.Float, oldx + (float)xy.X); Sector.Sector.Fields["ypanningfloor"] = new UniValue(UniversalType.Float, oldy + (float)xy.Y); + Sector.Sector.UpdateNeeded = true; } // Paste texture