123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- using System;
- using System.Windows.Forms;
- using System.Drawing;
- using System.Drawing.Drawing2D;
- using System.ComponentModel;
- using FastReport.Utils;
- namespace FastReport.Controls
- {
- #if !DEBUG
- [DesignTimeVisible(false)]
- #endif
- internal class LineStyleControl : Control
- {
- private LineStyle[] styles;
- private LineStyle style;
- private float lineWidth;
- private Color lineColor;
- private bool showBorder;
- public event EventHandler StyleSelected;
- public LineStyle Style
- {
- get { return style; }
- set
- {
- style = value;
- Refresh();
- }
- }
- public float LineWidth
- {
- get { return lineWidth; }
- set
- {
- lineWidth = value;
- Refresh();
- }
- }
- public Color LineColor
- {
- get { return lineColor; }
- set
- {
- lineColor = value;
- Refresh();
- }
- }
- public bool ShowBorder
- {
- get { return showBorder; }
- set
- {
- showBorder = value;
- Refresh();
- }
- }
- private void DrawHighlight(Graphics g, Rectangle rect)
- {
- using (Brush brush = new SolidBrush(Color.FromArgb(193, 210, 238)))
- g.FillRectangle(brush, rect);
- using (Pen pen = new Pen(Color.FromArgb(49, 106, 197)))
- g.DrawRectangle(pen, rect);
- }
- protected override void OnPaint(PaintEventArgs e)
- {
- Graphics g = e.Graphics;
- // draw control border
- if (showBorder)
- {
- using (Pen p = new Pen(Color.FromArgb(127, 157, 185)))
- g.DrawRectangle(p, 0, 0, Width - 1, Height - 1);
- }
- // draw items
- for (int i = 0; i < styles.Length; i++)
- {
- // highlight active style
- if (this.styles[i] == style)
- DrawHighlight(g, new Rectangle(
- this.LogicalToDevice(4),
- i * this.LogicalToDevice(15) + this.LogicalToDevice(4),
- Width - this.LogicalToDevice(9),
- this.LogicalToDevice(15)));
- using (Pen p = new Pen(lineColor, this.LogicalToDevice(lineWidth < 1.5f ? 1.5f : lineWidth)))
- {
- DashStyle[] dashStyles = new DashStyle[] {
- DashStyle.Solid, DashStyle.Dash, DashStyle.Dot, DashStyle.DashDot, DashStyle.DashDotDot, DashStyle.Solid };
- p.DashStyle = dashStyles[(int)this.styles[i]];
- if (this.styles[i] == LineStyle.Double)
- {
- p.Width *= 2.5f;
- p.CompoundArray = new float[] { 0, 0.4f, 0.6f, 1 };
- }
- g.DrawLine(p, this.LogicalToDevice(8), i * this.LogicalToDevice(15) + this.LogicalToDevice(12), Width - this.LogicalToDevice(8), i * this.LogicalToDevice(15) + this.LogicalToDevice(12));
- };
- }
- }
- protected override void OnMouseUp(MouseEventArgs e)
- {
- int i = (e.Y - this.LogicalToDevice(4)) / this.LogicalToDevice(15);
- if (i < 0)
- i = 0;
- if (i > styles.Length - 1)
- i = styles.Length - 1;
- Style = styles[i];
- if (StyleSelected != null)
- StyleSelected(this, EventArgs.Empty);
- }
- public LineStyleControl()
- {
- styles = new LineStyle[] {
- LineStyle.Solid, LineStyle.Dash, LineStyle.Dot, LineStyle.DashDot, LineStyle.DashDotDot, LineStyle.Double };
- lineColor = Color.Black;
- lineWidth = 1;
- showBorder = true;
- BackColor = SystemColors.Window;
- SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
- Size = new Size(70, 100);
- }
- }
- }
|