//using System; //using System.Drawing; //using System.Drawing.Drawing2D; //using System.Runtime.InteropServices; //using System.Windows.Forms; //namespace Optimizer //{ // public sealed class MoonComboBox : ComboBox // { // [DllImport("user32.dll")] // static extern IntPtr GetDC(IntPtr ptr); // [DllImport("gdi32.dll")] // static extern int GetDeviceCaps(IntPtr hdc, int nIndex); // [DllImport("user32.dll", EntryPoint = "ReleaseDC")] // static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDc); // private Color _color = Color.FromArgb(40, 40, 40); // private Color _selectedItemColor = Color.FromArgb(40, 40, 40); // private Color _borderColor = Color.FromArgb(61, 61, 61); // private Color _separatorLineColor = Color.FromArgb(61, 61, 61); // public Color SelectColor // { // get => _selectedItemColor; // set // { // _selectedItemColor = value; // Invalidate(); // } // } // protected override void OnDrawItem(DrawItemEventArgs e) // { // base.OnDrawItem(e); // LinearGradientBrush LGB = new LinearGradientBrush(e.Bounds, _selectedItemColor, ColorHelper.ChangeColorBrightness(_selectedItemColor, 0.7), 90.0F); // if (Convert.ToInt32(e.State & DrawItemState.Selected) == (int)DrawItemState.Selected) // { // if (!(e.Index == -1)) // { // e.Graphics.FillRectangle(LGB, e.Bounds); // e.Graphics.DrawString(GetItemText(Items[e.Index]), e.Font, new SolidBrush(GetContrastColor(SelectColor)), e.Bounds); // } // } // else // { // if (!(e.Index == -1)) // { // e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(40, 40, 40)), e.Bounds); // e.Graphics.DrawString(GetItemText(Items[e.Index]), e.Font, Brushes.DimGray, e.Bounds); // } // } // LGB.Dispose(); // } // protected override void OnLostFocus(EventArgs e) // { // base.OnLostFocus(e); // SuspendLayout(); // Update(); // ResumeLayout(); // } // protected override void OnPaintBackground(PaintEventArgs e) // { // base.OnPaintBackground(e); // } // protected override void OnResize(EventArgs e) // { // base.OnResize(e); // if (!Focused) // { // SelectionLength = 0; // } // } // private static int DPIScale // { // get // { // IntPtr hdc = GetDC(IntPtr.Zero); // int DC = GetDeviceCaps(hdc, 0x58); // ReleaseDC(IntPtr.Zero, hdc); // return DC; // } // } // private int GetDPIScaleFactor(int currentDPI) // { // switch (currentDPI) // { // case 96: // return 25; // case 120: // return 30; // case 144: // return 35; // case 192: // return 40; // default: // return 25; // } // } // protected override void OnDropDown(EventArgs e) // { // base.OnDropDown(e); // DropDownHeight = Items.Count * GetDPIScaleFactor(DPIScale); // } // public MoonComboBox() // { // SetStyle((ControlStyles)0x22016, true); // SetStyle(ControlStyles.Selectable, false); // DrawMode = DrawMode.OwnerDrawFixed; // DropDownStyle = ComboBoxStyle.DropDownList; // BackColor = Color.FromArgb(246, 246, 246); // ForeColor = Color.FromArgb(76, 76, 97); // Size = new Size(135, 27); // Cursor = Cursors.Hand; // } // private GraphicsPath GetFigurePath(Rectangle rect, int radius) // { // GraphicsPath path = new GraphicsPath(); // float curveSize = radius * 2F; // path.StartFigure(); // path.AddArc(rect.X, rect.Y, curveSize, curveSize, 180, 90); // path.AddArc(rect.Right - curveSize, rect.Y, curveSize, curveSize, 270, 90); // path.AddArc(rect.Right - curveSize, rect.Bottom - curveSize, curveSize, curveSize, 0, 90); // path.AddArc(rect.X, rect.Bottom - curveSize, curveSize, curveSize, 90, 90); // path.CloseFigure(); // return path; // } // private Color GetContrastColor(Color c) // { // double brightness = c.R * 0.299 + c.G * 0.587 + c.B * 0.114; // return brightness > 149 ? Color.Black : Color.White; // } // public enum Direction // { // Up, Down // } // private void DrawTriangle(Graphics g, Rectangle rect, Direction direction) // { // int halfWidth = rect.Width / 2; // Point p0 = Point.Empty; // Point p1 = Point.Empty; // Point p2 = Point.Empty; // switch (direction) // { // case Direction.Up: // p0 = new Point(rect.Left + halfWidth, rect.Top); // p1 = new Point(rect.Left, rect.Bottom); // p2 = new Point(rect.Right, rect.Bottom); // break; // case Direction.Down: // p0 = new Point(rect.Left + halfWidth, rect.Bottom); // p1 = new Point(rect.Left, rect.Top); // p2 = new Point(rect.Right, rect.Top); // break; // } // g.FillPolygon(Brushes.DarkGray, new Point[] { p0, p1, p2 }); // } // protected override void OnPaint(PaintEventArgs e) // { // base.OnPaint(e); // e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; // e.Graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; // e.Graphics.InterpolationMode = InterpolationMode.High; // e.Graphics.Clear(Parent.BackColor); // var rect = new Rectangle(0, 0, Width - 1, Height - 1); // GraphicsPath GP = GetFigurePath(rect, 5); // LinearGradientBrush LGB = new LinearGradientBrush(ClientRectangle, _color, ColorHelper.ChangeColorBrightness(_color, 0.8), 90.0F); // e.Graphics.SetClip(GP); // e.Graphics.FillRectangle(LGB, ClientRectangle); // e.Graphics.ResetClip(); // e.Graphics.DrawPath(new Pen(_borderColor), GP); // e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), new Rectangle(3, 0, Width - 20, Height), new StringFormat // { // LineAlignment = StringAlignment.Center, // Alignment = StringAlignment.Near // }); // DrawTriangle(e.Graphics, new Rectangle(Width - 17, (Height / 2) - 4, 8, 8), DroppedDown ? Direction.Up : Direction.Down); // e.Graphics.DrawLine(new Pen(ColorHelper.ChangeColorBrightness(_separatorLineColor, 0.8)), Width - 24, 5, Width - 24, Height - 6); // e.Graphics.DrawLine(new Pen(_separatorLineColor), Width - 25, 5, Width - 25, Height - 6); // } // } //}