From 005efad10abc3f15e37fdb64c67e187f6b3476a2 Mon Sep 17 00:00:00 2001 From: Lars Brubaker Date: Fri, 21 May 2021 14:24:45 -0700 Subject: [PATCH] Making icons use the text color --- .../ApplicationView/ApplicationController.cs | 10 +- .../ApplicationView/SceneOperations.cs | 99 ++++++++++--------- .../CustomWidgets/SceneOperation.cs | 2 +- .../EditorTools/LithophanePlugin.cs | 3 +- .../Library/Widgets/HardwareTreeView.cs | 9 +- .../Library/Widgets/LibraryWidget.cs | 3 +- .../PartPreviewWindow/Object3DTreeBuilder.cs | 2 +- .../PartPreviewWindow/OperationIconButton.cs | 2 +- .../PartPreviewWindow/SelectedObjectPanel.cs | 7 +- .../View3D/GridOptionsPanel.cs | 3 +- .../View3D/PrinterBar/PrinterActionsBar.cs | 7 +- .../PartPreviewWindow/View3D/View3DWidget.cs | 38 +++++-- .../PartPreviewWindow/ViewControls3D.cs | 8 +- Submodules/agg-sharp | 2 +- 14 files changed, 112 insertions(+), 83 deletions(-) diff --git a/MatterControlLib/ApplicationView/ApplicationController.cs b/MatterControlLib/ApplicationView/ApplicationController.cs index da666b274..15cd5b1b6 100644 --- a/MatterControlLib/ApplicationView/ApplicationController.cs +++ b/MatterControlLib/ApplicationView/ApplicationController.cs @@ -50,6 +50,7 @@ using MatterHackers.Agg.Platform; using MatterHackers.Agg.UI; using MatterHackers.Agg.VertexSource; using MatterHackers.DataConverters3D; +using MatterHackers.ImageProcessing; using MatterHackers.Localizations; using MatterHackers.MatterControl.CustomWidgets; using MatterHackers.MatterControl.DataStorage; @@ -573,7 +574,8 @@ namespace MatterHackers.MatterControl var sceneContext = view3DWidget.sceneContext; var printer = sceneContext.Printer; - bool invertIcons = ApplicationController.Instance.MenuTheme.InvertIcons; + var theme = Instance.MenuTheme; + bool invertIcons = theme.InvertIcons; // Build workspace actions, each having a unique ID var actions = new[] @@ -621,7 +623,7 @@ namespace MatterHackers.MatterControl new NamedAction() { ID = "Delete", - Icon = StaticData.Instance.LoadIcon("remove.png", 16, 16).SetPreMultiply(), + Icon = StaticData.Instance.LoadIcon("remove.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), Title = "Remove".Localize(), Action = sceneContext.Scene.DeleteSelection, IsEnabled = () => sceneContext.Scene.SelectedItem != null @@ -630,7 +632,7 @@ namespace MatterHackers.MatterControl { ID = "Export", Title = "Export".Localize(), - Icon = StaticData.Instance.LoadIcon("cube_export.png", 16, 16, invertIcons), + Icon = StaticData.Instance.LoadIcon("cube_export.png", 16, 16).SetToColor(theme.TextColor), Action = () => { ApplicationController.Instance.ExportLibraryItems( @@ -690,7 +692,7 @@ namespace MatterHackers.MatterControl await sceneContext.Scene.AutoArrangeChildren(view3DWidget.BedCenter).ConfigureAwait(false); }, IsEnabled = () => sceneContext.EditableScene, - Icon = StaticData.Instance.LoadIcon("arrange_all.png", 16, 16, invertIcons), + Icon = StaticData.Instance.LoadIcon("arrange_all.png", 16, 16).SetToColor(theme.TextColor), }, new NamedAction() { diff --git a/MatterControlLib/ApplicationView/SceneOperations.cs b/MatterControlLib/ApplicationView/SceneOperations.cs index 06c0c3f43..4e246b491 100644 --- a/MatterControlLib/ApplicationView/SceneOperations.cs +++ b/MatterControlLib/ApplicationView/SceneOperations.cs @@ -39,6 +39,7 @@ using MatterHackers.Agg.UI; using MatterHackers.Agg.VertexSource; using MatterHackers.DataConverters3D; using MatterHackers.DataConverters3D.UndoCommands; +using MatterHackers.ImageProcessing; using MatterHackers.Localizations; using MatterHackers.MatterControl.DesignTools; using MatterHackers.MatterControl.DesignTools.Operations; @@ -61,7 +62,7 @@ namespace MatterHackers.MatterControl public static IEnumerable All => registeredOperations; - private static Dictionary> Icons { get; set; } + private static Dictionary> Icons { get; set; } private static Dictionary OperationsById { get; } = new Dictionary(); @@ -95,7 +96,7 @@ namespace MatterHackers.MatterControl scene.SelectedItem = baseMesh; }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("add_base.png", 16, 16, invertIcon).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("add_base.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), HelpTextResolver = () => "*A path must be selected*".Localize(), // this is for when base is working with generic meshes //IsEnabled = (sceneContext) => sceneContext.Scene.SelectedItem != null && !(sceneContext.Scene.SelectedItem is IPathObject), @@ -165,7 +166,7 @@ namespace MatterHackers.MatterControl continue; } - var menuItem = subMenu.CreateMenuItem(childOperation.Title, childOperation.Icon(theme.InvertIcons)); + var menuItem = subMenu.CreateMenuItem(childOperation.Title, childOperation.Icon(theme)); menuItem.Click += (s, e) => UiThread.RunOnIdle(() => { childOperation.Action?.Invoke(sceneContext); @@ -181,7 +182,7 @@ namespace MatterHackers.MatterControl } else { - var menuItem = popupMenu.CreateMenuItem(operation.Title, operation.Icon(theme.InvertIcons)); + var menuItem = popupMenu.CreateMenuItem(operation.Title, operation.Icon(theme)); menuItem.Click += (s, e) => operation.Action(sceneContext); menuItem.Enabled = operation.IsEnabled(sceneContext); menuItem.ToolTipText = operation.HelpText ?? ""; @@ -247,17 +248,17 @@ namespace MatterHackers.MatterControl && componentObject.Finalized && !componentObject.ProOnly; }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("scale_32x32.png", 16, 16, invertIcon).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("scale_32x32.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), HelpTextResolver = () => "*A component must be selected*".Localize(), IsEnabled = (sceneContext) => sceneContext.Scene.SelectedItem != null && !(sceneContext.Scene.SelectedItem is ImageObject3D), }; } - public static ImageBuffer GetIcon(Type type, bool invertIcon) + public static ImageBuffer GetIcon(Type type, ThemeConfig theme) { if (Icons.ContainsKey(type)) { - return Icons[type].Invoke(invertIcon); + return Icons[type].Invoke(theme); } return null; @@ -333,7 +334,7 @@ namespace MatterHackers.MatterControl // Invalidate image to kick off rebuild of ImageConverter stack imageObject.Invalidate(InvalidateType.Image); }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("image_converter.png", 16, 16, invertIcon).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("image_converter.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), HelpTextResolver = () => "*An image must be selected*".Localize(), IsEnabled = (sceneContext) => sceneContext.Scene.SelectedItem != null && sceneContext.Scene.SelectedItem is ImageObject3D, }; @@ -368,7 +369,7 @@ namespace MatterHackers.MatterControl path.Invalidate(InvalidateType.Properties); } }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("image_to_path.png", 16, 16, invertIcon).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("image_to_path.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), HelpTextResolver = () => "*An image must be selected*".Localize(), IsEnabled = (sceneContext) => sceneContext.Scene.SelectedItem != null && sceneContext.Scene.SelectedItem is ImageObject3D, }; @@ -398,7 +399,7 @@ namespace MatterHackers.MatterControl inflatePath.Invalidate(InvalidateType.Properties); }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("inflate_path.png", 16, 16, invertIcon).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("inflate_path.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), HelpTextResolver = () => "*A path must be selected*".Localize(), IsEnabled = (sceneContext) => sceneContext.Scene.SelectedItem != null && sceneContext.Scene.SelectedItem is IPathObject, }; @@ -432,7 +433,7 @@ namespace MatterHackers.MatterControl extrude.Invalidate(InvalidateType.Properties); } }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("linear_extrude.png", 16, 16, invertIcon).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("linear_extrude.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), HelpTextResolver = () => "*A path must be selected*".Localize(), IsEnabled = (sceneContext) => sceneContext.Scene.SelectedItem != null && sceneContext.Scene.SelectedItem is IPathObject, }; @@ -466,7 +467,7 @@ namespace MatterHackers.MatterControl revolve.Invalidate(InvalidateType.Properties); } }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("revolve.png", 16, 16, invertIcon).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("revolve.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), HelpTextResolver = () => "*A path must be selected*".Localize(), IsEnabled = (sceneContext) => sceneContext.Scene.SelectedItem != null && sceneContext.Scene.SelectedItem is IPathObject, }; @@ -510,7 +511,7 @@ namespace MatterHackers.MatterControl scene.UndoBuffer.AddAndDo(new ReplaceCommand(items, new[] { component })); } }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("component.png", 16, 16, invertIcon).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("component.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), HelpTextResolver = () => "*At least 1 part must be selected*".Localize(), IsEnabled = (sceneContext) => { @@ -533,7 +534,7 @@ namespace MatterHackers.MatterControl { new MirrorObject3D_2().WrapSelectedItemAndSelect(sceneContext.Scene); }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("mirror_32x32.png", 16, 16, invertIcon).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("mirror_32x32.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), HelpTextResolver = () => "*At least 1 part must be selected*".Localize(), IsEnabled = (sceneContext) => IsMeshObject(sceneContext.Scene.SelectedItem), }; @@ -563,7 +564,7 @@ namespace MatterHackers.MatterControl outlinePath.Invalidate(InvalidateType.Properties); }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("outline.png", 16, 16, invertIcon).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("outline.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), HelpTextResolver = () => "*A path must be selected*".Localize(), IsEnabled = (sceneContext) => sceneContext.Scene.SelectedItem != null && sceneContext.Scene.SelectedItem is IPathObject, }; @@ -580,7 +581,7 @@ namespace MatterHackers.MatterControl { new RotateObject3D_2().WrapSelectedItemAndSelect(sceneContext.Scene); }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon(Path.Combine("ViewTransformControls", "rotate.png"), 16, 16, invertIcon).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon(Path.Combine("ViewTransformControls", "rotate.png"), 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), HelpTextResolver = () => "*At least 1 part must be selected*".Localize(), IsEnabled = (sceneContext) => sceneContext.Scene.SelectedItem != null, }; @@ -597,7 +598,7 @@ namespace MatterHackers.MatterControl { new ScaleObject3D_3().WrapSelectedItemAndSelect(sceneContext.Scene); }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("scale_32x32.png", 16, 16, invertIcon).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("scale_32x32.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), HelpTextResolver = () => "*At least 1 part must be selected*".Localize(), IsEnabled = (sceneContext) => sceneContext.Scene.SelectedItem != null, }; @@ -627,7 +628,7 @@ namespace MatterHackers.MatterControl smoothPath.Invalidate(InvalidateType.Properties); }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("smooth_path.png", 16, 16, invertIcon).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("smooth_path.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), HelpTextResolver = () => "*A path must be selected*".Localize(), IsEnabled = (sceneContext) => sceneContext.Scene.SelectedItem != null && sceneContext.Scene.SelectedItem is IPathObject, }; @@ -644,7 +645,7 @@ namespace MatterHackers.MatterControl { new TranslateObject3D().WrapSelectedItemAndSelect(sceneContext.Scene); }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon(Path.Combine("ViewTransformControls", "translate.png"), 16, 16, invertIcon).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon(Path.Combine("ViewTransformControls", "translate.png"), 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), HelpTextResolver = () => "*At least 1 part must be selected*".Localize(), IsEnabled = (sceneContext) => sceneContext.Scene.SelectedItem != null, }; @@ -665,7 +666,7 @@ namespace MatterHackers.MatterControl }; array.AddSelectionAsChildren(sceneContext.Scene, sceneContext.Scene.SelectedItem); }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("array_advanced.png", 16, 16).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("array_advanced.png", 16, 16).SetPreMultiply(), HelpTextResolver = () => "*A single part must be selected*".Localize(), IsEnabled = (sceneContext) => sceneContext.Scene.SelectedItem != null && !(sceneContext.Scene.SelectedItem is SelectionGroupObject3D), }; @@ -685,7 +686,7 @@ namespace MatterHackers.MatterControl var align = new AlignObject3D(); align.AddSelectionAsChildren(scene, selectedItem); }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("align_left_dark.png", 16, 16, invertIcon).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("align_left_dark.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), HelpTextResolver = () => "*At least 2 parts must be selected*".Localize(), IsEnabled = (sceneContext) => sceneContext.Scene.SelectedItem is SelectionGroupObject3D, }; @@ -705,7 +706,7 @@ namespace MatterHackers.MatterControl { return sceneContext.EditableScene && sceneContext.Scene.VisibleMeshes().Any(); }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("arrange_all.png", 16, 16, invertIcon).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("arrange_all.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), ShowInModifyMenu = (sceneContext) => false, }; } @@ -878,7 +879,7 @@ namespace MatterHackers.MatterControl }, }; - Icons = new Dictionary>(); + Icons = new Dictionary>(); foreach (var operation in registeredOperations) { @@ -886,7 +887,7 @@ namespace MatterHackers.MatterControl } // Explicitly register SelectionGroup icon - if (Icons.TryGetValue(typeof(GroupObject3D), out Func groupIconSource)) + if (Icons.TryGetValue(typeof(GroupObject3D), out Func groupIconSource)) { Icons.Add(typeof(SelectionGroupObject3D), groupIconSource); } @@ -915,8 +916,8 @@ namespace MatterHackers.MatterControl // default operations PrimaryOperations.Add(typeof(Object3D), new List { SceneOperations.ById("Scale") }); - Icons.Add(typeof(ImageObject3D), (invertIcon) => StaticData.Instance.LoadIcon("image_converter.png", 16, 16, invertIcon).SetPreMultiply()); - // Icons.Add(typeof(CubeObject3D), (invertIcon) => StaticData.Instance.LoadIcon("image_converter.png", 16, 16, invertIcon).SetPreMultiply()); + Icons.Add(typeof(ImageObject3D), (theme) => StaticData.Instance.LoadIcon("image_converter.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply()); + // Icons.Add(typeof(CubeObject3D), (theme) => StaticData.Instance.LoadIcon("image_converter.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply()); } private static SceneOperation CombineOperation() @@ -937,7 +938,7 @@ namespace MatterHackers.MatterControl new CombineObject3D_2().WrapSelectedItemAndSelect(sceneContext.Scene); } }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("combine.png", 16, 16, !invertIcon).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("combine.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), HelpTextResolver = () => "*At least 2 parts must be selected*".Localize(), IsEnabled = (sceneContext) => BooleanCandidate(sceneContext.Scene.SelectedItem), }; @@ -955,7 +956,7 @@ namespace MatterHackers.MatterControl var curve = new CurveObject3D_3(); curve.WrapSelectedItemAndSelect(sceneContext.Scene); }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("curve.png", 16, 16, invertIcon), + Icon = (theme) => StaticData.Instance.LoadIcon("curve.png", 16, 16).SetToColor(theme.TextColor), HelpTextResolver = () => "*At least 1 part must be selected*".Localize(), IsEnabled = (sceneContext) => IsMeshObject(sceneContext.Scene.SelectedItem), }; @@ -991,7 +992,7 @@ namespace MatterHackers.MatterControl scene.UndoBuffer.AddAndDo(new TransformCommand(transformData)); } }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("dual_align.png", 16, 16, invertIcon).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("dual_align.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), HelpTextResolver = () => "*At least 2 parts must be selected*".Localize(), IsEnabled = (sceneContext) => sceneContext.Scene.SelectedItem is SelectionGroupObject3D, }; @@ -1005,7 +1006,7 @@ namespace MatterHackers.MatterControl Action = (sceneContext) => sceneContext.DuplicateItem(5), HelpTextResolver = () => "*At least 1 part must be selected*".Localize(), IsEnabled = (sceneContext) => sceneContext.Scene.SelectedItem != null, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("duplicate.png", 16, 16).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("duplicate.png", 16, 16).SetPreMultiply(), }; } @@ -1028,7 +1029,7 @@ namespace MatterHackers.MatterControl scene.UndoBuffer.AddAndDo(new ReplaceCommand(new[] { selectedItem }, new[] { fit })); } }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("fit.png", 16, 16, invertIcon), + Icon = (theme) => StaticData.Instance.LoadIcon("fit.png", 16, 16).SetToColor(theme.TextColor), IsEnabled = (sceneContext) => sceneContext.Scene.SelectedItem != null && !(sceneContext.Scene.SelectedItem is SelectionGroupObject3D), }; } @@ -1052,7 +1053,7 @@ namespace MatterHackers.MatterControl scene.UndoBuffer.AddAndDo(new ReplaceCommand(new[] { selectedItem }, new[] { fit })); } }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("fit.png", 16, 16, invertIcon), + Icon = (theme) => StaticData.Instance.LoadIcon("fit.png", 16, 16).SetToColor(theme.TextColor), IsEnabled = (sceneContext) => sceneContext.Scene.SelectedItem != null && !(sceneContext.Scene.SelectedItem is SelectionGroupObject3D), }; } @@ -1099,7 +1100,7 @@ namespace MatterHackers.MatterControl && scene.SelectedItem != null && scene.SelectedItem is SelectionGroupObject3D && scene.SelectedItem.Children.Count > 1, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("group.png", 16, 16).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("group.png", 16, 16).SetPreMultiply(), }; } @@ -1115,7 +1116,7 @@ namespace MatterHackers.MatterControl var hollowOut = new HollowOutObject3D(); hollowOut.WrapSelectedItemAndSelect(sceneContext.Scene); }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("hollow.png", 16, 16, invertIcon), + Icon = (theme) => StaticData.Instance.LoadIcon("hollow.png", 16, 16).SetToColor(theme.TextColor), HelpTextResolver = () => "*At least 1 part must be selected*".Localize(), IsEnabled = (sceneContext) => IsMeshObject(sceneContext.Scene.SelectedItem), }; @@ -1139,7 +1140,7 @@ namespace MatterHackers.MatterControl new IntersectionObject3D_2().WrapSelectedItemAndSelect(sceneContext.Scene); } }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("intersect.png", 16, 16), + Icon = (theme) => StaticData.Instance.LoadIcon("intersect.png", 16, 16), HelpTextResolver = () => "*At least 2 parts must be selected*".Localize(), IsEnabled = (sceneContext) => BooleanCandidate(sceneContext.Scene.SelectedItem), }; @@ -1181,7 +1182,7 @@ namespace MatterHackers.MatterControl }, HelpTextResolver = () => "*At least 1 part must be selected*".Localize(), IsEnabled = (sceneContext) => sceneContext.Scene.SelectedItem != null, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("lay_flat.png", 16, 16, invertIcon).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("lay_flat.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), }; } @@ -1200,7 +1201,7 @@ namespace MatterHackers.MatterControl }; array.AddSelectionAsChildren(sceneContext.Scene, sceneContext.Scene.SelectedItem); }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("array_linear.png", 16, 16).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("array_linear.png", 16, 16).SetPreMultiply(), HelpTextResolver = () => "*A single part must be selected*".Localize(), IsEnabled = (sceneContext) => sceneContext.Scene.SelectedItem != null && !(sceneContext.Scene.SelectedItem is SelectionGroupObject3D), }; @@ -1218,7 +1219,7 @@ namespace MatterHackers.MatterControl var pinch = new PinchObject3D_3(); pinch.WrapSelectedItemAndSelect(sceneContext.Scene); }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("pinch.png", 16, 16, invertIcon), + Icon = (theme) => StaticData.Instance.LoadIcon("pinch.png", 16, 16).SetToColor(theme.TextColor), HelpTextResolver = () => "*At least 1 part must be selected*".Localize(), IsEnabled = (sceneContext) => IsMeshObject(sceneContext.Scene.SelectedItem), }; @@ -1236,7 +1237,7 @@ namespace MatterHackers.MatterControl var cut = new PlaneCutObject3D(); cut.WrapSelectedItemAndSelect(sceneContext.Scene); }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("plane_cut.png", 16, 16, invertIcon), + Icon = (theme) => StaticData.Instance.LoadIcon("plane_cut.png", 16, 16).SetToColor(theme.TextColor), HelpTextResolver = () => "*At least 1 part must be selected*".Localize(), IsEnabled = (sceneContext) => IsMeshObject(sceneContext.Scene.SelectedItem), }; @@ -1257,7 +1258,7 @@ namespace MatterHackers.MatterControl }; array.AddSelectionAsChildren(sceneContext.Scene, sceneContext.Scene.SelectedItem); }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("array_radial.png", 16, 16).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("array_radial.png", 16, 16).SetPreMultiply(), HelpTextResolver = () => "*A single part must be selected*".Localize(), IsEnabled = (sceneContext) => sceneContext.Scene.SelectedItem != null && !(sceneContext.Scene.SelectedItem is SelectionGroupObject3D), }; @@ -1275,7 +1276,7 @@ namespace MatterHackers.MatterControl var hollowOut = new DecimateObject3D(); hollowOut.WrapSelectedItemAndSelect(sceneContext.Scene); }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("reduce.png", 16, 16, invertIcon), + Icon = (theme) => StaticData.Instance.LoadIcon("reduce.png", 16, 16).SetToColor(theme.TextColor), HelpTextResolver = () => "*At least 1 part must be selected*".Localize(), IsEnabled = (sceneContext) => IsMeshObject(sceneContext.Scene.SelectedItem), }; @@ -1309,7 +1310,7 @@ namespace MatterHackers.MatterControl { Action = (sceneContext) => sceneContext.Scene.DeleteSelection(), HelpTextResolver = () => "*At least 1 part must be selected*".Localize(), - Icon = (invertIcon) => StaticData.Instance.LoadIcon("remove.png", 16, 16, !invertIcon).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("remove.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), IsEnabled = (sceneContext) => IsMeshObject(sceneContext.Scene.SelectedItem), ShowInModifyMenu = (sceneContext) => false, TitleResolver = () => "Remove".Localize(), @@ -1328,7 +1329,7 @@ namespace MatterHackers.MatterControl var hollowOut = new RepairObject3D(); hollowOut.WrapSelectedItemAndSelect(sceneContext.Scene); }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("repair.png", 16, 16, invertIcon), + Icon = (theme) => StaticData.Instance.LoadIcon("repair.png", 16, 16).SetToColor(theme.TextColor), HelpTextResolver = () => "*At least 1 part must be selected*".Localize(), IsEnabled = (sceneContext) => IsMeshObject(sceneContext.Scene.SelectedItem), }; @@ -1342,7 +1343,7 @@ namespace MatterHackers.MatterControl ResultType = typeof(SubtractAndReplaceObject3D_2), TitleResolver = () => "Subtract & Replace".Localize(), Action = (sceneContext) => new SubtractAndReplaceObject3D_2().WrapSelectedItemAndSelect(sceneContext.Scene), - Icon = (invertIcon) => StaticData.Instance.LoadIcon("subtract_and_replace.png", 16, 16).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("subtract_and_replace.png", 16, 16).SetPreMultiply(), HelpTextResolver = () => "*At least 2 parts must be selected*".Localize(), IsEnabled = (sceneContext) => BooleanCandidate(sceneContext.Scene.SelectedItem, false), }; @@ -1366,7 +1367,7 @@ namespace MatterHackers.MatterControl new SubtractObject3D_2().WrapSelectedItemAndSelect(sceneContext.Scene); } }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("subtract.png", 16, 16).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("subtract.png", 16, 16).SetPreMultiply(), HelpTextResolver = () => "*At least 2 parts must be selected*".Localize(), IsEnabled = (sceneContext) => BooleanCandidate(sceneContext.Scene.SelectedItem), }; @@ -1396,7 +1397,7 @@ namespace MatterHackers.MatterControl scene.UndoBuffer.AddAndDo(new SetOutputType(selectedItem, allAreSupport ? PrintOutputTypes.Default : PrintOutputTypes.Support)); } }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("support.png", 16, 16, invertIcon).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("support.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), HelpTextResolver = () => "*At least 1 part must be selected*".Localize(), IsEnabled = (sceneContext) => IsMeshObject(sceneContext.Scene.SelectedItem), }; @@ -1427,7 +1428,7 @@ namespace MatterHackers.MatterControl scene.UndoBuffer.AddAndDo(new SetOutputType(selectedItem, allAreWipeTower ? PrintOutputTypes.Default : PrintOutputTypes.WipeTower)); } }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("wipe_tower.png", 16, 16, invertIcon).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("wipe_tower.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), HelpTextResolver = () => "*At least 1 part must be selected*".Localize(), IsEnabled = (sceneContext) => IsMeshObject(sceneContext.Scene.SelectedItem), }; @@ -1445,7 +1446,7 @@ namespace MatterHackers.MatterControl var twist = new TwistObject3D(); twist.WrapSelectedItemAndSelect(sceneContext.Scene); }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("twist.png", 16, 16, invertIcon), + Icon = (theme) => StaticData.Instance.LoadIcon("twist.png", 16, 16).SetToColor(theme.TextColor), HelpTextResolver = () => "*At least 1 part must be selected*".Localize(), IsEnabled = (sceneContext) => IsMeshObject(sceneContext.Scene.SelectedItem), }; @@ -1470,7 +1471,7 @@ namespace MatterHackers.MatterControl return false; }, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("ungroup.png", 16, 16, !invertIcon).SetPreMultiply(), + Icon = (theme) => StaticData.Instance.LoadIcon("ungroup.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), }; } } diff --git a/MatterControlLib/CustomWidgets/SceneOperation.cs b/MatterControlLib/CustomWidgets/SceneOperation.cs index 9c219a16d..bcf4eabe3 100644 --- a/MatterControlLib/CustomWidgets/SceneOperation.cs +++ b/MatterControlLib/CustomWidgets/SceneOperation.cs @@ -53,7 +53,7 @@ namespace MatterHackers.Agg.UI /// public Type ResultType { get; set; } - public Func Icon { get; set; } + public Func Icon { get; set; } public Func IsEnabled { get; set; } = (sceneContext) => true; diff --git a/MatterControlLib/DesignTools/EditorTools/LithophanePlugin.cs b/MatterControlLib/DesignTools/EditorTools/LithophanePlugin.cs index 27c99addb..266e966ad 100644 --- a/MatterControlLib/DesignTools/EditorTools/LithophanePlugin.cs +++ b/MatterControlLib/DesignTools/EditorTools/LithophanePlugin.cs @@ -32,6 +32,7 @@ using MatterHackers.Agg; using MatterHackers.Agg.Platform; using MatterHackers.Agg.UI; using MatterHackers.DataConverters3D; +using MatterHackers.ImageProcessing; using MatterHackers.Localizations; using MatterHackers.MatterControl.DesignTools; using MatterHackers.MatterControl.Extensibility; @@ -88,7 +89,7 @@ namespace MatterHackers.MatterControl.Plugins.Lithophane IsEnabled = (sceneContext) => sceneContext?.Scene?.SelectedItem is ImageObject3D, HelpTextResolver = () => "*An image must be selected*".Localize(), ShowInModifyMenu = (sceneContext) => sceneContext?.Scene?.SelectedItem is ImageObject3D, - Icon = (invertIcon) => StaticData.Instance.LoadIcon("lithophane.png", 16, 16, invertIcon) + Icon = (theme) => StaticData.Instance.LoadIcon("lithophane.png", 16, 16).SetToColor(theme.TextColor) }, "Image"); } diff --git a/MatterControlLib/Library/Widgets/HardwareTreeView.cs b/MatterControlLib/Library/Widgets/HardwareTreeView.cs index d2607b7ae..49a3bf94b 100644 --- a/MatterControlLib/Library/Widgets/HardwareTreeView.cs +++ b/MatterControlLib/Library/Widgets/HardwareTreeView.cs @@ -34,6 +34,7 @@ using System.Linq; using MatterHackers.Agg; using MatterHackers.Agg.Platform; using MatterHackers.Agg.UI; +using MatterHackers.ImageProcessing; using MatterHackers.Localizations; using MatterHackers.MatterControl.CustomWidgets; using MatterHackers.MatterControl.PrinterControls.PrinterConnections; @@ -64,7 +65,7 @@ namespace MatterHackers.MatterControl.PrintLibrary Text = "Printers".Localize(), HAnchor = HAnchor.Stretch, AlwaysExpandable = true, - Image = StaticData.Instance.LoadIcon("printer.png", 16, 16, theme.InvertIcons) + Image = StaticData.Instance.LoadIcon("printer.png", 16, 16).SetToColor(theme.TextColor) }; printersNode.TreeView = this; @@ -74,7 +75,7 @@ namespace MatterHackers.MatterControl.PrintLibrary mainRow.AddChild(new HorizontalSpacer()); // add in the create printer button - var createPrinter = new IconButton(StaticData.Instance.LoadIcon("md-add-circle_18.png", 18, 18, theme.InvertIcons), theme) + var createPrinter = new IconButton(StaticData.Instance.LoadIcon("md-add-circle_18.png", 18, 18).SetToColor(theme.TextColor), theme) { Name = "Create Printer", VAnchor = VAnchor.Center, @@ -90,7 +91,7 @@ namespace MatterHackers.MatterControl.PrintLibrary mainRow.AddChild(createPrinter); // add in the import printer button - var importPrinter = new IconButton(StaticData.Instance.LoadIcon("md-import_18.png", 18, 18, theme.InvertIcons), theme) + var importPrinter = new IconButton(StaticData.Instance.LoadIcon("md-import_18.png", 18, 18).SetToColor(theme.TextColor), theme) { VAnchor = VAnchor.Center, Margin = theme.ButtonSpacing, @@ -115,7 +116,7 @@ namespace MatterHackers.MatterControl.PrintLibrary { Text = "Materials".Localize(), AlwaysExpandable = true, - Image = StaticData.Instance.LoadIcon("filament.png", 16, 16, theme.InvertIcons) + Image = StaticData.Instance.LoadIcon("filament.png", 16, 16).SetToColor(theme.TextColor) }; materialsNode.TreeView = this; diff --git a/MatterControlLib/Library/Widgets/LibraryWidget.cs b/MatterControlLib/Library/Widgets/LibraryWidget.cs index 2d8b5c355..8644eae58 100644 --- a/MatterControlLib/Library/Widgets/LibraryWidget.cs +++ b/MatterControlLib/Library/Widgets/LibraryWidget.cs @@ -38,6 +38,7 @@ using System.Threading.Tasks; using MatterHackers.Agg; using MatterHackers.Agg.Platform; using MatterHackers.Agg.UI; +using MatterHackers.ImageProcessing; using MatterHackers.Localizations; using MatterHackers.MatterControl.CustomWidgets; using MatterHackers.MatterControl.Library; @@ -646,7 +647,7 @@ namespace MatterHackers.MatterControl.PrintLibrary menuActions.Add(new LibraryAction(ActionScope.ListView) { Title = "Enter Share Code".Localize() + "...", - Icon = StaticData.Instance.LoadIcon("enter-code.png", 16, 16, theme.InvertIcons), + Icon = StaticData.Instance.LoadIcon("enter-code.png", 16, 16).SetToColor(theme.TextColor), Action = (selectedLibraryItems, listView) => { UiThread.RunOnIdle(() => diff --git a/MatterControlLib/PartPreviewWindow/Object3DTreeBuilder.cs b/MatterControlLib/PartPreviewWindow/Object3DTreeBuilder.cs index bfefa6aaa..e0ca99ae8 100644 --- a/MatterControlLib/PartPreviewWindow/Object3DTreeBuilder.cs +++ b/MatterControlLib/PartPreviewWindow/Object3DTreeBuilder.cs @@ -104,7 +104,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow keyValues.Add(item.Source, node); // Check for operation resulting in the given type - var image = SceneOperations.GetIcon(item.Source.GetType(), theme.InvertIcons); + var image = SceneOperations.GetIcon(item.Source.GetType(), theme); if (image != null) { diff --git a/MatterControlLib/PartPreviewWindow/OperationIconButton.cs b/MatterControlLib/PartPreviewWindow/OperationIconButton.cs index 1c8c19fac..52e6dd193 100644 --- a/MatterControlLib/PartPreviewWindow/OperationIconButton.cs +++ b/MatterControlLib/PartPreviewWindow/OperationIconButton.cs @@ -38,7 +38,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow private ISceneContext sceneContext; public OperationIconButton(SceneOperation sceneOperation, ISceneContext sceneContext, ThemeConfig theme) - : base(sceneOperation.Icon(theme.InvertIcons), theme) + : base(sceneOperation.Icon(theme), theme) { this.sceneOperation = sceneOperation; this.sceneContext = sceneContext; diff --git a/MatterControlLib/PartPreviewWindow/SelectedObjectPanel.cs b/MatterControlLib/PartPreviewWindow/SelectedObjectPanel.cs index 2975e3d49..4dd45fc98 100644 --- a/MatterControlLib/PartPreviewWindow/SelectedObjectPanel.cs +++ b/MatterControlLib/PartPreviewWindow/SelectedObjectPanel.cs @@ -35,6 +35,7 @@ using MatterHackers.Agg; using MatterHackers.Agg.Platform; using MatterHackers.Agg.UI; using MatterHackers.DataConverters3D; +using MatterHackers.ImageProcessing; using MatterHackers.Localizations; using MatterHackers.MatterControl.CustomWidgets; using MatterHackers.MatterControl.DesignTools; @@ -86,7 +87,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow toolbar.AddChild(primaryActionsPanel); // put in a make permanent button - var icon = StaticData.Instance.LoadIcon("apply.png", 16, 16, theme.InvertIcons).SetPreMultiply(); + var icon = StaticData.Instance.LoadIcon("apply.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply(); flattenButton = new IconButton(icon, theme) { Margin = theme.ButtonSpacing, @@ -112,7 +113,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow toolbar.AddChild(flattenButton); // put in a remove button - removeButton = new IconButton(StaticData.Instance.LoadIcon("cancel.png", 16, 16, theme.InvertIcons), theme) + removeButton = new IconButton(StaticData.Instance.LoadIcon("cancel.png", 16, 16).SetToColor(theme.TextColor).SetPreMultiply(), theme) { Margin = theme.ButtonSpacing, ToolTipText = "Cancel".Localize(), @@ -210,7 +211,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow foreach (var primaryAction in primaryActions) { // TODO: Run visible/enable rules on actions, conditionally add/enable as appropriate - var button = new IconButton(primaryAction.Icon(theme.InvertIcons), theme) + var button = new IconButton(primaryAction.Icon(theme), theme) { // Name = namedAction.Title + " Button", ToolTipText = primaryAction.Title, diff --git a/MatterControlLib/PartPreviewWindow/View3D/GridOptionsPanel.cs b/MatterControlLib/PartPreviewWindow/View3D/GridOptionsPanel.cs index 44c16e757..e36c450b5 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/GridOptionsPanel.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/GridOptionsPanel.cs @@ -30,6 +30,7 @@ using System.Collections.Generic; using MatterHackers.Agg; using MatterHackers.Agg.Platform; using MatterHackers.Agg.UI; +using MatterHackers.ImageProcessing; using MatterHackers.Localizations; using MatterHackers.MatterControl.CustomWidgets; @@ -45,7 +46,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow this.object3DControlLayer = object3DControlLayer; this.PopupContent = () => ShowGridOptions(theme); - this.AddChild(new TextIconButton("Snap", StaticData.Instance.LoadIcon("snap_grid.png", 16, 16, theme.InvertIcons), theme) + this.AddChild(new TextIconButton("Snap", StaticData.Instance.LoadIcon("snap_grid.png", 16, 16).SetToColor(theme.TextColor), theme) { Selectable = false }); diff --git a/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/PrinterActionsBar.cs b/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/PrinterActionsBar.cs index 4c746790a..14929247e 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/PrinterActionsBar.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/PrinterActionsBar.cs @@ -34,6 +34,7 @@ using System.IO; using MatterHackers.Agg; using MatterHackers.Agg.Platform; using MatterHackers.Agg.UI; +using MatterHackers.ImageProcessing; using MatterHackers.Localizations; using MatterHackers.MatterControl.ActionBar; using MatterHackers.MatterControl.CustomWidgets; @@ -153,7 +154,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow var buttonGroupB = new ObservableCollection(); var iconPath = Path.Combine("ViewTransformControls", "model.png"); - modelViewButton = new RadioIconButton(StaticData.Instance.LoadIcon(iconPath, 16, 16, theme.InvertIcons), theme) + modelViewButton = new RadioIconButton(StaticData.Instance.LoadIcon(iconPath, 16, 16).SetToColor(theme.TextColor), theme) { SiblingRadioButtonList = buttonGroupB, Name = "Model View Button", @@ -169,7 +170,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow viewModes.Add(PartViewMode.Model, modelViewButton); iconPath = Path.Combine("ViewTransformControls", "gcode_3d.png"); - layers3DButton = new RadioIconButton(StaticData.Instance.LoadIcon(iconPath, 16, 16, theme.InvertIcons), theme) + layers3DButton = new RadioIconButton(StaticData.Instance.LoadIcon(iconPath, 16, 16).SetToColor(theme.TextColor), theme) { SiblingRadioButtonList = buttonGroupB, Name = "Layers3D Button", @@ -189,7 +190,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } iconPath = Path.Combine("ViewTransformControls", "gcode_2d.png"); - layers2DButton = new RadioIconButton(StaticData.Instance.LoadIcon(iconPath, 16, 16, theme.InvertIcons), theme) + layers2DButton = new RadioIconButton(StaticData.Instance.LoadIcon(iconPath, 16, 16).SetToColor(theme.TextColor), theme) { SiblingRadioButtonList = buttonGroupB, Name = "Layers2D Button", diff --git a/MatterControlLib/PartPreviewWindow/View3D/View3DWidget.cs b/MatterControlLib/PartPreviewWindow/View3D/View3DWidget.cs index 2ea2808b4..f28850cc7 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/View3DWidget.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/View3DWidget.cs @@ -43,6 +43,7 @@ using MatterHackers.Agg.Platform; using MatterHackers.Agg.UI; using MatterHackers.Agg.VertexSource; using MatterHackers.DataConverters3D; +using MatterHackers.ImageProcessing; using MatterHackers.Localizations; using MatterHackers.MatterControl.CustomWidgets; using MatterHackers.MatterControl.DesignTools; @@ -340,7 +341,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow // add the view controls var buttonGroupA = new ObservableCollection(); - partSelectButton = new RadioIconButton(StaticData.Instance.LoadIcon(Path.Combine("ViewTransformControls", "partSelect.png"), 16, 16, theme.InvertIcons), theme) + partSelectButton = new RadioIconButton(StaticData.Instance.LoadIcon(Path.Combine("ViewTransformControls", "partSelect.png"), 16, 16).SetToColor(theme.TextColor), theme) { SiblingRadioButtonList = buttonGroupA, ToolTipText = "Select Parts".Localize(), @@ -351,7 +352,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow partSelectButton.Click += (s, e) => viewControls3D.ActiveButton = ViewControls3DButtons.PartSelect; buttonGroupA.Add(partSelectButton); - rotateButton = new RadioIconButton(StaticData.Instance.LoadIcon(Path.Combine("ViewTransformControls", "rotate.png"), 16, 16, theme.InvertIcons), theme) + rotateButton = new RadioIconButton(StaticData.Instance.LoadIcon(Path.Combine("ViewTransformControls", "rotate.png"), 16, 16).SetToColor(theme.TextColor), theme) { SiblingRadioButtonList = buttonGroupA, // ToolTipText = "Rotate\n- Right Mouse Button\n- Ctrl + Left Mouse Button".Localize(), @@ -362,7 +363,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow rotateButton.Click += (s, e) => viewControls3D.ActiveButton = ViewControls3DButtons.Rotate; buttonGroupA.Add(rotateButton); - translateButton = new RadioIconButton(StaticData.Instance.LoadIcon(Path.Combine("ViewTransformControls", "translate.png"), 16, 16, theme.InvertIcons), theme) + translateButton = new RadioIconButton(StaticData.Instance.LoadIcon(Path.Combine("ViewTransformControls", "translate.png"), 16, 16).SetToColor(theme.TextColor), theme) { SiblingRadioButtonList = buttonGroupA, // ToolTipText = "Move\n- Middle Mouse Button\n- Ctrl + Shift + Left Mouse Button".Localize(), @@ -373,7 +374,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow translateButton.Click += (s, e) => viewControls3D.ActiveButton = ViewControls3DButtons.Translate; buttonGroupA.Add(translateButton); - scaleButton = new RadioIconButton(StaticData.Instance.LoadIcon(Path.Combine("ViewTransformControls", "scale.png"), 16, 16, theme.InvertIcons), theme) + scaleButton = new RadioIconButton(StaticData.Instance.LoadIcon(Path.Combine("ViewTransformControls", "scale.png"), 16, 16).SetToColor(theme.TextColor), theme) { SiblingRadioButtonList = buttonGroupA, // ToolTipText = "Zoom\n- Mouse Wheel\n- Ctrl + Alt + Left Mouse Button".Localize(), @@ -412,21 +413,40 @@ namespace MatterHackers.MatterControl.PartPreviewWindow }; // add the home button - var homeButton = new IconButton(StaticData.Instance.LoadIcon("fa-home_16.png", 16, 16, theme.InvertIcons), theme) + var homeButton = new IconButton(StaticData.Instance.LoadIcon("fa-home_16.png", 16, 16).SetToColor(theme.TextColor), theme) { ToolTipText = "Reset View".Localize(), Margin = theme.ButtonSpacing }; AddRoundButton(homeButton, RotatedMargin(homeButton, MathHelper.Tau * .3)).Click += (s, e) => viewControls3D.NotifyResetView(); - var zoomToSelectionButton = new IconButton(StaticData.Instance.LoadIcon("select.png", 16, 16, theme.InvertIcons), theme) + var zoomToSelectionButton = new IconButton(StaticData.Instance.LoadIcon("select.png", 16, 16).SetToColor(theme.TextColor), theme) { ToolTipText = "Zoom to Selection".Localize(), Margin = theme.ButtonSpacing }; - AddRoundButton(zoomToSelectionButton, RotatedMargin(zoomToSelectionButton, MathHelper.Tau * .4)).Click += (s, e) => viewControls3D.NotifyResetView(); + void SetZoomEnabled(object s, EventArgs e) + { + zoomToSelectionButton.Enabled = this.Scene.SelectedItem != null; + } - var turnTableButton = new RadioIconButton(StaticData.Instance.LoadIcon("spin.png", 16, 16, theme.InvertIcons), theme) + this.Scene.SelectionChanged += SetZoomEnabled; + this.Closed += (s, e) => this.Scene.SelectionChanged -= SetZoomEnabled; + + AddRoundButton(zoomToSelectionButton, RotatedMargin(zoomToSelectionButton, MathHelper.Tau * .4)).Click += (s, e) => + { + var selectedItem = this.Scene.SelectedItem; + if (selectedItem != null) + { + var aabb = selectedItem.GetAxisAlignedBoundingBox(); + var center = aabb.Center; + // pan to the center + // zoom to fill the view + viewControls3D.NotifyResetView(); + } + }; + + var turnTableButton = new RadioIconButton(StaticData.Instance.LoadIcon("spin.png", 16, 16).SetToColor(theme.TextColor), theme) { ToolTipText = "Turntable Mode".Localize(), Margin = theme.ButtonSpacing, @@ -438,7 +458,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow // toggle the turn table mode }; - var projectionButton = new RadioIconButton(StaticData.Instance.LoadIcon("perspective.png", 16, 16, theme.InvertIcons), theme) + var projectionButton = new RadioIconButton(StaticData.Instance.LoadIcon("perspective.png", 16, 16).SetToColor(theme.TextColor), theme) { ToolTipText = "Perspective Mode".Localize(), Margin = theme.ButtonSpacing, diff --git a/MatterControlLib/PartPreviewWindow/ViewControls3D.cs b/MatterControlLib/PartPreviewWindow/ViewControls3D.cs index 423c7242c..304464358 100644 --- a/MatterControlLib/PartPreviewWindow/ViewControls3D.cs +++ b/MatterControlLib/PartPreviewWindow/ViewControls3D.cs @@ -235,7 +235,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow groupButton = theme.CreateSplitButton( new SplitButtonParams() { - Icon = defaultOperation.Icon(theme.InvertIcons), + Icon = defaultOperation.Icon(theme), ButtonAction = (menuButton) => { defaultOperation.Action.Invoke(sceneContext); @@ -246,7 +246,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow { foreach (var operation in operationGroup.Operations) { - var operationMenu = popupMenu.CreateMenuItem(operation.Title, operation.Icon?.Invoke(theme.InvertIcons)); + var operationMenu = popupMenu.CreateMenuItem(operation.Title, operation.Icon?.Invoke(theme)); operationMenu.Enabled = operation.IsEnabled(sceneContext); operationMenu.ToolTipText = operation.Title; @@ -263,7 +263,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow { // Update button var iconButton = groupButton.Children.OfType().First(); - iconButton.SetIcon(operation.Icon(theme.InvertIcons)); + iconButton.SetIcon(operation.Icon(theme)); iconButton.ToolTipText = operation.HelpText ?? operation.Title; UserSettings.Instance.set(operationGroup.GroupRecordId, operationGroup.Operations.IndexOf(operation).ToString()); @@ -302,7 +302,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } else if (namedAction.Icon != null) { - button = new IconButton(namedAction.Icon(theme.InvertIcons), theme) + button = new IconButton(namedAction.Icon(theme), theme) { Name = namedAction.Title + " Button", ToolTipText = namedAction.Title, diff --git a/Submodules/agg-sharp b/Submodules/agg-sharp index 092733abf..6633bc2a9 160000 --- a/Submodules/agg-sharp +++ b/Submodules/agg-sharp @@ -1 +1 @@ -Subproject commit 092733abf41333c6b7a85f5fda5c23b5256f2345 +Subproject commit 6633bc2a9efc7971009cf6c72a6a2e6fa4274b43