first commit
This commit is contained in:
100
trunk/src/Icarus/LUCIE/HighlightGrid.cs
Normal file
100
trunk/src/Icarus/LUCIE/HighlightGrid.cs
Normal file
@@ -0,0 +1,100 @@
|
||||
// $Author: asskoala $
|
||||
// $Date: 2005/12/11 21:07:21 $
|
||||
// $Revision: 1.1 $
|
||||
|
||||
using System;
|
||||
using System.Drawing;
|
||||
|
||||
using Icarus.Graphics.Animation;
|
||||
|
||||
namespace Icarus.LUCIE
|
||||
{
|
||||
/// <summary>
|
||||
/// This is just like a component grid, except it also can highlight an item with a special image.
|
||||
/// </summary>
|
||||
public class HighlightGrid : ComponentGrid
|
||||
{
|
||||
/// <summary>
|
||||
/// The animation used to highlight the selected component.
|
||||
/// </summary>
|
||||
private FramesetAnimation mHighlightAnimation;
|
||||
|
||||
/// <summary>
|
||||
/// Which component is highlighted.
|
||||
/// </summary>
|
||||
private AbstractComponent mHighlightedComponent;
|
||||
|
||||
/// <summary>
|
||||
/// The position of the highlight animation.
|
||||
/// </summary>
|
||||
private Point mHighlightPosition = new Point(0, 0);
|
||||
|
||||
/// <summary>
|
||||
/// Initializes the highlight grid.
|
||||
/// </summary>
|
||||
/// <param name="l">The layout of the components.</param>
|
||||
/// <param name="highlightAnimation">The animation used to highlight the selected item.</param>
|
||||
public HighlightGrid(Layout l, FramesetAnimation highlightAnimation) : base(l)
|
||||
{
|
||||
this.HighlightAnimation = highlightAnimation;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The animation used to highlight the selected component.
|
||||
/// </summary>
|
||||
public FramesetAnimation HighlightAnimation
|
||||
{
|
||||
get { return this.mHighlightAnimation; }
|
||||
set { this.mHighlightAnimation = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Which child should be highlighted?
|
||||
/// </summary>
|
||||
public AbstractComponent HighlightedComponent
|
||||
{
|
||||
get { return this.mHighlightedComponent; }
|
||||
set
|
||||
{
|
||||
this.mHighlightedComponent = value;
|
||||
this.UpdateHighlight();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Updates the position of the highlight depending on which component is currently selected.
|
||||
/// </summary>
|
||||
private void UpdateHighlight()
|
||||
{
|
||||
if (this.HighlightedComponent != null)
|
||||
{
|
||||
//Find the center of the component:
|
||||
switch (this.Layout)
|
||||
{
|
||||
case Layout.Column:
|
||||
mHighlightPosition.X = this.Size.Width / 2;
|
||||
mHighlightPosition.Y = this.HighlightedComponent.Location.Y + this.HighlightedComponent.Size.Height / 2;
|
||||
break;
|
||||
|
||||
case Layout.Row:
|
||||
mHighlightPosition.X = this.HighlightedComponent.Location.X + this.HighlightedComponent.Size.Width / 2;
|
||||
mHighlightPosition.Y = this.Size.Height / 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RenderSelf(Rectangle coordinates, IRenderParameters parameters)
|
||||
{
|
||||
base.RenderSelf(coordinates, parameters);
|
||||
|
||||
if (this.HighlightAnimation != null && this.HighlightedComponent != null)
|
||||
{
|
||||
coordinates.Offset(mHighlightPosition);
|
||||
this.HighlightAnimation.CurrentFrame.Render(coordinates, parameters);
|
||||
this.HighlightAnimation.update(1);
|
||||
coordinates.Offset(-mHighlightPosition.X, -mHighlightPosition.Y);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user