Browse Source

Added opacity.

pull/4/head
Steven Kirk 12 years ago
parent
commit
07866618b7
  1. 15
      Perspex.Direct2D1/Renderer.cs
  2. 2
      Perspex/IVisual.cs
  3. 5
      Perspex/Layout/Layoutable.cs
  4. 9
      Perspex/Visual.cs

15
Perspex.Direct2D1/Renderer.cs

@ -120,8 +120,16 @@ namespace Perspex.Direct2D1
/// <param name="context">The drawing context.</param>
private void Render(IVisual visual, DrawingContext context)
{
if (visual.IsVisible)
if (visual.IsVisible && visual.Opacity > 0)
{
if (visual.Opacity < 1)
{
Layer layer = new Layer(this.renderTarget);
LayerParameters p = new LayerParameters();
p.Opacity = (float)visual.Opacity;
this.renderTarget.PushLayer(ref p, layer);
}
visual.Render(context);
foreach (IVisual child in visual.VisualChildren)
@ -133,6 +141,11 @@ namespace Perspex.Direct2D1
this.Render(child, context);
}
}
if (visual.Opacity < 1)
{
this.renderTarget.PopLayer();
}
}
}
}

2
Perspex/IVisual.cs

@ -18,6 +18,8 @@ namespace Perspex
bool IsVisible { get; }
double Opacity { get; }
IEnumerable<IVisual> VisualChildren { get; }
IVisual VisualParent { get; set; }

5
Perspex/Layout/Layoutable.cs

@ -130,7 +130,10 @@ namespace Perspex.Layout
public void Arrange(Rect rect)
{
this.ArrangeCore(rect);
if (this.DesiredSize.HasValue)
{
this.ArrangeCore(rect);
}
}
public void InvalidateMeasure()

9
Perspex/Visual.cs

@ -19,6 +19,9 @@ namespace Perspex
public static readonly PerspexProperty<bool> IsVisibleProperty =
PerspexProperty.Register<Visual, bool>("IsVisible", true);
public static readonly PerspexProperty<double> OpacityProperty =
PerspexProperty.Register<Visual, double>("Opacity", 1);
private IVisual visualParent;
private Rect bounds;
@ -34,6 +37,12 @@ namespace Perspex
set { this.SetValue(IsVisibleProperty, value); }
}
public double Opacity
{
get { return this.GetValue(OpacityProperty); }
set { this.SetValue(OpacityProperty, value); }
}
Rect IVisual.Bounds
{
get { return this.bounds; }

Loading…
Cancel
Save