namespace Lunar.Evil_Calculator { public partial class CalculatorBody : Form { private bool mouseDown; private bool onTop; private Point lastLocation; private static Color LunarGray = ColorTranslator.FromHtml("#2b292d"); private static Color LunarOrange = ColorTranslator.FromHtml("#ff8700"); private Form CalculatorPanel = new(); private EquationManager equationManager = new(); public CalculatorBody() { InitializeComponent(); BackColor = LunarGray; Opacity = 0.9; FormBorderStyle = FormBorderStyle.None; ClientSize = new Size(300, 500); Text = "Calculator"; MyTitleBar(); } protected override void OnShown(EventArgs e) { base.OnShown(e); CalculatorPanelInit(); } protected override void OnMove(EventArgs e) { base.OnMove(e); if (OwnedForms.Length > 0) { var p = PointToScreen(new Point(0, 30)); var dx = p.X - OwnedForms[0].Location.X; var dy = p.Y - OwnedForms[0].Location.Y; foreach (var f in OwnedForms) f.Location = new Point(f.Location.X + dx, f.Location.Y + dy); } } private void MyTitleBar() { Panel TitleBar = new Panel { Height = 30, Dock = DockStyle.Top, Visible = true }; TitleBar.MouseDown += TitleBar_MouseDown; TitleBar.MouseMove += TitleBar_MouseMove; TitleBar.MouseUp += TitleBar_MouseUp; Controls.Add(TitleBar); Button ButtonMinimize = new Button { Text = "_", Width = 40, Height = TitleBar.Height, Dock = DockStyle.Right, FlatStyle = FlatStyle.Flat, ForeColor = Color.White }; ButtonMinimize.FlatAppearance.BorderSize = 0; ButtonMinimize.FlatAppearance.BorderColor = LunarGray; ButtonMinimize.Click += (s, e) => WindowState = FormWindowState.Minimized; TitleBar.Controls.Add(ButtonMinimize); Button ButtonMaximize = new Button { Text = "□", Width = 40, Height = TitleBar.Height, Dock = DockStyle.Right, FlatStyle = FlatStyle.Flat, ForeColor = Color.White }; ButtonMaximize.FlatAppearance.BorderSize = 0; ButtonMaximize.FlatAppearance.BorderColor = LunarGray; ButtonMaximize.Click += (s, e) => { WindowState = (WindowState == FormWindowState.Normal) ? FormWindowState.Maximized : FormWindowState.Normal; }; TitleBar.Controls.Add(ButtonMaximize); Button ButtonClose = new Button { Text = "X", Width = 40, Height = TitleBar.Height, Dock = DockStyle.Right, FlatStyle = FlatStyle.Flat, ForeColor = Color.White }; ButtonClose.FlatAppearance.BorderSize = 0; ButtonClose.FlatAppearance.BorderColor = LunarGray; ButtonClose.Click += (s, e) => Close(); TitleBar.Controls.Add(ButtonClose); Label titleLabel = new Label { Text = Text, Location = new Point(8, 7), AutoSize = true, ForeColor = Color.White }; TitleBar.Controls.Add(titleLabel); void TitleBar_MouseDown(object? sender, MouseEventArgs e) { mouseDown = true; lastLocation = e.Location; } void TitleBar_MouseMove(object? sender, MouseEventArgs e) { if (mouseDown) { Location = new Point( (Location.X - lastLocation.X) + e.X, (Location.Y - lastLocation.Y) + e.Y); Update(); } } void TitleBar_MouseUp(object? sender, MouseEventArgs e) { mouseDown = false; } void Titlebar_BaseTextChanged(object? sender, EventArgs e) { titleLabel.Text = Text; } TextChanged += Titlebar_BaseTextChanged; } private void CalculatorPanelInit() { CalculatorPanel.FormBorderStyle = FormBorderStyle.None; CalculatorPanel.BackColor = Color.Gray; CalculatorPanel.TransparencyKey = CalculatorPanel.BackColor; CalculatorPanel.StartPosition = FormStartPosition.Manual; CalculatorPanel.DesktopLocation = new Point(Location.X, Location.Y + 30); CalculatorPanel.ClientSize = new Size(Size.Width, Size.Height - 30); CalculatorPanel.Owner = this; CalculatorPanel.ShowInTaskbar = false; CalculatorButton buttonZero = new CalculatorButton("0", new Point(90, 410), CalculatorPanel, equationManager); CalculatorButton buttonOne = new CalculatorButton("1", new Point(20, 360), CalculatorPanel, equationManager); CalculatorButton buttonTwo = new CalculatorButton("2", new Point(90, 360), CalculatorPanel, equationManager); CalculatorButton buttonThree = new CalculatorButton("3", new Point(160, 360), CalculatorPanel, equationManager); CalculatorButton buttonFour = new CalculatorButton("4", new Point(20, 310), CalculatorPanel, equationManager); CalculatorButton buttonFive = new CalculatorButton("5", new Point(90, 310), CalculatorPanel, equationManager); CalculatorButton buttonSix = new CalculatorButton("6", new Point(160, 310), CalculatorPanel, equationManager); CalculatorButton buttonSeven = new CalculatorButton("7", new Point(20, 260), CalculatorPanel, equationManager); CalculatorButton buttonEight = new CalculatorButton("8", new Point(90, 260), CalculatorPanel, equationManager); CalculatorButton buttonNine = new CalculatorButton("9", new Point(160, 260), CalculatorPanel, equationManager); CalculatorButton buttonLeftBracket = new CalculatorButton("(", new Point(160, 160), CalculatorPanel, equationManager); CalculatorButton buttonRightBracket = new CalculatorButton(")", new Point(230, 160), CalculatorPanel, equationManager); CalculatorButton buttonClear = new CalculatorButton("C", new Point(20, 160), CalculatorPanel, equationManager); CalculatorButton buttonClearEverything = new CalculatorButton("CE", new Point(90, 160), CalculatorPanel, equationManager); CalculatorButton buttonPowerX = new CalculatorButton("xˣ", new Point(20, 210), CalculatorPanel, equationManager); CalculatorButton buttonPowerTwo = new CalculatorButton("x²", new Point(90, 210), CalculatorPanel, equationManager); CalculatorButton buttonSquareRoot = new CalculatorButton("√", new Point(160, 210), CalculatorPanel, equationManager); CalculatorButton buttonDivide = new CalculatorButton("/", new Point(230, 210), CalculatorPanel, equationManager); CalculatorButton buttonMultiply = new CalculatorButton("*", new Point(230, 260), CalculatorPanel, equationManager); CalculatorButton buttonMinus = new CalculatorButton("-", new Point(230, 310), CalculatorPanel, equationManager); CalculatorButton buttonPlus = new CalculatorButton("+", new Point(230, 360), CalculatorPanel, equationManager); CalculatorButton buttonComma = new CalculatorButton(",", new Point(160, 410), CalculatorPanel, equationManager); EqualsButton equalsButton = new EqualsButton(new Point(230, 410), CalculatorPanel, equationManager); ToggleTopButton toggleTopButton = new ToggleTopButton(new Point(20, 410), CalculatorPanel); toggleTopButton.Click += ToggleTopButton_Click; Label equationTextBox = new Label(); equationTextBox.Location = new Point(20, 20); equationTextBox.ClientSize = new Size(260, 80); equationTextBox.TextAlign = ContentAlignment.TopRight; equationTextBox.Font = new Font("Arial", 16); equationTextBox.ForeColor = Color.White; CalculatorPanel.Controls.Add(equationTextBox); Label currentOperandTextBox = new Label(); currentOperandTextBox.Text = "0"; currentOperandTextBox.Location = new Point(20, 100); currentOperandTextBox.ClientSize = new Size(260, 30); currentOperandTextBox.TextAlign = ContentAlignment.TopRight; currentOperandTextBox.Font = new Font("Arial", 20); currentOperandTextBox.ForeColor = Color.White; CalculatorPanel.Controls.Add(currentOperandTextBox); equationManager.AcquireOutputLabels(equationTextBox, currentOperandTextBox); CalculatorPanel.Show(); void ToggleTopButton_Click(object? sender, EventArgs e) { Text = onTop ? "Calculator" : "Calculator [pinned]"; onTop = !onTop; TopMost = !TopMost; CalculatorPanel.TopMost = !CalculatorPanel.TopMost; } } private class CalculatorButton : Button { public CalculatorButton(string Text, Point Location, Form Panel, EquationManager equationManager) { this.Text = Text; Font = new Font("Arial", 12); this.Location = Location; Width = 50; Height = 40; FlatStyle = FlatStyle.Flat; BackColor = LunarGray; FlatAppearance.BorderSize = 0; FlatAppearance.BorderColor = LunarGray; ForeColor = Color.White; Click += equationManager.ProcessButtonInput; Panel.Controls.Add(this); } } private class EqualsButton : Button { public EqualsButton(Point Location, Form Panel, EquationManager equationManager) { Text = "="; Font = new Font("Arial", 12); this.Location = Location; Width = 50; Height = 40; FlatStyle = FlatStyle.Flat; BackColor = LunarOrange; FlatAppearance.BorderSize = 0; FlatAppearance.BorderColor = LunarOrange; ForeColor = Color.White; Click += equationManager.EqualsButtonPressed; Panel.Controls.Add(this); } } private class ToggleTopButton : Button { public ToggleTopButton(Point Location, Form Panel) { Text = "Toggle\ntop"; Font = new Font("Arial", 7); this.Location = Location; Width = 50; Height = 40; FlatStyle = FlatStyle.Flat; BackColor = LunarGray; FlatAppearance.BorderSize = 0; FlatAppearance.BorderColor = LunarGray; ForeColor = Color.White; Panel.Controls.Add(this); } } } }