mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-01-01 18:23:32 +00:00
UI - Don't apply layer brush VMs too early
UI - Create layer geometry on ui thread
This commit is contained in:
parent
cdb91021a2
commit
eda57f6d32
@ -129,14 +129,14 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties
|
|||||||
);
|
);
|
||||||
LayerPropertyGroups.Add(new LayerPropertyGroupViewModel(ProfileEditorService, layer.General, (PropertyGroupDescriptionAttribute) generalAttribute));
|
LayerPropertyGroups.Add(new LayerPropertyGroupViewModel(ProfileEditorService, layer.General, (PropertyGroupDescriptionAttribute) generalAttribute));
|
||||||
LayerPropertyGroups.Add(new LayerPropertyGroupViewModel(ProfileEditorService, layer.Transform, (PropertyGroupDescriptionAttribute) transformAttribute));
|
LayerPropertyGroups.Add(new LayerPropertyGroupViewModel(ProfileEditorService, layer.Transform, (PropertyGroupDescriptionAttribute) transformAttribute));
|
||||||
|
|
||||||
ApplyLayerBrush();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
SelectedLayer = null;
|
SelectedLayer = null;
|
||||||
|
|
||||||
TreeViewModel = new TreeViewModel(this, LayerPropertyGroups);
|
TreeViewModel = new TreeViewModel(this, LayerPropertyGroups);
|
||||||
TimelineViewModel = new TimelineViewModel(this, LayerPropertyGroups);
|
TimelineViewModel = new TimelineViewModel(this, LayerPropertyGroups);
|
||||||
|
|
||||||
|
ApplyLayerBrush();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SelectedLayerOnLayerBrushUpdated(object sender, EventArgs e)
|
private void SelectedLayerOnLayerBrushUpdated(object sender, EventArgs e)
|
||||||
@ -146,6 +146,9 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties
|
|||||||
|
|
||||||
public void ApplyLayerBrush()
|
public void ApplyLayerBrush()
|
||||||
{
|
{
|
||||||
|
if (SelectedLayer == null)
|
||||||
|
return;
|
||||||
|
|
||||||
var hideRenderRelatedProperties = SelectedLayer.LayerBrush != null && SelectedLayer.LayerBrush.BrushType == LayerBrushType.RgbNet;
|
var hideRenderRelatedProperties = SelectedLayer.LayerBrush != null && SelectedLayer.LayerBrush.BrushType == LayerBrushType.RgbNet;
|
||||||
SelectedLayer.General.ShapeType.IsHidden = hideRenderRelatedProperties;
|
SelectedLayer.General.ShapeType.IsHidden = hideRenderRelatedProperties;
|
||||||
SelectedLayer.General.FillType.IsHidden = hideRenderRelatedProperties;
|
SelectedLayer.General.FillType.IsHidden = hideRenderRelatedProperties;
|
||||||
|
|||||||
@ -61,55 +61,57 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization
|
|||||||
|
|
||||||
private void CreateLayerGeometry()
|
private void CreateLayerGeometry()
|
||||||
{
|
{
|
||||||
if (!Layer.Leds.Any())
|
|
||||||
{
|
|
||||||
LayerGeometry = Geometry.Empty;
|
|
||||||
OpacityGeometry = Geometry.Empty;
|
|
||||||
ViewportRectangle = Rect.Empty;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var group = new GeometryGroup();
|
|
||||||
group.FillRule = FillRule.Nonzero;
|
|
||||||
|
|
||||||
foreach (var led in Layer.Leds)
|
|
||||||
{
|
|
||||||
Geometry geometry;
|
|
||||||
switch (led.RgbLed.Shape)
|
|
||||||
{
|
|
||||||
case Shape.Custom:
|
|
||||||
if (led.RgbLed.Device.DeviceInfo.DeviceType == RGBDeviceType.Keyboard || led.RgbLed.Device.DeviceInfo.DeviceType == RGBDeviceType.Keypad)
|
|
||||||
geometry = CreateCustomGeometry(led, 2);
|
|
||||||
else
|
|
||||||
geometry = CreateCustomGeometry(led, 1);
|
|
||||||
break;
|
|
||||||
case Shape.Rectangle:
|
|
||||||
geometry = CreateRectangleGeometry(led);
|
|
||||||
break;
|
|
||||||
case Shape.Circle:
|
|
||||||
geometry = CreateCircleGeometry(led);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new ArgumentOutOfRangeException();
|
|
||||||
}
|
|
||||||
|
|
||||||
group.Children.Add(geometry);
|
|
||||||
}
|
|
||||||
|
|
||||||
var layerGeometry = group.GetOutlinedPathGeometry();
|
|
||||||
var opacityGeometry = Geometry.Combine(Geometry.Empty, layerGeometry, GeometryCombineMode.Exclude, new TranslateTransform());
|
|
||||||
|
|
||||||
LayerGeometry = layerGeometry;
|
|
||||||
OpacityGeometry = opacityGeometry;
|
|
||||||
|
|
||||||
// Render the store as a bitmap
|
|
||||||
Execute.OnUIThread(() =>
|
Execute.OnUIThread(() =>
|
||||||
{
|
{
|
||||||
|
if (!Layer.Leds.Any())
|
||||||
|
{
|
||||||
|
LayerGeometry = Geometry.Empty;
|
||||||
|
OpacityGeometry = Geometry.Empty;
|
||||||
|
ViewportRectangle = Rect.Empty;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var group = new GeometryGroup();
|
||||||
|
group.FillRule = FillRule.Nonzero;
|
||||||
|
|
||||||
|
foreach (var led in Layer.Leds)
|
||||||
|
{
|
||||||
|
Geometry geometry;
|
||||||
|
switch (led.RgbLed.Shape)
|
||||||
|
{
|
||||||
|
case Shape.Custom:
|
||||||
|
if (led.RgbLed.Device.DeviceInfo.DeviceType == RGBDeviceType.Keyboard || led.RgbLed.Device.DeviceInfo.DeviceType == RGBDeviceType.Keypad)
|
||||||
|
geometry = CreateCustomGeometry(led, 2);
|
||||||
|
else
|
||||||
|
geometry = CreateCustomGeometry(led, 1);
|
||||||
|
break;
|
||||||
|
case Shape.Rectangle:
|
||||||
|
geometry = CreateRectangleGeometry(led);
|
||||||
|
break;
|
||||||
|
case Shape.Circle:
|
||||||
|
geometry = CreateCircleGeometry(led);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new ArgumentOutOfRangeException();
|
||||||
|
}
|
||||||
|
|
||||||
|
group.Children.Add(geometry);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var layerGeometry = group.GetOutlinedPathGeometry();
|
||||||
|
var opacityGeometry = Geometry.Combine(Geometry.Empty, layerGeometry, GeometryCombineMode.Exclude, new TranslateTransform());
|
||||||
|
|
||||||
|
LayerGeometry = layerGeometry;
|
||||||
|
OpacityGeometry = opacityGeometry;
|
||||||
|
|
||||||
|
// Render the store as a bitmap
|
||||||
|
|
||||||
var drawingImage = new DrawingImage(new GeometryDrawing(new SolidColorBrush(Colors.Black), null, LayerGeometry));
|
var drawingImage = new DrawingImage(new GeometryDrawing(new SolidColorBrush(Colors.Black), null, LayerGeometry));
|
||||||
var image = new Image { Source = drawingImage };
|
var image = new Image {Source = drawingImage};
|
||||||
var bitmap = new RenderTargetBitmap(
|
var bitmap = new RenderTargetBitmap(
|
||||||
(int)(LayerGeometry.Bounds.Width * 2.5),
|
(int) (LayerGeometry.Bounds.Width * 2.5),
|
||||||
(int)(LayerGeometry.Bounds.Height * 2.5),
|
(int) (LayerGeometry.Bounds.Height * 2.5),
|
||||||
96,
|
96,
|
||||||
96,
|
96,
|
||||||
PixelFormats.Pbgra32
|
PixelFormats.Pbgra32
|
||||||
@ -119,7 +121,6 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization
|
|||||||
bitmap.Freeze();
|
bitmap.Freeze();
|
||||||
LayerGeometryBitmap = bitmap;
|
LayerGeometryBitmap = bitmap;
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CreateShapeGeometry()
|
private void CreateShapeGeometry()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user