Improving color picker
Working to make materials have a color picker as well
This commit is contained in:
parent
9c2c5e29f6
commit
515ea27e4f
5 changed files with 55 additions and 23 deletions
|
|
@ -234,6 +234,11 @@ namespace MatterHackers.MatterControl
|
|||
return popupMenu;
|
||||
}
|
||||
|
||||
public void GetEyeDropperColor(Action<Color> setColor)
|
||||
{
|
||||
setColor?.Invoke(Color.Cyan);
|
||||
}
|
||||
|
||||
public PopupMenu GetModifyMenu(ISceneContext sceneContext)
|
||||
{
|
||||
var popupMenu = new PopupMenu(this.MenuTheme);
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ namespace MatterHackers.MatterControl.CustomWidgets.ColorPicker
|
|||
&& keyEvent.KeyCode == Keys.Escape)
|
||||
{
|
||||
downState = DownState.None;
|
||||
SetColorWithoutChangeEvent(downColor);
|
||||
SelectedColor = downColor;
|
||||
}
|
||||
|
||||
base.OnKeyDown(keyEvent);
|
||||
|
|
|
|||
|
|
@ -41,18 +41,13 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
{
|
||||
public class GenerateSupportPanel : FlowLayoutWidget
|
||||
{
|
||||
private SupportGenerator supportGenerator;
|
||||
private InteractiveScene scene;
|
||||
private ThemeConfig theme;
|
||||
private readonly SupportGenerator supportGenerator;
|
||||
|
||||
public GenerateSupportPanel(ThemeConfig theme, InteractiveScene scene, double minimumSupportHeight)
|
||||
: base(FlowDirection.TopToBottom)
|
||||
{
|
||||
supportGenerator = new SupportGenerator(scene, minimumSupportHeight);
|
||||
|
||||
this.scene = scene;
|
||||
this.theme = theme;
|
||||
|
||||
this.VAnchor = VAnchor.Fit;
|
||||
this.HAnchor = HAnchor.Absolute;
|
||||
this.Width = 300 * GuiWidget.DeviceScale;
|
||||
|
|
|
|||
|
|
@ -43,13 +43,17 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
public class ItemColorButton : PopupButton
|
||||
{
|
||||
private ColorButton colorButton;
|
||||
private GuiWidget popupContent;
|
||||
|
||||
public event EventHandler ColorChanged;
|
||||
|
||||
public bool IsOpen => popupContent?.ContainsFocus == true;
|
||||
|
||||
public ItemColorButton(ThemeConfig theme, Color selectedColor)
|
||||
{
|
||||
this.ToolTipText = "Color".Localize();
|
||||
var scaledButtonSize = 14 * GuiWidget.DeviceScale;
|
||||
this.PopupBorderColor = theme.PopupBorderColor;
|
||||
|
||||
Width = 30 * GuiWidget.DeviceScale;
|
||||
Height = 30 * GuiWidget.DeviceScale;
|
||||
|
|
@ -64,7 +68,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
this.DynamicPopupContent = () =>
|
||||
{
|
||||
#if true
|
||||
return NewColorSelector(theme, selectedColor, menuTheme);
|
||||
popupContent = NewColorSelector(theme, selectedColor, menuTheme, (color) => colorButton.BackgroundColor = color);
|
||||
#else
|
||||
return new ColorSwatchSelector(menuTheme,
|
||||
buttonSize: 16,
|
||||
|
|
@ -77,6 +81,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
VAnchor = VAnchor.Fit
|
||||
};
|
||||
#endif
|
||||
return popupContent;
|
||||
};
|
||||
|
||||
colorButton = new ColorButton(selectedColor == Color.Transparent ? theme.SlightShade : selectedColor)
|
||||
|
|
@ -99,7 +104,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
this.AddChild(colorButton);
|
||||
}
|
||||
|
||||
private GuiWidget NewColorSelector(ThemeConfig theme, Color selectedColor, ThemeConfig menuTheme)
|
||||
public static GuiWidget NewColorSelector(ThemeConfig theme, Color selectedColor, ThemeConfig menuTheme, Action<Color> update)
|
||||
{
|
||||
var content = new FlowLayoutWidget(FlowDirection.LeftToRight)
|
||||
{
|
||||
|
|
@ -115,7 +120,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
HAnchor = HAnchor.Stretch,
|
||||
VAnchor = VAnchor.Stretch,
|
||||
}) as RadialColorPicker;
|
||||
picker.SelectedColorChanged += (s, newColor) => colorButton.BackgroundColor = picker.SelectedColor;
|
||||
picker.SelectedColorChanged += (s, newColor) => update?.Invoke(picker.SelectedColor);
|
||||
|
||||
var rightContent = content.AddChild(new FlowLayoutWidget(FlowDirection.TopToBottom)
|
||||
{
|
||||
|
|
@ -123,7 +128,21 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
VAnchor = VAnchor.Stretch,
|
||||
});
|
||||
|
||||
var colorSwatch = rightContent.AddChild(new GuiWidget(10, 10)
|
||||
var colorContent = rightContent.AddChild(new FlowLayoutWidget()
|
||||
{
|
||||
Padding = new BorderDouble(5),
|
||||
HAnchor = HAnchor.Stretch,
|
||||
VAnchor = VAnchor.Stretch,
|
||||
});
|
||||
|
||||
var startColorSwatch = colorContent.AddChild(new GuiWidget(10, 10)
|
||||
{
|
||||
HAnchor = HAnchor.Stretch,
|
||||
VAnchor = VAnchor.Stretch,
|
||||
BackgroundColor = picker.SelectedColor
|
||||
});
|
||||
|
||||
var colorSwatch = colorContent.AddChild(new GuiWidget(10, 10)
|
||||
{
|
||||
HAnchor = HAnchor.Stretch,
|
||||
VAnchor = VAnchor.Stretch,
|
||||
|
|
@ -131,17 +150,19 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
});
|
||||
|
||||
picker.IncrementalColorChanged += (s, newColor) => colorSwatch.BackgroundColor = picker.SelectedColor;
|
||||
picker.SelectedColorChanged += (s, newColor) => colorSwatch.BackgroundColor = picker.SelectedColor;
|
||||
|
||||
var resetButton = rightContent.AddChild(new TextIconButton("Clear".Localize(), StaticData.Instance.LoadIcon("transparent_grid.png", 16, 16), theme)
|
||||
{
|
||||
Margin = 0,
|
||||
Margin = new BorderDouble(0, 0, 0, 3),
|
||||
HAnchor = HAnchor.Fit,
|
||||
VAnchor = VAnchor.Absolute
|
||||
VAnchor = VAnchor.Absolute,
|
||||
ToolTipText = "Clear any assigned color. This may allow component colors to be visible.".Localize(),
|
||||
});
|
||||
resetButton.Click += (s, e) =>
|
||||
{
|
||||
// The colorChanged action displays the given color - use .MinimalHighlight rather than no color
|
||||
colorButton.BackgroundColor = Color.Transparent;
|
||||
update?.Invoke(Color.Transparent);
|
||||
picker.SetColorWithoutChangeEvent(Color.White);
|
||||
};
|
||||
|
||||
|
|
@ -154,6 +175,11 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
selectButton.Click += (s, e) =>
|
||||
{
|
||||
// change to an eye dropper mode in the design view to allow for color selection
|
||||
ApplicationController.Instance.GetEyeDropperColor((color) =>
|
||||
{
|
||||
update?.Invoke(color);
|
||||
picker.SelectedColor = color;
|
||||
});
|
||||
};
|
||||
|
||||
if (selectButton.Width < resetButton.Width)
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ either expressed or implied, of the FreeBSD Project.
|
|||
|
||||
using System;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using MatterHackers.Agg;
|
||||
using MatterHackers.Agg.UI;
|
||||
using MatterHackers.DataConverters3D;
|
||||
|
|
@ -68,14 +69,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
var scaledButtonSize = 16 * GuiWidget.DeviceScale;
|
||||
|
||||
buttonView.AddChild(new ColorButton(MaterialRendering.Color(extruderIndex, theme.BorderColor))
|
||||
{
|
||||
Width = scaledButtonSize,
|
||||
Height = scaledButtonSize,
|
||||
VAnchor = VAnchor.Center,
|
||||
Margin = new BorderDouble(3, 0, 5, 0),
|
||||
DrawGrid = true,
|
||||
});
|
||||
buttonView.AddChild(new ItemColorButton(theme, MaterialRendering.Color(extruderIndex, theme.BorderColor)));
|
||||
|
||||
buttonView.AddChild(new TextWidget(name, pointSize: theme.DefaultFontSize, textColor: theme.TextColor)
|
||||
{
|
||||
|
|
@ -96,6 +90,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
Checked = extruderIndex == initialMaterialIndex,
|
||||
Name = name + " Button"
|
||||
};
|
||||
radioButtonView.Selectable = true;
|
||||
materialButtons.Add(radioButton);
|
||||
this.AddChild(radioButton);
|
||||
|
||||
|
|
@ -112,6 +107,17 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
base.OnClosed(e);
|
||||
}
|
||||
|
||||
public bool KeepMenuOpen => false;
|
||||
public bool KeepMenuOpen
|
||||
{
|
||||
get
|
||||
{
|
||||
if (materialButtons.Where(b => b.DescendantsAndSelf() is ItemColorButton).Where(cb => ((ItemColorButton)cb).IsOpen).Any())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue