123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- using System.ComponentModel;
- using System.Drawing;
- using System.Drawing.Drawing2D;
- using FastReport.Utils;
- namespace FastReport.Gauge.Simple
- {
- /// <summary>
- /// Represents a simple pointer.
- /// </summary>
- #if !DEBUG
- [DesignTimeVisible(false)]
- #endif
- public class SimplePointer : GaugePointer
- {
- #region Fields
- private float left;
- private float top;
- private float horizontalOffset;
- private float height;
- private float width;
- private float ptrRatio = 0.08f;
- #endregion // Fields
- #region Properties
- /// <summary>
- /// Gets o sets the Left offset of gauge pointer.
- /// </summary>
- [Browsable(false)]
- internal float Left
- {
- get { return left; }
- set { left = value; }
- }
- /// <summary>
- /// Gets o sets the Top offset of gauge pointer.
- /// </summary>
- [Browsable(false)]
- internal float Top
- {
- get { return top; }
- set { top = value; }
- }
- /// <summary>
- /// Gets o sets the height of gauge pointer.
- /// </summary>
- [Browsable(false)]
- public float Height
- {
- get { return height; }
- set { height = value; }
- }
- /// <summary>
- /// Gets or sets the width of a pointer.
- /// </summary>
- [Browsable(false)]
- public float Width
- {
- get { return width; }
- set { width = value; }
- }
- /// <summary>
- /// Gets or sets the pointer ratio.
- /// </summary>
- [Browsable(false)]
- public float PointerRatio
- {
- get { return ptrRatio; }
- set { ptrRatio = value; }
- }
- /// <summary>
- /// Gets or sets the pointer horizontal offset (cm).
- /// </summary>
- [Browsable(false)]
- public float HorizontalOffset
- {
- get { return horizontalOffset; }
- set { horizontalOffset = value; }
- }
- #endregion // Properties
- #region Constructors
- /// <summary>
- /// Initializes a new instance of the <see cref="SimplePointer"/> class.
- /// </summary>
- /// <param name="parent">The parent gauge object.</param>
- public SimplePointer(GaugeObject parent) : base(parent)
- {
- height = Parent.Height * ptrRatio;
- width = Parent.Width * ptrRatio;
- horizontalOffset = 0.5f * Units.Centimeters;
- }
- #endregion // Constructors
- #region Internal Methods
- internal virtual void DrawHorz(FRPaintEventArgs e)
- {
- IGraphics g = e.Graphics;
- Pen pen = e.Cache.GetPen(BorderColor, BorderWidth * e.ScaleX, DashStyle.Solid);
- left = (Parent.AbsLeft + Parent.Border.Width / 2 + horizontalOffset) * e.ScaleX;
- top = (Parent.AbsTop + Parent.Border.Width / 2 + (Parent.Height - Parent.Border.Width) / 2 - (Parent.Height - Parent.Border.Width) * ptrRatio / 2) * e.ScaleY;
- height = ((Parent.Height - Parent.Border.Width) * ptrRatio) * e.ScaleY;
- width = (float)((Parent.Width - Parent.Border.Width - horizontalOffset * 2) * (Parent.Value - Parent.Minimum) / (Parent.Maximum - Parent.Minimum) * e.ScaleX);
- Brush brush = Fill.CreateBrush(new RectangleF(left, top, width, height), e.ScaleX, e.ScaleY);
- g.FillAndDrawRectangle(pen, brush, left, top, width, height);
- }
- internal virtual void DrawVert(FRPaintEventArgs e)
- {
- IGraphics g = e.Graphics;
- Pen pen = e.Cache.GetPen(BorderColor, BorderWidth * e.ScaleY, DashStyle.Solid);
- width = ((Parent.Width - Parent.Border.Width) * ptrRatio) * e.ScaleX;
- height = (float)((Parent.Height - Parent.Border.Width - horizontalOffset * 2) * (Parent.Value - Parent.Minimum) / (Parent.Maximum - Parent.Minimum) * e.ScaleY);
- left = (Parent.AbsLeft + Parent.Border.Width / 2 + (Parent.Width - Parent.Border.Width) / 2 - (Parent.Width - Parent.Border.Width) * ptrRatio / 2) * e.ScaleX;
- top = (Parent.AbsTop + Parent.Border.Width / 2 + Parent.Height - Parent.Border.Width - horizontalOffset) * e.ScaleY - height;
- Brush brush = Fill.CreateBrush(new RectangleF(left, top, width, height), e.ScaleX, e.ScaleY);
- g.FillAndDrawRectangle(pen, brush, left, top, width, height);
- }
- #endregion // Internal Methods
- #region Public Methods
- /// <inheritdoc/>
- public override void Assign(GaugePointer src)
- {
- base.Assign(src);
- SimplePointer s = src as SimplePointer;
- Height = s.Height;
- Width = s.Width;
- }
- /// <inheritdoc/>
- public override void Draw(FRPaintEventArgs e)
- {
- base.Draw(e);
- if (Parent.Vertical)
- {
- DrawVert(e);
- }
- else
- {
- DrawHorz(e);
- }
- }
- /// <inheritdoc/>
- public override void Serialize(FRWriter writer, string prefix, GaugePointer diff)
- {
- base.Serialize(writer, prefix, diff);
- SimplePointer dc = diff as SimplePointer;
- if (Height != dc.Height)
- {
- writer.WriteFloat(prefix + ".Height", Height);
- }
- if (Width != dc.Width)
- {
- writer.WriteFloat(prefix + ".Width", Width);
- }
- }
- #endregion // Public Methods
- }
- }
|