| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- using System.Drawing.Drawing2D;
- namespace TravelAgencyWinForms.Utils;
- public static class AppTheme
- {
- public static Color Background => Color.FromArgb(243, 251, 248);
- public static Color Surface => Color.White;
- public static Color SurfaceAlt => Color.FromArgb(234, 247, 243);
- public static Color Primary => Color.FromArgb(129, 203, 188);
- public static Color PrimaryDark => Color.FromArgb(54, 121, 111);
- public static Color PrimarySoft => Color.FromArgb(214, 240, 233);
- public static Color Border => Color.FromArgb(202, 227, 220);
- public static Color Text => Color.FromArgb(44, 67, 62);
- public static Color Muted => Color.FromArgb(99, 127, 121);
- public static Color Danger => Color.FromArgb(205, 110, 110);
- public static void ApplyForm(Form form, bool dialog = false)
- {
- form.BackColor = Background;
- form.Font = new Font("Segoe UI", 10F, FontStyle.Regular, GraphicsUnit.Point);
- form.ForeColor = Text;
- if (dialog)
- form.FormBorderStyle = FormBorderStyle.FixedDialog;
- }
- public static void StylePrimaryButton(Button button)
- {
- StyleButton(button, Primary, PrimaryDark, Color.White);
- }
- public static void StyleSecondaryButton(Button button)
- {
- StyleButton(button, Surface, Border, Text);
- }
- public static void StyleSelectedButton(Button button)
- {
- StyleButton(button, Primary, PrimaryDark, Color.White);
- }
- public static void StyleDangerButton(Button button)
- {
- StyleButton(button, Color.FromArgb(251, 235, 235), Danger, Danger);
- }
- private static void StyleButton(Button button, Color backColor, Color borderColor, Color foreColor)
- {
- button.FlatStyle = FlatStyle.Flat;
- button.FlatAppearance.BorderSize = 1;
- button.FlatAppearance.BorderColor = borderColor;
- button.BackColor = backColor;
- button.ForeColor = foreColor;
- button.Cursor = Cursors.Hand;
- button.Margin = new Padding(4);
- button.Padding = new Padding(8, 4, 8, 4);
- button.AutoSize = false;
- }
- public static void StyleMenuButton(Button button)
- {
- button.FlatStyle = FlatStyle.Flat;
- button.FlatAppearance.BorderSize = 0;
- button.BackColor = Color.Transparent;
- button.ForeColor = Color.White;
- button.Cursor = Cursors.Hand;
- button.TextAlign = ContentAlignment.MiddleLeft;
- button.Font = new Font("Segoe UI Semibold", 10F, FontStyle.Regular, GraphicsUnit.Point);
- button.Padding = new Padding(16, 0, 0, 0);
- }
- public static void StyleTextBox(TextBox textBox)
- {
- textBox.BorderStyle = BorderStyle.FixedSingle;
- textBox.BackColor = Color.White;
- textBox.ForeColor = Text;
- textBox.Margin = new Padding(4);
- }
- public static void StyleComboBox(ComboBox comboBox)
- {
- comboBox.FlatStyle = FlatStyle.Flat;
- comboBox.BackColor = Color.White;
- comboBox.ForeColor = Text;
- comboBox.Margin = new Padding(4);
- }
- public static void StyleGrid(DataGridView grid)
- {
- grid.BackgroundColor = Surface;
- grid.BorderStyle = BorderStyle.None;
- grid.GridColor = Border;
- grid.EnableHeadersVisualStyles = false;
- grid.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;
- grid.ColumnHeadersDefaultCellStyle.BackColor = PrimarySoft;
- grid.ColumnHeadersDefaultCellStyle.ForeColor = Text;
- grid.ColumnHeadersDefaultCellStyle.SelectionBackColor = Primary;
- grid.ColumnHeadersDefaultCellStyle.SelectionForeColor = Color.White;
- grid.ColumnHeadersDefaultCellStyle.Font = new Font("Segoe UI Semibold", 10F);
- grid.DefaultCellStyle.SelectionBackColor = Color.FromArgb(224, 244, 239);
- grid.DefaultCellStyle.SelectionForeColor = Text;
- grid.DefaultCellStyle.BackColor = Color.White;
- grid.DefaultCellStyle.ForeColor = Text;
- grid.DefaultCellStyle.WrapMode = DataGridViewTriState.False;
- grid.AlternatingRowsDefaultCellStyle.BackColor = Color.FromArgb(249, 253, 252);
- grid.RowHeadersVisible = false;
- grid.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None;
- grid.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
- grid.MultiSelect = false;
- grid.AllowUserToResizeRows = false;
- grid.AllowUserToAddRows = false;
- grid.AllowUserToDeleteRows = false;
- grid.ReadOnly = true;
- }
- public static Panel CreateCard(string title, string value, string? subtitle = null)
- {
- var panel = new Panel
- {
- Width = 220,
- Height = 108,
- BackColor = Surface,
- BorderStyle = BorderStyle.FixedSingle,
- Margin = new Padding(6),
- Padding = new Padding(14)
- };
- var titleLabel = new Label
- {
- Text = title,
- Dock = DockStyle.Top,
- Height = 22,
- ForeColor = Muted,
- Font = new Font("Segoe UI", 9.5F, FontStyle.Regular)
- };
- var valueLabel = new Label
- {
- Text = value,
- Dock = DockStyle.Top,
- Height = 38,
- ForeColor = Text,
- Font = new Font("Segoe UI Semibold", 20F, FontStyle.Regular)
- };
- panel.Controls.Add(valueLabel);
- panel.Controls.Add(titleLabel);
- if (!string.IsNullOrWhiteSpace(subtitle))
- {
- var subtitleLabel = new Label
- {
- Text = subtitle,
- Dock = DockStyle.Bottom,
- Height = 18,
- ForeColor = Muted,
- Font = new Font("Segoe UI", 8.5F, FontStyle.Regular)
- };
- panel.Controls.Add(subtitleLabel);
- }
- return panel;
- }
- public static GroupBox CreateSection(string title)
- {
- return new GroupBox
- {
- Text = title,
- Dock = DockStyle.Fill,
- Padding = new Padding(12),
- ForeColor = Text,
- Font = new Font("Segoe UI Semibold", 10F, FontStyle.Regular)
- };
- }
- public static PictureBox CreatePictureBox(Image image, Size size)
- {
- return new PictureBox
- {
- Image = image,
- SizeMode = PictureBoxSizeMode.Zoom,
- Size = size,
- BackColor = Color.Transparent
- };
- }
- public static Panel CreateHeaderPanel(string title, string subtitle)
- {
- var panel = new Panel
- {
- Height = 86,
- Dock = DockStyle.Top,
- BackColor = Surface,
- Padding = new Padding(20, 16, 20, 16),
- Margin = new Padding(0, 0, 0, 10),
- BorderStyle = BorderStyle.FixedSingle
- };
- var titleLabel = new Label
- {
- Text = title,
- Dock = DockStyle.Top,
- Height = 30,
- Font = new Font("Segoe UI Semibold", 18F, FontStyle.Regular),
- ForeColor = Text
- };
- var subtitleLabel = new Label
- {
- Text = subtitle,
- Dock = DockStyle.Fill,
- Font = new Font("Segoe UI", 9.5F, FontStyle.Regular),
- ForeColor = Muted
- };
- panel.Controls.Add(subtitleLabel);
- panel.Controls.Add(titleLabel);
- return panel;
- }
- public static Image? LoadImage(string fileName)
- {
- var candidates = new[]
- {
- Path.Combine(AppContext.BaseDirectory, "Assets", fileName),
- Path.Combine(Application.StartupPath, "Assets", fileName),
- Path.Combine(AppContext.BaseDirectory, fileName),
- Path.Combine(Directory.GetCurrentDirectory(), "Assets", fileName),
- Path.Combine(Directory.GetCurrentDirectory(), "TravelAgencyWinForms", "Assets", fileName)
- };
- foreach (var path in candidates)
- {
- if (!File.Exists(path))
- continue;
- using var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
- using var image = Image.FromStream(stream);
- return new Bitmap(image);
- }
- return null;
- }
- }
|