SHOW:
|
|
- or go back to the newest paste.
| 1 | using System; | |
| 2 | using System.Windows.Forms; | |
| 3 | using System.Drawing.Drawing2D; | |
| 4 | using System.ComponentModel; | |
| 5 | using System.Runtime.InteropServices; | |
| 6 | using System.Drawing; | |
| 7 | ||
| 8 | //.::Tweety Theme::. | |
| 9 | //Author: UnReLaTeDScript | |
| 10 | - | //Converted to C# by: Deliriumâ„¢ @ HackForums.Net |
| 10 | + | |
| 11 | //Version: 1.0 | |
| 12 | abstract class Theme : ContainerControl | |
| 13 | {
| |
| 14 | ||
| 15 | #region " Initialization " | |
| 16 | ||
| 17 | protected Graphics G; | |
| 18 | public Theme() | |
| 19 | {
| |
| 20 | SetStyle((ControlStyles)139270, true); | |
| 21 | } | |
| 22 | ||
| 23 | private bool ParentIsForm; | |
| 24 | protected override void OnHandleCreated(EventArgs e) | |
| 25 | {
| |
| 26 | Dock = DockStyle.Fill; | |
| 27 | ParentIsForm = Parent is Form; | |
| 28 | if (ParentIsForm) | |
| 29 | {
| |
| 30 | if (!(_TransparencyKey == Color.Empty)) | |
| 31 | ParentForm.TransparencyKey = _TransparencyKey; | |
| 32 | ParentForm.FormBorderStyle = FormBorderStyle.None; | |
| 33 | } | |
| 34 | base.OnHandleCreated(e); | |
| 35 | } | |
| 36 | ||
| 37 | public override string Text | |
| 38 | {
| |
| 39 | get { return base.Text; }
| |
| 40 | set | |
| 41 | {
| |
| 42 | base.Text = value; | |
| 43 | Invalidate(); | |
| 44 | } | |
| 45 | } | |
| 46 | #endregion | |
| 47 | ||
| 48 | #region " Sizing and Movement " | |
| 49 | ||
| 50 | private bool _Resizable = true; | |
| 51 | public bool Resizable | |
| 52 | {
| |
| 53 | get { return _Resizable; }
| |
| 54 | set { _Resizable = value; }
| |
| 55 | } | |
| 56 | ||
| 57 | private int _MoveHeight = 24; | |
| 58 | public int MoveHeight | |
| 59 | {
| |
| 60 | get { return _MoveHeight; }
| |
| 61 | set | |
| 62 | {
| |
| 63 | _MoveHeight = value; | |
| 64 | Header = new Rectangle(7, 7, Width - 14, _MoveHeight - 7); | |
| 65 | } | |
| 66 | } | |
| 67 | ||
| 68 | private IntPtr Flag; | |
| 69 | protected override void OnMouseDown(MouseEventArgs e) | |
| 70 | {
| |
| 71 | if (!(e.Button == MouseButtons.Left)) | |
| 72 | return; | |
| 73 | if (ParentIsForm) | |
| 74 | if (ParentForm.WindowState == FormWindowState.Maximized) | |
| 75 | return; | |
| 76 | ||
| 77 | if (Header.Contains(e.Location)) | |
| 78 | {
| |
| 79 | Flag = new IntPtr(2); | |
| 80 | } | |
| 81 | else if (Current.Position == 0 | !_Resizable) | |
| 82 | {
| |
| 83 | return; | |
| 84 | } | |
| 85 | else | |
| 86 | {
| |
| 87 | Flag = new IntPtr(Current.Position); | |
| 88 | } | |
| 89 | ||
| 90 | Capture = false; | |
| 91 | Message m = Message.Create(Parent.Handle, 161, Flag, IntPtr.Zero); | |
| 92 | DefWndProc(ref m); | |
| 93 | ||
| 94 | base.OnMouseDown(e); | |
| 95 | } | |
| 96 | ||
| 97 | private struct Pointer | |
| 98 | {
| |
| 99 | public readonly Cursor Cursor; | |
| 100 | public readonly byte Position; | |
| 101 | public Pointer(Cursor c, byte p) | |
| 102 | {
| |
| 103 | Cursor = c; | |
| 104 | Position = p; | |
| 105 | } | |
| 106 | } | |
| 107 | ||
| 108 | private bool F1; | |
| 109 | private bool F2; | |
| 110 | private bool F3; | |
| 111 | private bool F4; | |
| 112 | private Point PTC; | |
| 113 | private Pointer GetPointer() | |
| 114 | {
| |
| 115 | PTC = PointToClient(MousePosition); | |
| 116 | F1 = PTC.X < 7; | |
| 117 | F2 = PTC.X > Width - 7; | |
| 118 | F3 = PTC.Y < 7; | |
| 119 | F4 = PTC.Y > Height - 7; | |
| 120 | ||
| 121 | if (F1 & F3) | |
| 122 | return new Pointer(Cursors.SizeNWSE, 13); | |
| 123 | if (F1 & F4) | |
| 124 | return new Pointer(Cursors.SizeNESW, 16); | |
| 125 | if (F2 & F3) | |
| 126 | return new Pointer(Cursors.SizeNESW, 14); | |
| 127 | if (F2 & F4) | |
| 128 | return new Pointer(Cursors.SizeNWSE, 17); | |
| 129 | if (F1) | |
| 130 | return new Pointer(Cursors.SizeWE, 10); | |
| 131 | if (F2) | |
| 132 | return new Pointer(Cursors.SizeWE, 11); | |
| 133 | if (F3) | |
| 134 | return new Pointer(Cursors.SizeNS, 12); | |
| 135 | if (F4) | |
| 136 | return new Pointer(Cursors.SizeNS, 15); | |
| 137 | return new Pointer(Cursors.Default, 0); | |
| 138 | } | |
| 139 | ||
| 140 | private Pointer Current; | |
| 141 | private Pointer Pending; | |
| 142 | private void SetCurrent() | |
| 143 | {
| |
| 144 | Pending = GetPointer(); | |
| 145 | if (Current.Position == Pending.Position) | |
| 146 | return; | |
| 147 | Current = GetPointer(); | |
| 148 | Cursor = Current.Cursor; | |
| 149 | } | |
| 150 | ||
| 151 | protected override void OnMouseMove(MouseEventArgs e) | |
| 152 | {
| |
| 153 | if (_Resizable) | |
| 154 | SetCurrent(); | |
| 155 | base.OnMouseMove(e); | |
| 156 | } | |
| 157 | ||
| 158 | protected Rectangle Header; | |
| 159 | protected override void OnSizeChanged(EventArgs e) | |
| 160 | {
| |
| 161 | if (Width == 0 || Height == 0) | |
| 162 | return; | |
| 163 | Header = new Rectangle(7, 7, Width - 14, _MoveHeight - 7); | |
| 164 | Invalidate(); | |
| 165 | base.OnSizeChanged(e); | |
| 166 | } | |
| 167 | ||
| 168 | #endregion | |
| 169 | ||
| 170 | #region " Convienence " | |
| 171 | ||
| 172 | public abstract void PaintHook(); | |
| 173 | protected override sealed void OnPaint(PaintEventArgs e) | |
| 174 | {
| |
| 175 | if (Width == 0 || Height == 0) | |
| 176 | return; | |
| 177 | G = e.Graphics; | |
| 178 | PaintHook(); | |
| 179 | } | |
| 180 | ||
| 181 | private Color _TransparencyKey; | |
| 182 | public Color TransparencyKey | |
| 183 | {
| |
| 184 | get { return _TransparencyKey; }
| |
| 185 | set | |
| 186 | {
| |
| 187 | _TransparencyKey = value; | |
| 188 | Invalidate(); | |
| 189 | } | |
| 190 | } | |
| 191 | ||
| 192 | private Image _Image; | |
| 193 | public Image Image | |
| 194 | {
| |
| 195 | get { return _Image; }
| |
| 196 | set | |
| 197 | {
| |
| 198 | _Image = value; | |
| 199 | Invalidate(); | |
| 200 | } | |
| 201 | } | |
| 202 | public int ImageWidth | |
| 203 | {
| |
| 204 | get | |
| 205 | {
| |
| 206 | if (_Image == null) | |
| 207 | return 0; | |
| 208 | return _Image.Width; | |
| 209 | } | |
| 210 | } | |
| 211 | ||
| 212 | private Size _Size; | |
| 213 | private Rectangle _Rectangle; | |
| 214 | private LinearGradientBrush _Gradient; | |
| 215 | ||
| 216 | private SolidBrush _Brush; | |
| 217 | protected void DrawCorners(Color c, Rectangle rect) | |
| 218 | {
| |
| 219 | _Brush = new SolidBrush(c); | |
| 220 | G.FillRectangle(_Brush, rect.X, rect.Y, 1, 1); | |
| 221 | G.FillRectangle(_Brush, rect.X + (rect.Width - 1), rect.Y, 1, 1); | |
| 222 | G.FillRectangle(_Brush, rect.X, rect.Y + (rect.Height - 1), 1, 1); | |
| 223 | G.FillRectangle(_Brush, rect.X + (rect.Width - 1), rect.Y + (rect.Height - 1), 1, 1); | |
| 224 | } | |
| 225 | ||
| 226 | protected void DrawBorders(Pen p1, Pen p2, Rectangle rect) | |
| 227 | {
| |
| 228 | G.DrawRectangle(p1, rect.X, rect.Y, rect.Width - 1, rect.Height - 1); | |
| 229 | G.DrawRectangle(p2, rect.X + 1, rect.Y + 1, rect.Width - 3, rect.Height - 3); | |
| 230 | } | |
| 231 | ||
| 232 | protected void DrawText(HorizontalAlignment a, Color c, int x) | |
| 233 | {
| |
| 234 | DrawText(a, c, x, 0); | |
| 235 | } | |
| 236 | protected void DrawText(HorizontalAlignment a, Color c, int x, int y) | |
| 237 | {
| |
| 238 | if (string.IsNullOrEmpty(Text)) | |
| 239 | return; | |
| 240 | _Size = G.MeasureString(Text, Font).ToSize(); | |
| 241 | _Brush = new SolidBrush(c); | |
| 242 | ||
| 243 | switch (a) | |
| 244 | {
| |
| 245 | case HorizontalAlignment.Left: | |
| 246 | G.DrawString(Text, Font, _Brush, x, _MoveHeight / 2 - _Size.Height / 2 + y); | |
| 247 | break; | |
| 248 | case HorizontalAlignment.Right: | |
| 249 | G.DrawString(Text, Font, _Brush, Width - _Size.Width - x, _MoveHeight / 2 - _Size.Height / 2 + y); | |
| 250 | break; | |
| 251 | case HorizontalAlignment.Center: | |
| 252 | G.DrawString(Text, Font, _Brush, Width / 2 - _Size.Width / 2 + x, _MoveHeight / 2 - _Size.Height / 2 + y); | |
| 253 | break; | |
| 254 | } | |
| 255 | } | |
| 256 | ||
| 257 | protected void DrawIcon(HorizontalAlignment a, int x) | |
| 258 | {
| |
| 259 | DrawIcon(a, x, 0); | |
| 260 | } | |
| 261 | protected void DrawIcon(HorizontalAlignment a, int x, int y) | |
| 262 | {
| |
| 263 | if (_Image == null) | |
| 264 | return; | |
| 265 | switch (a) | |
| 266 | {
| |
| 267 | case HorizontalAlignment.Left: | |
| 268 | G.DrawImage(_Image, x, _MoveHeight / 2 - _Image.Height / 2 + y); | |
| 269 | break; | |
| 270 | case HorizontalAlignment.Right: | |
| 271 | G.DrawImage(_Image, Width - _Image.Width - x, _MoveHeight / 2 - _Image.Height / 2 + y); | |
| 272 | break; | |
| 273 | case HorizontalAlignment.Center: | |
| 274 | G.DrawImage(_Image, Width / 2 - _Image.Width / 2, _MoveHeight / 2 - _Image.Height / 2); | |
| 275 | break; | |
| 276 | } | |
| 277 | } | |
| 278 | ||
| 279 | protected void DrawGradient(Color c1, Color c2, int x, int y, int width, int height, float angle) | |
| 280 | {
| |
| 281 | _Rectangle = new Rectangle(x, y, width, height); | |
| 282 | _Gradient = new LinearGradientBrush(_Rectangle, c1, c2, angle); | |
| 283 | G.FillRectangle(_Gradient, _Rectangle); | |
| 284 | } | |
| 285 | ||
| 286 | #endregion | |
| 287 | ||
| 288 | } | |
| 289 | static class Draw | |
| 290 | {
| |
| 291 | public static GraphicsPath RoundRect(Rectangle Rectangle, int Curve) | |
| 292 | {
| |
| 293 | GraphicsPath P = new GraphicsPath(); | |
| 294 | int ArcRectangleWidth = Curve * 2; | |
| 295 | P.AddArc(new Rectangle(Rectangle.X, Rectangle.Y, ArcRectangleWidth, ArcRectangleWidth), -180, 90); | |
| 296 | P.AddArc(new Rectangle(Rectangle.Width - ArcRectangleWidth + Rectangle.X, Rectangle.Y, ArcRectangleWidth, ArcRectangleWidth), -90, 90); | |
| 297 | P.AddArc(new Rectangle(Rectangle.Width - ArcRectangleWidth + Rectangle.X, Rectangle.Height - ArcRectangleWidth + Rectangle.Y, ArcRectangleWidth, ArcRectangleWidth), 0, 90); | |
| 298 | P.AddArc(new Rectangle(Rectangle.X, Rectangle.Height - ArcRectangleWidth + Rectangle.Y, ArcRectangleWidth, ArcRectangleWidth), 90, 90); | |
| 299 | P.AddLine(new Point(Rectangle.X, Rectangle.Height - ArcRectangleWidth + Rectangle.Y), new Point(Rectangle.X, Curve + Rectangle.Y)); | |
| 300 | return P; | |
| 301 | } | |
| 302 | //Public Function RoundRect(ByVal X As Integer, ByVal Y As Integer, ByVal Width As Integer, ByVal Height As Integer, ByVal Curve As Integer) As GraphicsPath | |
| 303 | // Dim Rectangle As Rectangle = New Rectangle(X, Y, Width, Height) | |
| 304 | // Dim P As GraphicsPath = New GraphicsPath() | |
| 305 | // Dim ArcRectangleWidth As Integer = Curve * 2 | |
| 306 | // P.AddArc(New Rectangle(Rectangle.X, Rectangle.Y, ArcRectangleWidth, ArcRectangleWidth), -180, 90) | |
| 307 | // P.AddArc(New Rectangle(Rectangle.Width - ArcRectangleWidth + Rectangle.X, Rectangle.Y, ArcRectangleWidth, ArcRectangleWidth), -90, 90) | |
| 308 | // P.AddArc(New Rectangle(Rectangle.Width - ArcRectangleWidth + Rectangle.X, Rectangle.Height - ArcRectangleWidth + Rectangle.Y, ArcRectangleWidth, ArcRectangleWidth), 0, 90) | |
| 309 | // P.AddArc(New Rectangle(Rectangle.X, Rectangle.Height - ArcRectangleWidth + Rectangle.Y, ArcRectangleWidth, ArcRectangleWidth), 90, 90) | |
| 310 | // P.AddLine(New Point(Rectangle.X, Rectangle.Height - ArcRectangleWidth + Rectangle.Y), New Point(Rectangle.X, Curve + Rectangle.Y)) | |
| 311 | // Return P | |
| 312 | //End Function | |
| 313 | } | |
| 314 | abstract class ThemeControl : Control | |
| 315 | {
| |
| 316 | ||
| 317 | #region " Initialization " | |
| 318 | ||
| 319 | protected Graphics G; | |
| 320 | protected Bitmap B; | |
| 321 | public ThemeControl() | |
| 322 | {
| |
| 323 | SetStyle((ControlStyles)139270, true); | |
| 324 | B = new Bitmap(1, 1); | |
| 325 | G = Graphics.FromImage(B); | |
| 326 | } | |
| 327 | ||
| 328 | public void AllowTransparent() | |
| 329 | {
| |
| 330 | SetStyle(ControlStyles.Opaque, false); | |
| 331 | SetStyle(ControlStyles.SupportsTransparentBackColor, true); | |
| 332 | } | |
| 333 | ||
| 334 | public override string Text | |
| 335 | {
| |
| 336 | get { return base.Text; }
| |
| 337 | set | |
| 338 | {
| |
| 339 | base.Text = value; | |
| 340 | Invalidate(); | |
| 341 | } | |
| 342 | } | |
| 343 | #endregion | |
| 344 | ||
| 345 | #region " Mouse Handling " | |
| 346 | ||
| 347 | protected enum State : byte | |
| 348 | {
| |
| 349 | MouseNone = 0, | |
| 350 | MouseOver = 1, | |
| 351 | MouseDown = 2 | |
| 352 | } | |
| 353 | ||
| 354 | protected State MouseState; | |
| 355 | protected override void OnMouseLeave(EventArgs e) | |
| 356 | {
| |
| 357 | ChangeMouseState(State.MouseNone); | |
| 358 | base.OnMouseLeave(e); | |
| 359 | } | |
| 360 | protected override void OnMouseEnter(EventArgs e) | |
| 361 | {
| |
| 362 | ChangeMouseState(State.MouseOver); | |
| 363 | base.OnMouseEnter(e); | |
| 364 | } | |
| 365 | protected override void OnMouseUp(MouseEventArgs e) | |
| 366 | {
| |
| 367 | ChangeMouseState(State.MouseOver); | |
| 368 | base.OnMouseUp(e); | |
| 369 | } | |
| 370 | protected override void OnMouseDown(MouseEventArgs e) | |
| 371 | {
| |
| 372 | if (e.Button == MouseButtons.Left) | |
| 373 | ChangeMouseState(State.MouseDown); | |
| 374 | base.OnMouseDown(e); | |
| 375 | } | |
| 376 | ||
| 377 | private void ChangeMouseState(State e) | |
| 378 | {
| |
| 379 | MouseState = e; | |
| 380 | Invalidate(); | |
| 381 | } | |
| 382 | ||
| 383 | #endregion | |
| 384 | ||
| 385 | #region " Convienence " | |
| 386 | ||
| 387 | public abstract void PaintHook(); | |
| 388 | protected override sealed void OnPaint(PaintEventArgs e) | |
| 389 | {
| |
| 390 | if (Width == 0 || Height == 0) | |
| 391 | return; | |
| 392 | PaintHook(); | |
| 393 | e.Graphics.DrawImage(B, 0, 0); | |
| 394 | } | |
| 395 | ||
| 396 | protected override void OnSizeChanged(EventArgs e) | |
| 397 | {
| |
| 398 | if (!(Width == 0) && !(Height == 0)) | |
| 399 | {
| |
| 400 | B = new Bitmap(Width, Height); | |
| 401 | G = Graphics.FromImage(B); | |
| 402 | Invalidate(); | |
| 403 | } | |
| 404 | base.OnSizeChanged(e); | |
| 405 | } | |
| 406 | ||
| 407 | private bool _NoRounding; | |
| 408 | public bool NoRounding | |
| 409 | {
| |
| 410 | get { return _NoRounding; }
| |
| 411 | set | |
| 412 | {
| |
| 413 | _NoRounding = value; | |
| 414 | Invalidate(); | |
| 415 | } | |
| 416 | } | |
| 417 | ||
| 418 | private Image _Image; | |
| 419 | public Image Image | |
| 420 | {
| |
| 421 | get { return _Image; }
| |
| 422 | set | |
| 423 | {
| |
| 424 | _Image = value; | |
| 425 | Invalidate(); | |
| 426 | } | |
| 427 | } | |
| 428 | public int ImageWidth | |
| 429 | {
| |
| 430 | get | |
| 431 | {
| |
| 432 | if (_Image == null) | |
| 433 | return 0; | |
| 434 | return _Image.Width; | |
| 435 | } | |
| 436 | } | |
| 437 | public int ImageTop | |
| 438 | {
| |
| 439 | get | |
| 440 | {
| |
| 441 | if (_Image == null) | |
| 442 | return 0; | |
| 443 | return Height / 2 - _Image.Height / 2; | |
| 444 | } | |
| 445 | } | |
| 446 | ||
| 447 | private Size _Size; | |
| 448 | private Rectangle _Rectangle; | |
| 449 | private LinearGradientBrush _Gradient; | |
| 450 | ||
| 451 | private SolidBrush _Brush; | |
| 452 | protected void DrawCorners(Color c, Rectangle rect) | |
| 453 | {
| |
| 454 | if (_NoRounding) | |
| 455 | return; | |
| 456 | ||
| 457 | B.SetPixel(rect.X, rect.Y, c); | |
| 458 | B.SetPixel(rect.X + (rect.Width - 1), rect.Y, c); | |
| 459 | B.SetPixel(rect.X, rect.Y + (rect.Height - 1), c); | |
| 460 | B.SetPixel(rect.X + (rect.Width - 1), rect.Y + (rect.Height - 1), c); | |
| 461 | } | |
| 462 | ||
| 463 | protected void DrawBorders(Pen p1, Pen p2, Rectangle rect) | |
| 464 | {
| |
| 465 | G.DrawRectangle(p1, rect.X, rect.Y, rect.Width - 1, rect.Height - 1); | |
| 466 | G.DrawRectangle(p2, rect.X + 1, rect.Y + 1, rect.Width - 3, rect.Height - 3); | |
| 467 | } | |
| 468 | ||
| 469 | protected void DrawText(HorizontalAlignment a, Color c, int x) | |
| 470 | {
| |
| 471 | DrawText(a, c, x, 0); | |
| 472 | } | |
| 473 | protected void DrawText(HorizontalAlignment a, Color c, int x, int y) | |
| 474 | {
| |
| 475 | if (string.IsNullOrEmpty(Text)) | |
| 476 | return; | |
| 477 | _Size = G.MeasureString(Text, Font).ToSize(); | |
| 478 | _Brush = new SolidBrush(c); | |
| 479 | ||
| 480 | switch (a) | |
| 481 | {
| |
| 482 | case HorizontalAlignment.Left: | |
| 483 | G.DrawString(Text, Font, _Brush, x, Height / 2 - _Size.Height / 2 + y); | |
| 484 | break; | |
| 485 | case HorizontalAlignment.Right: | |
| 486 | G.DrawString(Text, Font, _Brush, Width - _Size.Width - x, Height / 2 - _Size.Height / 2 + y); | |
| 487 | break; | |
| 488 | case HorizontalAlignment.Center: | |
| 489 | G.DrawString(Text, Font, _Brush, Width / 2 - _Size.Width / 2 + x, Height / 2 - _Size.Height / 2 + y); | |
| 490 | break; | |
| 491 | } | |
| 492 | } | |
| 493 | ||
| 494 | protected void DrawIcon(HorizontalAlignment a, int x) | |
| 495 | {
| |
| 496 | DrawIcon(a, x, 0); | |
| 497 | } | |
| 498 | protected void DrawIcon(HorizontalAlignment a, int x, int y) | |
| 499 | {
| |
| 500 | if (_Image == null) | |
| 501 | return; | |
| 502 | switch (a) | |
| 503 | {
| |
| 504 | case HorizontalAlignment.Left: | |
| 505 | G.DrawImage(_Image, x, Height / 2 - _Image.Height / 2 + y); | |
| 506 | break; | |
| 507 | case HorizontalAlignment.Right: | |
| 508 | G.DrawImage(_Image, Width - _Image.Width - x, Height / 2 - _Image.Height / 2 + y); | |
| 509 | break; | |
| 510 | case HorizontalAlignment.Center: | |
| 511 | G.DrawImage(_Image, Width / 2 - _Image.Width / 2, Height / 2 - _Image.Height / 2); | |
| 512 | break; | |
| 513 | } | |
| 514 | } | |
| 515 | ||
| 516 | protected void DrawGradient(Color c1, Color c2, int x, int y, int width, int height, float angle) | |
| 517 | {
| |
| 518 | _Rectangle = new Rectangle(x, y, width, height); | |
| 519 | _Gradient = new LinearGradientBrush(_Rectangle, c1, c2, angle); | |
| 520 | G.FillRectangle(_Gradient, _Rectangle); | |
| 521 | } | |
| 522 | #endregion | |
| 523 | ||
| 524 | } | |
| 525 | abstract class ThemeContainerControl : ContainerControl | |
| 526 | {
| |
| 527 | ||
| 528 | #region " Initialization " | |
| 529 | ||
| 530 | protected Graphics G; | |
| 531 | protected Bitmap B; | |
| 532 | public ThemeContainerControl() | |
| 533 | {
| |
| 534 | SetStyle((ControlStyles)139270, true); | |
| 535 | B = new Bitmap(1, 1); | |
| 536 | G = Graphics.FromImage(B); | |
| 537 | } | |
| 538 | ||
| 539 | public void AllowTransparent() | |
| 540 | {
| |
| 541 | SetStyle(ControlStyles.Opaque, false); | |
| 542 | SetStyle(ControlStyles.SupportsTransparentBackColor, true); | |
| 543 | } | |
| 544 | ||
| 545 | #endregion | |
| 546 | #region " Convienence " | |
| 547 | ||
| 548 | public abstract void PaintHook(); | |
| 549 | protected override sealed void OnPaint(PaintEventArgs e) | |
| 550 | {
| |
| 551 | if (Width == 0 || Height == 0) | |
| 552 | return; | |
| 553 | PaintHook(); | |
| 554 | e.Graphics.DrawImage(B, 0, 0); | |
| 555 | } | |
| 556 | ||
| 557 | protected override void OnSizeChanged(EventArgs e) | |
| 558 | {
| |
| 559 | if (!(Width == 0) && !(Height == 0)) | |
| 560 | {
| |
| 561 | B = new Bitmap(Width, Height); | |
| 562 | G = Graphics.FromImage(B); | |
| 563 | Invalidate(); | |
| 564 | } | |
| 565 | base.OnSizeChanged(e); | |
| 566 | } | |
| 567 | ||
| 568 | private bool _NoRounding; | |
| 569 | public bool NoRounding | |
| 570 | {
| |
| 571 | get { return _NoRounding; }
| |
| 572 | set | |
| 573 | {
| |
| 574 | _NoRounding = value; | |
| 575 | Invalidate(); | |
| 576 | } | |
| 577 | } | |
| 578 | ||
| 579 | private Rectangle _Rectangle; | |
| 580 | ||
| 581 | private LinearGradientBrush _Gradient; | |
| 582 | protected void DrawCorners(Color c, Rectangle rect) | |
| 583 | {
| |
| 584 | if (_NoRounding) | |
| 585 | return; | |
| 586 | B.SetPixel(rect.X, rect.Y, c); | |
| 587 | B.SetPixel(rect.X + (rect.Width - 1), rect.Y, c); | |
| 588 | B.SetPixel(rect.X, rect.Y + (rect.Height - 1), c); | |
| 589 | B.SetPixel(rect.X + (rect.Width - 1), rect.Y + (rect.Height - 1), c); | |
| 590 | } | |
| 591 | ||
| 592 | protected void DrawBorders(Pen p1, Pen p2, Rectangle rect) | |
| 593 | {
| |
| 594 | G.DrawRectangle(p1, rect.X, rect.Y, rect.Width - 1, rect.Height - 1); | |
| 595 | G.DrawRectangle(p2, rect.X + 1, rect.Y + 1, rect.Width - 3, rect.Height - 3); | |
| 596 | } | |
| 597 | ||
| 598 | protected void DrawGradient(Color c1, Color c2, int x, int y, int width, int height, float angle) | |
| 599 | {
| |
| 600 | _Rectangle = new Rectangle(x, y, width, height); | |
| 601 | _Gradient = new LinearGradientBrush(_Rectangle, c1, c2, angle); | |
| 602 | G.FillRectangle(_Gradient, _Rectangle); | |
| 603 | } | |
| 604 | #endregion | |
| 605 | ||
| 606 | } | |
| 607 | ||
| 608 | class TxtBox : ThemeControl | |
| 609 | {
| |
| 610 | #region "lol" | |
| 611 | TextBox txtbox = new TextBox(); | |
| 612 | private bool _passmask = false; | |
| 613 | public bool UseSystemPasswordChar | |
| 614 | {
| |
| 615 | get { return _passmask; }
| |
| 616 | set | |
| 617 | {
| |
| 618 | txtbox.UseSystemPasswordChar = UseSystemPasswordChar; | |
| 619 | _passmask = value; | |
| 620 | Invalidate(); | |
| 621 | } | |
| 622 | } | |
| 623 | private int _maxchars = 32767; | |
| 624 | public int MaxLength | |
| 625 | {
| |
| 626 | get { return _maxchars; }
| |
| 627 | set | |
| 628 | {
| |
| 629 | _maxchars = value; | |
| 630 | txtbox.MaxLength = MaxLength; | |
| 631 | Invalidate(); | |
| 632 | } | |
| 633 | } | |
| 634 | private HorizontalAlignment _align; | |
| 635 | public HorizontalAlignment TextAlignment | |
| 636 | {
| |
| 637 | get { return _align; }
| |
| 638 | set | |
| 639 | {
| |
| 640 | _align = value; | |
| 641 | Invalidate(); | |
| 642 | } | |
| 643 | } | |
| 644 | ||
| 645 | protected override void OnPaintBackground(System.Windows.Forms.PaintEventArgs pevent) | |
| 646 | {
| |
| 647 | } | |
| 648 | protected override void OnTextChanged(System.EventArgs e) | |
| 649 | {
| |
| 650 | base.OnTextChanged(e); | |
| 651 | Invalidate(); | |
| 652 | } | |
| 653 | protected override void OnBackColorChanged(System.EventArgs e) | |
| 654 | {
| |
| 655 | base.OnBackColorChanged(e); | |
| 656 | txtbox.BackColor = BackColor; | |
| 657 | Invalidate(); | |
| 658 | } | |
| 659 | protected override void OnForeColorChanged(System.EventArgs e) | |
| 660 | {
| |
| 661 | base.OnForeColorChanged(e); | |
| 662 | txtbox.ForeColor = ForeColor; | |
| 663 | Invalidate(); | |
| 664 | } | |
| 665 | protected override void OnFontChanged(System.EventArgs e) | |
| 666 | {
| |
| 667 | base.OnFontChanged(e); | |
| 668 | txtbox.Font = Font; | |
| 669 | } | |
| 670 | protected override void OnGotFocus(System.EventArgs e) | |
| 671 | {
| |
| 672 | base.OnGotFocus(e); | |
| 673 | txtbox.Focus(); | |
| 674 | } | |
| 675 | public void // ERROR: Handles clauses are not supported in C# | |
| 676 | TextChngTxtBox() | |
| 677 | {
| |
| 678 | Text = txtbox.Text; | |
| 679 | } | |
| 680 | public void // ERROR: Handles clauses are not supported in C# | |
| 681 | TextChng() | |
| 682 | {
| |
| 683 | txtbox.Text = Text; | |
| 684 | } | |
| 685 | ||
| 686 | #endregion | |
| 687 | ||
| 688 | protected override void WndProc(ref Message m) | |
| 689 | {
| |
| 690 | switch (m.Msg) | |
| 691 | {
| |
| 692 | case 15: | |
| 693 | Invalidate(); | |
| 694 | base.WndProc(ref m); | |
| 695 | this.PaintHook(); | |
| 696 | break; // TODO: might not be correct. Was : Exit Select | |
| 697 | default: | |
| 698 | base.WndProc(ref m); | |
| 699 | break; // TODO: might not be correct. Was : Exit Select | |
| 700 | } | |
| 701 | } | |
| 702 | ||
| 703 | public TxtBox() | |
| 704 | : base() | |
| 705 | {
| |
| 706 | ||
| 707 | Controls.Add(txtbox); | |
| 708 | {
| |
| 709 | txtbox.Multiline = false; | |
| 710 | txtbox.BackColor = Color.FromArgb(0, 0, 0); | |
| 711 | txtbox.ForeColor = ForeColor; | |
| 712 | txtbox.Text = string.Empty; | |
| 713 | txtbox.TextAlign = HorizontalAlignment.Center; | |
| 714 | txtbox.BorderStyle = BorderStyle.None; | |
| 715 | txtbox.Location = new Point(5, 8); | |
| 716 | txtbox.Font = new Font("Arial", 8.25f, FontStyle.Bold);
| |
| 717 | txtbox.Size = new Size(Width - 8, Height - 11); | |
| 718 | txtbox.UseSystemPasswordChar = UseSystemPasswordChar; | |
| 719 | } | |
| 720 | ||
| 721 | Text = ""; | |
| 722 | ||
| 723 | DoubleBuffered = true; | |
| 724 | } | |
| 725 | ||
| 726 | public override void PaintHook() | |
| 727 | {
| |
| 728 | this.BackColor = Color.White; | |
| 729 | G.Clear(Parent.BackColor); | |
| 730 | Pen p = new Pen(Color.FromArgb(204, 204, 204), 1); | |
| 731 | Pen o = new Pen(Color.FromArgb(249, 249, 249), 8); | |
| 732 | G.FillPath(Brushes.White, Draw.RoundRect(new Rectangle(0, 0, Width - 1, Height - 1), 2)); | |
| 733 | G.DrawPath(o, Draw.RoundRect(new Rectangle(0, 0, Width - 1, Height - 1), 2)); | |
| 734 | G.DrawPath(p, Draw.RoundRect(new Rectangle(0, 0, Width - 1, Height - 1), 2)); | |
| 735 | Height = txtbox.Height + 16; | |
| 736 | Font drawFont = new Font("Tahoma", 9, FontStyle.Regular);
| |
| 737 | {
| |
| 738 | txtbox.Width = Width - 12; | |
| 739 | txtbox.ForeColor = Color.FromArgb(72, 72, 72); | |
| 740 | txtbox.Font = drawFont; | |
| 741 | txtbox.TextAlign = TextAlignment; | |
| 742 | txtbox.UseSystemPasswordChar = UseSystemPasswordChar; | |
| 743 | } | |
| 744 | DrawCorners(Parent.BackColor, ClientRectangle); | |
| 745 | } | |
| 746 | } | |
| 747 | ||
| 748 | class PanelBox : ThemeContainerControl | |
| 749 | {
| |
| 750 | public PanelBox() | |
| 751 | {
| |
| 752 | AllowTransparent(); | |
| 753 | } | |
| 754 | public override void PaintHook() | |
| 755 | {
| |
| 756 | this.Font = new Font("Tahoma", 10);
| |
| 757 | this.ForeColor = Color.FromArgb(40, 40, 40); | |
| 758 | G.SmoothingMode = SmoothingMode.AntiAlias; | |
| 759 | G.FillRectangle(new SolidBrush(Color.FromArgb(235, 235, 235)), new Rectangle(2, 0, Width, Height)); | |
| 760 | G.FillRectangle(new SolidBrush(Color.FromArgb(249, 249, 249)), new Rectangle(1, 0, Width - 3, Height - 4)); | |
| 761 | G.DrawRectangle(new Pen(Color.FromArgb(214, 214, 214)), 0, 0, Width - 2, Height - 3); | |
| 762 | } | |
| 763 | } | |
| 764 | class GroupDropBox : ThemeContainerControl | |
| 765 | {
| |
| 766 | private bool _Checked; | |
| 767 | private int X; | |
| 768 | private int y; | |
| 769 | private Size _OpenedSize; | |
| 770 | public bool Checked | |
| 771 | {
| |
| 772 | get { return _Checked; }
| |
| 773 | set | |
| 774 | {
| |
| 775 | _Checked = value; | |
| 776 | Invalidate(); | |
| 777 | } | |
| 778 | } | |
| 779 | public Size OpenSize | |
| 780 | {
| |
| 781 | get { return _OpenedSize; }
| |
| 782 | set | |
| 783 | {
| |
| 784 | _OpenedSize = value; | |
| 785 | Invalidate(); | |
| 786 | } | |
| 787 | } | |
| 788 | public GroupDropBox() | |
| 789 | {
| |
| 790 | ||
| 791 | AllowTransparent(); | |
| 792 | Size = new Size(90, 30); | |
| 793 | MinimumSize = new Size(5, 30); | |
| 794 | _Checked = true; | |
| 795 | this.Resize += new EventHandler(GroupDropBox_Resize); | |
| 796 | this.MouseDown += new MouseEventHandler(GroupDropBox_MouseDown); | |
| 797 | } | |
| 798 | public override void PaintHook() | |
| 799 | {
| |
| 800 | this.Font = new Font("Tahoma", 10);
| |
| 801 | this.ForeColor = Color.FromArgb(40, 40, 40); | |
| 802 | if (_Checked == true) | |
| 803 | {
| |
| 804 | G.SmoothingMode = SmoothingMode.AntiAlias; | |
| 805 | G.Clear(Color.FromArgb(245, 245, 245)); | |
| 806 | G.FillRectangle(new SolidBrush(Color.FromArgb(231, 231, 231)), new Rectangle(0, 0, Width, 30)); | |
| 807 | G.DrawLine(new Pen(Color.FromArgb(233, 238, 240)), 1, 1, Width - 2, 1); | |
| 808 | G.DrawRectangle(new Pen(Color.FromArgb(214, 214, 214)), 0, 0, Width - 1, Height - 1); | |
| 809 | G.DrawRectangle(new Pen(Color.FromArgb(214, 214, 214)), 0, 0, Width - 1, 30); | |
| 810 | this.Size = _OpenedSize; | |
| 811 | G.DrawString("t", new Font("Marlett", 12), new SolidBrush(this.ForeColor), Width - 25, 5);
| |
| 812 | } | |
| 813 | else | |
| 814 | {
| |
| 815 | G.SmoothingMode = SmoothingMode.AntiAlias; | |
| 816 | G.Clear(Color.FromArgb(245, 245, 245)); | |
| 817 | G.FillRectangle(new SolidBrush(Color.FromArgb(231, 231, 231)), new Rectangle(0, 0, Width, 30)); | |
| 818 | G.DrawLine(new Pen(Color.FromArgb(231, 236, 238)), 1, 1, Width - 2, 1); | |
| 819 | G.DrawRectangle(new Pen(Color.FromArgb(214, 214, 214)), 0, 0, Width - 1, Height - 1); | |
| 820 | G.DrawRectangle(new Pen(Color.FromArgb(214, 214, 214)), 0, 0, Width - 1, 30); | |
| 821 | this.Size = new Size(Width, 30); | |
| 822 | G.DrawString("u", new Font("Marlett", 12), new SolidBrush(this.ForeColor), Width - 25, 5);
| |
| 823 | } | |
| 824 | G.DrawString(Text, Font, new SolidBrush(this.ForeColor), 7, 6); | |
| 825 | } | |
| 826 | ||
| 827 | private void GroupDropBox_Resize(object sender, System.EventArgs e) | |
| 828 | {
| |
| 829 | if (_Checked == true) | |
| 830 | {
| |
| 831 | _OpenedSize = this.Size; | |
| 832 | } | |
| 833 | } | |
| 834 | ||
| 835 | ||
| 836 | protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e) | |
| 837 | {
| |
| 838 | base.OnMouseMove(e); | |
| 839 | X = e.X; | |
| 840 | y = e.Y; | |
| 841 | Invalidate(); | |
| 842 | } | |
| 843 | ||
| 844 | ||
| 845 | private void GroupDropBox_MouseDown(object sender, MouseEventArgs e) | |
| 846 | {
| |
| 847 | ||
| 848 | if (X >= Width - 22) | |
| 849 | {
| |
| 850 | if (y <= 30) | |
| 851 | {
| |
| 852 | switch (Checked) | |
| 853 | {
| |
| 854 | case true: | |
| 855 | Checked = false; | |
| 856 | break; | |
| 857 | case false: | |
| 858 | Checked = true; | |
| 859 | break; | |
| 860 | } | |
| 861 | } | |
| 862 | } | |
| 863 | } | |
| 864 | } | |
| 865 | class GroupPanelBox : ThemeContainerControl | |
| 866 | {
| |
| 867 | public GroupPanelBox() | |
| 868 | {
| |
| 869 | AllowTransparent(); | |
| 870 | } | |
| 871 | public override void PaintHook() | |
| 872 | {
| |
| 873 | this.Font = new Font("Tahoma", 10);
| |
| 874 | this.ForeColor = Color.FromArgb(40, 40, 40); | |
| 875 | G.SmoothingMode = SmoothingMode.AntiAlias; | |
| 876 | G.Clear(Color.FromArgb(245, 245, 245)); | |
| 877 | G.FillRectangle(new SolidBrush(Color.FromArgb(231, 231, 231)), new Rectangle(0, 0, Width, 30)); | |
| 878 | G.DrawLine(new Pen(Color.FromArgb(233, 238, 240)), 1, 1, Width - 2, 1); | |
| 879 | G.DrawRectangle(new Pen(Color.FromArgb(214, 214, 214)), 0, 0, Width - 1, Height - 1); | |
| 880 | G.DrawRectangle(new Pen(Color.FromArgb(214, 214, 214)), 0, 0, Width - 1, 30); | |
| 881 | G.DrawString(Text, Font, new SolidBrush(this.ForeColor), 7, 6); | |
| 882 | } | |
| 883 | } | |
| 884 | ||
| 885 | class ButtonGreen : ThemeControl | |
| 886 | {
| |
| 887 | public override void PaintHook() | |
| 888 | {
| |
| 889 | this.Font = new Font("Arial", 10);
| |
| 890 | G.Clear(this.BackColor); | |
| 891 | G.SmoothingMode = SmoothingMode.HighQuality; | |
| 892 | switch (MouseState) | |
| 893 | {
| |
| 894 | case State.MouseNone: | |
| 895 | Pen p1 = new Pen(Color.FromArgb(120, 159, 22), 1); | |
| 896 | LinearGradientBrush x1 = new LinearGradientBrush(ClientRectangle, Color.FromArgb(157, 209, 57), Color.FromArgb(130, 181, 18), LinearGradientMode.Vertical); | |
| 897 | G.FillPath(x1, Draw.RoundRect(ClientRectangle, 4)); | |
| 898 | G.DrawPath(p1, Draw.RoundRect(new Rectangle(0, 0, Width - 1, Height - 1), 3)); | |
| 899 | G.DrawLine(new Pen(Color.FromArgb(190, 232, 109)), 2, 1, Width - 3, 1); | |
| 900 | DrawText(HorizontalAlignment.Center, Color.FromArgb(240, 240, 240), 0); | |
| 901 | break; | |
| 902 | case State.MouseDown: | |
| 903 | Pen p2 = new Pen(Color.FromArgb(120, 159, 22), 1); | |
| 904 | LinearGradientBrush x2 = new LinearGradientBrush(ClientRectangle, Color.FromArgb(125, 171, 25), Color.FromArgb(142, 192, 40), LinearGradientMode.Vertical); | |
| 905 | G.FillPath(x2, Draw.RoundRect(ClientRectangle, 4)); | |
| 906 | G.DrawPath(p2, Draw.RoundRect(new Rectangle(0, 0, Width - 1, Height - 1), 3)); | |
| 907 | G.DrawLine(new Pen(Color.FromArgb(142, 172, 30)), 2, 1, Width - 3, 1); | |
| 908 | DrawText(HorizontalAlignment.Center, Color.FromArgb(250, 250, 250), 1); | |
| 909 | break; | |
| 910 | case State.MouseOver: | |
| 911 | Pen p3 = new Pen(Color.FromArgb(120, 159, 22), 1); | |
| 912 | LinearGradientBrush x3 = new LinearGradientBrush(ClientRectangle, Color.FromArgb(165, 220, 59), Color.FromArgb(137, 191, 18), LinearGradientMode.Vertical); | |
| 913 | G.FillPath(x3, Draw.RoundRect(ClientRectangle, 4)); | |
| 914 | G.DrawPath(p3, Draw.RoundRect(new Rectangle(0, 0, Width - 1, Height - 1), 3)); | |
| 915 | G.DrawLine(new Pen(Color.FromArgb(190, 232, 109)), 2, 1, Width - 3, 1); | |
| 916 | DrawText(HorizontalAlignment.Center, Color.FromArgb(240, 240, 240), -1); | |
| 917 | break; | |
| 918 | } | |
| 919 | this.Cursor = Cursors.Hand; | |
| 920 | } | |
| 921 | } | |
| 922 | class ButtonBlue : ThemeControl | |
| 923 | {
| |
| 924 | public override void PaintHook() | |
| 925 | {
| |
| 926 | this.Font = new Font("Arial", 10);
| |
| 927 | G.Clear(this.BackColor); | |
| 928 | G.SmoothingMode = SmoothingMode.HighQuality; | |
| 929 | switch (MouseState) | |
| 930 | {
| |
| 931 | case State.MouseNone: | |
| 932 | Pen p = new Pen(Color.FromArgb(34, 112, 171), 1); | |
| 933 | LinearGradientBrush x = new LinearGradientBrush(ClientRectangle, Color.FromArgb(51, 159, 231), Color.FromArgb(33, 128, 206), LinearGradientMode.Vertical); | |
| 934 | G.FillPath(x, Draw.RoundRect(ClientRectangle, 4)); | |
| 935 | G.DrawPath(p, Draw.RoundRect(new Rectangle(0, 0, Width - 1, Height - 1), 3)); | |
| 936 | G.DrawLine(new Pen(Color.FromArgb(131, 197, 241)), 2, 1, Width - 3, 1); | |
| 937 | DrawText(HorizontalAlignment.Center, Color.FromArgb(240, 240, 240), 0); | |
| 938 | break; | |
| 939 | case State.MouseDown: | |
| 940 | Pen p1 = new Pen(Color.FromArgb(34, 112, 171), 1); | |
| 941 | LinearGradientBrush x1 = new LinearGradientBrush(ClientRectangle, Color.FromArgb(37, 124, 196), Color.FromArgb(53, 153, 219), LinearGradientMode.Vertical); | |
| 942 | G.FillPath(x1, Draw.RoundRect(ClientRectangle, 4)); | |
| 943 | G.DrawPath(p1, Draw.RoundRect(new Rectangle(0, 0, Width - 1, Height - 1), 3)); | |
| 944 | ||
| 945 | DrawText(HorizontalAlignment.Center, Color.FromArgb(250, 250, 250), 1); | |
| 946 | break; | |
| 947 | case State.MouseOver: | |
| 948 | Pen p2 = new Pen(Color.FromArgb(34, 112, 171), 1); | |
| 949 | LinearGradientBrush x2 = new LinearGradientBrush(ClientRectangle, Color.FromArgb(54, 167, 243), Color.FromArgb(35, 165, 217), LinearGradientMode.Vertical); | |
| 950 | G.FillPath(x2, Draw.RoundRect(ClientRectangle, 4)); | |
| 951 | G.DrawPath(p2, Draw.RoundRect(new Rectangle(0, 0, Width - 1, Height - 1), 3)); | |
| 952 | G.DrawLine(new Pen(Color.FromArgb(131, 197, 241)), 2, 1, Width - 3, 1); | |
| 953 | DrawText(HorizontalAlignment.Center, Color.FromArgb(240, 240, 240), -1); | |
| 954 | break; | |
| 955 | } | |
| 956 | this.Cursor = Cursors.Hand; | |
| 957 | } | |
| 958 | } |