262 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			262 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Text;
 | |
| using System.Windows.Forms;
 | |
| using System.ComponentModel;
 | |
| using System.Drawing;
 | |
| using System.Drawing.Drawing2D;
 | |
| 
 | |
| namespace DevComponents.DotNetBar.Controls
 | |
| {
 | |
|     /// <summary>
 | |
|     /// Represents an image control with built-in reflection.
 | |
|     /// </summary>
 | |
|     [ToolboxBitmap(typeof(ReflectionImage), "Controls.ReflectionImage.ico"), ToolboxItem(true), Designer("DevComponents.DotNetBar.Design.ReflectionImageDesigner, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=90f470f34c89ccaf")]
 | |
|     public class ReflectionImage : ControlWithBackgroundStyle
 | |
|     {
 | |
|         #region Private Variables
 | |
|         private Bitmap _ReflectionBitmap = null;
 | |
|         private Bitmap _DisabledBitmap = null;
 | |
|         #endregion
 | |
| 
 | |
|         #region Events
 | |
|         /// <summary>
 | |
|         /// Initializes a new instance of the ReflectionImage class.
 | |
|         /// </summary>
 | |
|         public ReflectionImage()
 | |
|         {
 | |
|         }
 | |
|         #endregion
 | |
| 
 | |
|         #region Constructor
 | |
|         #endregion
 | |
| 
 | |
|         #region Internal Implementation
 | |
|         protected override void Dispose(bool disposing)
 | |
|         {
 | |
|             DisposeReflectionImage();
 | |
|             DisposeDisabledImage();
 | |
|             if (BarUtilities.DisposeItemImages && !this.DesignMode)
 | |
|             {
 | |
|                 BarUtilities.DisposeImage(ref _Image);
 | |
|             }
 | |
|             base.Dispose(disposing);
 | |
|         }
 | |
|         private Image _Image = null;
 | |
|         /// <summary>
 | |
|         /// Gets or sets the image displayed on the control.
 | |
|         /// </summary>
 | |
|         [DefaultValue(null), Description("Indicates image displayed on the control."), Category("Appearance")]
 | |
|         public Image Image
 | |
|         {
 | |
|             get { return _Image; }
 | |
|             set
 | |
|             {
 | |
|                 if (_Image != value)
 | |
|                 {
 | |
|                     _Image = value;
 | |
|                     OnImageChanged();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void OnImageChanged()
 | |
|         {
 | |
|             DisposeDisabledImage();
 | |
|             CreateReflectionImage();
 | |
|         }
 | |
| 
 | |
|         private void CreateReflectionImage()
 | |
|         {
 | |
|             DisposeReflectionImage();
 | |
|             Image image = GetImage();
 | |
|             if (image != null)
 | |
|             {
 | |
|                 _ReflectionBitmap = ImageHelper.CreateReflectionImage(image);
 | |
|             }
 | |
|             this.Invalidate();
 | |
|         }
 | |
| 
 | |
|         private Image GetImage()
 | |
|         {
 | |
|             if (this.Enabled) return _Image;
 | |
|             if (_DisabledBitmap == null)
 | |
|             {
 | |
|                 _DisabledBitmap = ImageHelper.CreateGrayScaleImage(_Image);
 | |
|             }
 | |
|             return _DisabledBitmap;
 | |
|         }
 | |
| 
 | |
|         private void DisposeReflectionImage()
 | |
|         {
 | |
|             if (_ReflectionBitmap != null)
 | |
|             {
 | |
|                 _ReflectionBitmap.Dispose();
 | |
|                 _ReflectionBitmap = null;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void DisposeDisabledImage()
 | |
|         {
 | |
|             if (_DisabledBitmap != null)
 | |
|             {
 | |
|                 _DisabledBitmap.Dispose();
 | |
|                 _DisabledBitmap = null;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected override void PaintContent(PaintEventArgs e)
 | |
|         {
 | |
|             Image image = GetImage();
 | |
|             if (image == null) return;
 | |
| 
 | |
|             Graphics g = e.Graphics;
 | |
|             SmoothingMode sm = g.SmoothingMode;
 | |
|             if (AntiAlias)
 | |
|                 g.SmoothingMode = SmoothingMode.HighQuality;
 | |
| 
 | |
|             bool disposeStyle = false;
 | |
|             ElementStyle style = this.GetBackgroundStyle(out disposeStyle);
 | |
| 
 | |
|             Rectangle r = GetContentRectangle();
 | |
|             Point imageLocation = r.Location;
 | |
| 
 | |
|             if (style.TextAlignment == eStyleTextAlignment.Center && r.Width > image.Width)
 | |
|                 imageLocation.X += (r.Width - image.Width) / 2;
 | |
|             else if (style.TextAlignment == eStyleTextAlignment.Far && r.Width > image.Width)
 | |
|                 imageLocation.X += (r.Width - image.Width);
 | |
|             float reflectionFactor = .52f;
 | |
|             if (style.TextLineAlignment == eStyleTextAlignment.Center && r.Height > (image.Height + image.Height * reflectionFactor))
 | |
|                 imageLocation.Y += (int)((r.Height - (image.Height + image.Height * reflectionFactor)) / 2);
 | |
|             else if (style.TextLineAlignment == eStyleTextAlignment.Far && r.Height > (image.Height + image.Height * reflectionFactor))
 | |
|                 imageLocation.Y += (int)(r.Height - (image.Height + image.Height * reflectionFactor));
 | |
| 
 | |
|             g.DrawImage(image, imageLocation.X, imageLocation.Y, image.Width, image.Height);
 | |
| 
 | |
|             if (_ReflectionBitmap != null && _ReflectionEnabled)
 | |
|             {
 | |
|                 imageLocation.Y += image.Height;
 | |
|                 g.DrawImage(_ReflectionBitmap, imageLocation);
 | |
|             }
 | |
| 
 | |
|             if (disposeStyle) style.Dispose();
 | |
| 
 | |
|             if (AntiAlias)
 | |
|                 g.SmoothingMode = sm;
 | |
|         }
 | |
| 
 | |
|         protected override Size DefaultSize
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return new Size(128, 128);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private bool _ReflectionEnabled = true;
 | |
|         /// <summary>
 | |
|         /// Gets or sets whether reflection effect is enabled. Default value is true.
 | |
|         /// </summary>
 | |
|         [DefaultValue(true), Description("Indicates whether reflection effect is enabled.")]
 | |
|         public bool ReflectionEnabled
 | |
|         {
 | |
|             get { return _ReflectionEnabled; }
 | |
|             set
 | |
|             {
 | |
|                 if (_ReflectionEnabled != value)
 | |
|                 {
 | |
|                     _ReflectionEnabled = value;
 | |
|                     this.Invalidate();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected override void OnEnabledChanged(EventArgs e)
 | |
|         {
 | |
|             CreateReflectionImage();
 | |
|             base.OnEnabledChanged(e);
 | |
|         }
 | |
|         #endregion
 | |
| 
 | |
|         #region Property Hiding
 | |
|         [Browsable(false)]
 | |
|         public override Image BackgroundImage
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return base.BackgroundImage;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 base.BackgroundImage = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         [Browsable(false)]
 | |
|         public override Font Font
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return base.Font;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 base.Font = value;
 | |
|             }
 | |
|         }
 | |
|         [Browsable(false)]
 | |
|         public override Color ForeColor
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return base.ForeColor;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 base.ForeColor = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
| #if FRAMEWORK20
 | |
| 		[Browsable(false)]
 | |
|         public override ImageLayout BackgroundImageLayout
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return base.BackgroundImageLayout;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 base.BackgroundImageLayout = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         [Browsable(false)]
 | |
|         public new System.Windows.Forms.Padding Padding
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return base.Padding;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 base.Padding = value;
 | |
|             }
 | |
|         }
 | |
| #endif
 | |
|         [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | |
|         public override string Text
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return base.Text;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 base.Text = value;
 | |
|             }
 | |
|         }
 | |
|         #endregion
 | |
| 
 | |
|     }
 | |
| }
 |