Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/BizHawk.Client.EmuHawk/CustomControls/MiscControls.cs
2 views
using System.Drawing;
using System.Windows.Forms;

namespace BizHawk.Client.EmuHawk
{
	public class HorizontalLine : Control
	{
		protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)
		{
			base.SetBoundsCore(x, y, width, 2, specified);
		}

		protected override void OnPaint(PaintEventArgs e)
		{
			ControlPaint.DrawBorder3D(e.Graphics, 0, 0, Width, 2, Border3DStyle.Etched);
		}
	}

	public class CustomCheckBox : CheckBox
	{
		Color _CheckBackColor = SystemColors.Control;
		public Color CheckBackColor
		{
			get { return _CheckBackColor; }
			set { _CheckBackColor = value; Refresh(); }
		}

		bool? _ForceChecked;
		public bool? ForceChecked
		{
			get { return _ForceChecked; }
			set { _ForceChecked = value; Refresh(); }
		}

		protected override void OnPaint(PaintEventArgs pevent)
		{
			//draw text-label part of the control with something so that it isn't hallofmirrorsy
			using(var brush = new SolidBrush(Parent.BackColor))
				pevent.Graphics.FillRectangle(brush, ClientRectangle);
			
			var r = new Rectangle(ClientRectangle.Location, SystemInformation.MenuCheckSize);
			var glyphLoc = ClientRectangle;
			glyphLoc.Size = SystemInformation.MenuCheckSize;

			//draw the selectedbackdrop color roughly where the glyph belongs
			using (var brush = new SolidBrush(_CheckBackColor))
				pevent.Graphics.FillRectangle(brush, glyphLoc);

			//draw a checkbox menu glyph (we could do this more elegantly with DrawFrameControl) 
			bool c = CheckState == CheckState.Checked;
			if (ForceChecked.HasValue)
			{
				c = ForceChecked.Value;
			}
			if (c)
			{
				glyphLoc.Y--;
				glyphLoc.X++;
				ControlPaint.DrawMenuGlyph(pevent.Graphics, glyphLoc, MenuGlyph.Checkmark, Color.Black, Color.Transparent);
			}

			//draw a border on top of it all
			ControlPaint.DrawBorder3D(pevent.Graphics, r, Border3DStyle.Sunken);

			//stuff that didnt work
			//CheckBoxRenderer.DrawParentBackground(pevent.Graphics, ClientRectangle, this);
			//CheckBoxRenderer.DrawCheckBox(pevent.Graphics, ClientRectangle.Location, System.Windows.Forms.VisualStyles.CheckBoxState.CheckedNormal);
			//glyphLoc.Size = new System.Drawing.Size(SystemInformation.MenuCheckSize.Width-1,SystemInformation.MenuCheckSize.Height-1);
		}
	}

}