MainForm.cs 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Drawing.Drawing2D;
  5. using System.IO;
  6. using System.Threading;
  7. using System.Threading.Tasks;
  8. using System.Windows.Forms;
  9. namespace quick_color_picker
  10. {
  11. public partial class MainForm : Form
  12. {
  13. private Pen aimPen = new Pen(Color.Red, 1);
  14. private Color aimColor;
  15. private bool alwaysOnTop = true;
  16. private bool anotherFormat = false;
  17. private bool darkMode;
  18. private List<string> colors = new List<string>();
  19. private enum KeyModifier
  20. {
  21. None = 0,
  22. Alt = 1,
  23. Control = 2,
  24. Shift = 4,
  25. WinKey = 8
  26. }
  27. public MainForm(bool darkMode)
  28. {
  29. this.darkMode = darkMode;
  30. if (darkMode)
  31. {
  32. this.HandleCreated += new EventHandler(ThemeManager.formHandleCreated);
  33. }
  34. InitializeComponent();
  35. copyTooltip.SetToolTip(rgbCopyButton, "Copy value");
  36. copyTooltip.SetToolTip(htmlCopyButton, "Copy value");
  37. copyTooltip.SetToolTip(cmykCopyButton, "Copy value");
  38. copyTooltip.SetToolTip(hslCopyButton, "Copy value");
  39. copyTooltip.SetToolTip(rgbOneCopyButton, "Copy value");
  40. copyTooltip.SetToolTip(hsvCopyButton, "Copy value");
  41. copyTooltip.SetToolTip(renameButton, "Rename selected color");
  42. toolStrip1.Renderer = new ToolStripOverride();
  43. renameTextBox.AutoSize = false;
  44. renameTextBox.Height = 20;
  45. if (darkMode)
  46. {
  47. applyDarkTheme();
  48. }
  49. }
  50. private void CaptureScreen()
  51. {
  52. try
  53. {
  54. Bitmap bmp = new Bitmap(120, 120);
  55. using (Graphics g = Graphics.FromImage(bmp))
  56. {
  57. g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
  58. g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
  59. g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighSpeed;
  60. g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
  61. g.CopyFromScreen(
  62. Cursor.Position.X - 20,
  63. Cursor.Position.Y - 20, 0, 0,
  64. new Size(40, 40)
  65. );
  66. Bitmap scaledBmp = new Bitmap(bmp, 120, 120);
  67. g.Clear(Color.Black);
  68. g.DrawImage(scaledBmp, 0, 0, 360, 360);
  69. scaledBmp.Dispose();
  70. if (aimPictureBox.Image != null) aimPictureBox.Image.Dispose();
  71. aimPictureBox.Image = bmp;
  72. aimColor = bmp.GetPixel(aimPictureBox.Width / 2, aimPictureBox.Height / 2);
  73. colorPanel.BackColor = aimColor;
  74. g.DrawLine(aimPen, 0, aimPictureBox.Height / 2, aimPictureBox.Width, aimPictureBox.Height / 2);
  75. g.DrawLine(aimPen, aimPictureBox.Width / 2, 0, aimPictureBox.Height / 2, aimPictureBox.Height);
  76. }
  77. xLabel.Invoke((MethodInvoker)(() => xLabel.Text = "X: " + Cursor.Position.X));
  78. yLabel.Invoke((MethodInvoker)(() => yLabel.Text = "Y: " + Cursor.Position.Y));
  79. rgbStatusLabel.GetCurrentParent().Invoke((MethodInvoker)(() => rgbStatusLabel.Text = "RGB: " + aimColor.R + ", " + aimColor.G + ", " + aimColor.B));
  80. hexStatusLabel.GetCurrentParent().Invoke((MethodInvoker)(() => hexStatusLabel.Text = "HEX: " + ColorTranslator.ToHtml(aimColor).ToString()));
  81. this.Invoke((MethodInvoker)(() => this.Text = aimColor.R + ", " + aimColor.G + ", " + aimColor.B + " - Quick Color Picker"));
  82. }
  83. catch
  84. {
  85. }
  86. }
  87. [System.Runtime.InteropServices.DllImport("user32.dll")]
  88. public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk);
  89. [System.Runtime.InteropServices.DllImport("user32.dll")]
  90. public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
  91. private void MainForm_Load(object sender, EventArgs e)
  92. {
  93. RegisterHotKey(this.Handle, 0, (int)KeyModifier.Alt, Keys.X.GetHashCode());
  94. RegisterHotKey(this.Handle, 1, (int)KeyModifier.Alt, Keys.C.GetHashCode());
  95. Task task = new Task(() =>
  96. {
  97. while (true)
  98. {
  99. CaptureScreen();
  100. Thread.Sleep(100);
  101. }
  102. });
  103. task.Start();
  104. LoadColorList();
  105. checkForUpdates(false);
  106. setAlwaysOnTop(Properties.Settings.Default.AlwaysOnTop, false);
  107. setAnotherFormat(Properties.Settings.Default.AnotherFormat, false);
  108. }
  109. protected override void WndProc(ref Message m)
  110. {
  111. base.WndProc(ref m);
  112. if (m.Msg == 0x0312)
  113. {
  114. Keys key = (Keys)(((int)m.LParam >> 16) & 0xFFFF);
  115. KeyModifier modifier = (KeyModifier)((int)m.LParam & 0xFFFF);
  116. if (modifier == KeyModifier.Alt)
  117. {
  118. if (key == Keys.X)
  119. {
  120. GetColor();
  121. }
  122. else if (key == Keys.C)
  123. {
  124. CopyColor();
  125. }
  126. }
  127. }
  128. }
  129. private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
  130. {
  131. UnregisterHotKey(this.Handle, 0);
  132. }
  133. private void CopyColor()
  134. {
  135. Clipboard.SetText(this.Text = aimColor.R + ", " + aimColor.G + ", " + aimColor.B);
  136. }
  137. private void GetColor()
  138. {
  139. AddColor(aimColor);
  140. colorList.SetSelected(colorList.Items.Count - 1, true);
  141. SaveColorList();
  142. SaveColorNames();
  143. }
  144. private void AddColor(Color c)
  145. {
  146. colors.Add(c.R + ", " + c.G + ", " + c.B);
  147. colorList.Items.Add(c.R + ", " + c.G + ", " + c.B);
  148. }
  149. private void AddColor(string color, string name)
  150. {
  151. try
  152. {
  153. ColorManager.TextToColor(color);
  154. colors.Add(color);
  155. colorList.Items.Add(name);
  156. }
  157. catch
  158. {
  159. }
  160. }
  161. private void colorList_DrawItem(object sender, DrawItemEventArgs e)
  162. {
  163. if (e.Index != -1)
  164. {
  165. e.DrawBackground();
  166. int itemIndex = e.Index;
  167. string itemText = colorList.Items[itemIndex].ToString();
  168. string colorText = colors[itemIndex]; ;
  169. if (itemIndex >= 0 && itemIndex < colorList.Items.Count)
  170. {
  171. Graphics g = e.Graphics;
  172. Color c = ColorManager.TextToColor(colorText);
  173. // Background color
  174. SolidBrush backgroundColorBrush = new SolidBrush(c);
  175. g.FillRectangle(backgroundColorBrush, e.Bounds);
  176. // Item text
  177. SolidBrush itemTextColorBrush;
  178. if (c.GetBrightness() > 0.5)
  179. {
  180. itemTextColorBrush = new SolidBrush(Color.Black);
  181. }
  182. else
  183. {
  184. itemTextColorBrush = new SolidBrush(Color.White);
  185. }
  186. if (e.Index == colorList.SelectedIndex)
  187. {
  188. Font f = new Font(e.Font, FontStyle.Bold);
  189. Point p = new Point(
  190. colorList.GetItemRectangle(itemIndex).Location.X + 10,
  191. colorList.GetItemRectangle(itemIndex).Location.Y
  192. );
  193. g.DrawString(itemText, f, itemTextColorBrush, p);
  194. }
  195. else
  196. {
  197. g.DrawString(itemText, e.Font, itemTextColorBrush, colorList.GetItemRectangle(itemIndex).Location);
  198. }
  199. // Clean up
  200. backgroundColorBrush.Dispose();
  201. itemTextColorBrush.Dispose();
  202. }
  203. }
  204. }
  205. private void colorList_SelectedIndexChanged(object sender, EventArgs e)
  206. {
  207. if (colorList.SelectedIndex != -1)
  208. {
  209. deleteButton.Enabled = true;
  210. renameButton.Enabled = true;
  211. renameTextBox.Enabled = true;
  212. renameTextBox.Text = colorList.Items[colorList.SelectedIndex].ToString();
  213. string t = colors[colorList.SelectedIndex];
  214. Color c = ColorManager.TextToColor(t);
  215. string htmlText = ColorTranslator.ToHtml(c).ToString();
  216. int[] cmyk = ColorManager.ColorToCMYK(c);
  217. int[] hsl = ColorManager.ColorToHSL(c);
  218. int[] hsv = ColorManager.ColorToHSV(c);
  219. double rOne = c.R / (double)255;
  220. double gOne = c.G / (double)255;
  221. double bOne = c.B / (double)255;
  222. if (anotherFormat)
  223. {
  224. rgbTextBox.Text = "rgb(" + c.R + ", " + c.G + ", " + c.B + ")";
  225. htmlTextBox.Text = "0x" + htmlText.Substring(1, htmlText.Length - 1);
  226. cmykTextBox.Text = "cmyk(" + cmyk[0] + "%, " + cmyk[1] + "%, " + cmyk[2] + "%, " + cmyk[3] + "%)";
  227. hslTextBox.Text = "hsl(" + hsl[0] + ", " + hsl[1] + "%, " + hsl[2] + "%)";
  228. rgbOneTextBox.Text = rOne.ToString("0.####") + " / " + gOne.ToString("0.####") + " / " + bOne.ToString("0.####");
  229. hsvTextBox.Text = hsv[0] + "°, " + hsv[1] + "%, " + hsv[2] + "%";
  230. }
  231. else
  232. {
  233. rgbTextBox.Text = t;
  234. htmlTextBox.Text = htmlText;
  235. cmykTextBox.Text = cmyk[0] + ", " + cmyk[1] + ", " + cmyk[2] + ", " + cmyk[3];
  236. hslTextBox.Text = hsl[0] + ", " + hsl[1] + ", " + hsl[2];
  237. rgbOneTextBox.Text = rOne.ToString("0.##") + "; " + gOne.ToString("0.##") + "; " + bOne.ToString("0.##");
  238. hsvTextBox.Text = hsv[0] + ", " + hsv[1] + ", " + hsv[2];
  239. }
  240. gradPanel.BackColor = c;
  241. ratioPanel.BackColor = c;
  242. int r1 = c.R - 50;
  243. int g1 = c.G - 50;
  244. int b1 = c.B - 50;
  245. if (r1 < 0 || g1 < 0 || b1 < 0)
  246. {
  247. r1 = 0;
  248. g1 = 0;
  249. b1 = 0;
  250. }
  251. gradPanel1.BackColor = Color.FromArgb(r1, g1, b1);
  252. int r2 = c.R - 25;
  253. int g2 = c.G - 25;
  254. int b2 = c.B - 25;
  255. if (r2 < 0 || g2 < 0 || b2 < 0)
  256. {
  257. r2 = 0;
  258. g2 = 0;
  259. b2 = 0;
  260. }
  261. gradPanel2.BackColor = Color.FromArgb(r2, g2, b2);
  262. int r3 = c.R + 25;
  263. int g3 = c.G + 25;
  264. int b3 = c.B + 25;
  265. if (r3 > 255 || g3 > 255 || b3 > 255)
  266. {
  267. r3 = 255;
  268. g3 = 255;
  269. b3 = 255;
  270. }
  271. gradPanel3.BackColor = Color.FromArgb(r3, g3, b3);
  272. int r4 = c.R + 50;
  273. int g4 = c.G + 50;
  274. int b4 = c.B + 50;
  275. if (r4 > 255 || g4 > 255 || b4 > 255)
  276. {
  277. r4 = 255;
  278. g4 = 255;
  279. b4 = 255;
  280. }
  281. gradPanel4.BackColor = Color.FromArgb(r4, g4, b4);
  282. CreateLinearGradient(gradPanel1.BackColor, gradPanel.BackColor, gradPanel4.BackColor);
  283. }
  284. else
  285. {
  286. deleteButton.Enabled = false;
  287. renameButton.Enabled = false;
  288. renameTextBox.Enabled = false;
  289. renameTextBox.Text = "";
  290. }
  291. colorList.Refresh();
  292. }
  293. private void rgbCopyButton_Click(object sender, EventArgs e)
  294. {
  295. Clipboard.SetText(rgbTextBox.Text);
  296. }
  297. private void htmlCopyButton_Click(object sender, EventArgs e)
  298. {
  299. Clipboard.SetText(htmlTextBox.Text);
  300. }
  301. private void cmykCopyButton_Click(object sender, EventArgs e)
  302. {
  303. Clipboard.SetText(cmykTextBox.Text);
  304. }
  305. private void applyDarkTheme()
  306. {
  307. ThemeManager.setDarkModeToControl(colorList.Handle);
  308. this.BackColor = ThemeManager.BackColorDark;
  309. this.ForeColor = Color.White;
  310. toolStrip1.BackColor = ThemeManager.BackColorDark;
  311. colorList.BackColor = ThemeManager.SecondColorDark;
  312. statusStrip1.BackColor = ThemeManager.SecondColorDark;
  313. rgbTextBox.BackColor = ThemeManager.SecondColorDark;
  314. rgbTextBox.ForeColor = Color.White;
  315. htmlTextBox.BackColor = ThemeManager.SecondColorDark;
  316. htmlTextBox.ForeColor = Color.White;
  317. cmykTextBox.BackColor = ThemeManager.SecondColorDark;
  318. cmykTextBox.ForeColor = Color.White;
  319. hslTextBox.BackColor = ThemeManager.SecondColorDark;
  320. hslTextBox.ForeColor = Color.White;
  321. rgbOneTextBox.BackColor = ThemeManager.SecondColorDark;
  322. rgbOneTextBox.ForeColor = Color.White;
  323. hsvTextBox.BackColor = ThemeManager.SecondColorDark;
  324. hsvTextBox.ForeColor = Color.White;
  325. rgbCopyButton.Image = Properties.Resources.white_copy;
  326. htmlCopyButton.Image = Properties.Resources.white_copy;
  327. cmykCopyButton.Image = Properties.Resources.white_copy;
  328. hslCopyButton.Image = Properties.Resources.white_copy;
  329. rgbOneCopyButton.Image = Properties.Resources.white_copy;
  330. hsvCopyButton.Image = Properties.Resources.white_copy;
  331. onTopButton.Image = Properties.Resources.white_ontop;
  332. clearListButton.Image = Properties.Resources.white_broom;
  333. deleteButton.Image = Properties.Resources.white_trash;
  334. formatButton.Image = Properties.Resources.white_format;
  335. aboutButton.Image = Properties.Resources.white_about;
  336. renameTextBox.BackColor = ThemeManager.SecondColorDark;
  337. renameTextBox.ForeColor = Color.White;
  338. renameButton.Image = Properties.Resources.white_rename;
  339. }
  340. private void hslCopyButton_Click(object sender, EventArgs e)
  341. {
  342. Clipboard.SetText(hslTextBox.Text);
  343. }
  344. private void rgbOneCopyButton_Click(object sender, EventArgs e)
  345. {
  346. Clipboard.SetText(rgbOneTextBox.Text);
  347. }
  348. private void onTopButton_Click(object sender, EventArgs e)
  349. {
  350. setAlwaysOnTop(!alwaysOnTop, true);
  351. }
  352. private void setAlwaysOnTop(bool b, bool saveToDisk)
  353. {
  354. alwaysOnTop = b;
  355. this.TopMost = b;
  356. onTopButton.Checked = b;
  357. if (saveToDisk)
  358. {
  359. Properties.Settings.Default.AlwaysOnTop = b;
  360. Properties.Settings.Default.Save();
  361. }
  362. }
  363. private void setAnotherFormat(bool b, bool saveToDisk)
  364. {
  365. anotherFormat = b;
  366. formatButton.Checked = b;
  367. if (colorList.SelectedIndex != -1)
  368. {
  369. colorList.SetSelected(colorList.SelectedIndex, true);
  370. }
  371. if (saveToDisk)
  372. {
  373. Properties.Settings.Default.AnotherFormat = b;
  374. Properties.Settings.Default.Save();
  375. }
  376. }
  377. private void MainForm_KeyDown(object sender, KeyEventArgs e)
  378. {
  379. if (e.Control)
  380. {
  381. if (e.KeyCode == Keys.T)
  382. {
  383. onTopButton.PerformClick();
  384. }
  385. else if (e.KeyCode == Keys.L)
  386. {
  387. clearListButton.PerformClick();
  388. }
  389. else if (e.KeyCode == Keys.F)
  390. {
  391. formatButton.PerformClick();
  392. }
  393. }
  394. else
  395. {
  396. if (e.KeyCode == Keys.Delete)
  397. {
  398. deleteButton.PerformClick();
  399. }
  400. else if (e.KeyCode == Keys.F1)
  401. {
  402. aboutButton.PerformClick();
  403. }
  404. }
  405. }
  406. private void clearListButton_Click(object sender, EventArgs e)
  407. {
  408. colors.Clear();
  409. colorList.Items.Clear();
  410. SaveColorList();
  411. SaveColorNames();
  412. deleteButton.Enabled = false;
  413. renameButton.Enabled = false;
  414. renameTextBox.Enabled = false;
  415. renameTextBox.Text = "";
  416. }
  417. private void deleteButton_Click(object sender, EventArgs e)
  418. {
  419. if (colorList.SelectedIndex != -1)
  420. {
  421. int curIndex = colorList.SelectedIndex;
  422. colorList.Items.RemoveAt(curIndex);
  423. colors.RemoveAt(curIndex);
  424. if (colorList.Items.Count > 0)
  425. {
  426. if (colorList.Items.Count - 1 >= curIndex)
  427. {
  428. colorList.SetSelected(curIndex, true);
  429. }
  430. else if (colorList.Items.Count >= curIndex)
  431. {
  432. colorList.SetSelected(curIndex - 1, true);
  433. }
  434. }
  435. SaveColorList();
  436. SaveColorNames();
  437. }
  438. }
  439. private void aboutButton_Click(object sender, EventArgs e)
  440. {
  441. AboutForm aboutBox = new AboutForm(darkMode);
  442. aboutBox.Owner = this;
  443. if (alwaysOnTop)
  444. {
  445. aboutBox.TopMost = true;
  446. }
  447. aboutBox.FormClosed += aboutBox_FormClosed;
  448. aboutBox.ShowDialog();
  449. }
  450. private void aboutBox_FormClosed(object sender, EventArgs e)
  451. {
  452. AboutForm aboutBox = sender as AboutForm;
  453. aboutBox.Dispose();
  454. aboutBox = null;
  455. }
  456. public async void checkForUpdates(bool showUpToDateDialog)
  457. {
  458. try
  459. {
  460. UpdateChecker checker = new UpdateChecker("ModuleArt", "quick-color-picker");
  461. bool update = await checker.CheckUpdate();
  462. if (update == false)
  463. {
  464. if (showUpToDateDialog)
  465. {
  466. MessageBox.Show("Application is up to date", "Updator", MessageBoxButtons.OK, MessageBoxIcon.Information);
  467. }
  468. }
  469. else
  470. {
  471. UpdateForm updateDialog = new UpdateForm(checker, "Quick Color Picker", darkMode);
  472. if (alwaysOnTop)
  473. {
  474. updateDialog.TopMost = true;
  475. }
  476. DialogResult result = updateDialog.ShowDialog();
  477. if (result == DialogResult.Yes)
  478. {
  479. DownloadForm downloadBox = new DownloadForm(checker.GetAssetUrl("QuickColorPicker-Setup.msi"), darkMode);
  480. downloadBox.Owner = this;
  481. if (alwaysOnTop)
  482. {
  483. downloadBox.TopMost = true;
  484. }
  485. downloadBox.ShowDialog();
  486. }
  487. else
  488. {
  489. updateDialog.Dispose();
  490. }
  491. }
  492. }
  493. catch
  494. {
  495. if (showUpToDateDialog)
  496. {
  497. MessageBox.Show("Connection error", "Updator", MessageBoxButtons.OK, MessageBoxIcon.Information);
  498. }
  499. }
  500. }
  501. private void SaveColorList()
  502. {
  503. try
  504. {
  505. string appDataFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Quick Color Picker");
  506. DirectoryInfo di = new DirectoryInfo(appDataFolder);
  507. if (!di.Exists)
  508. {
  509. di.Create();
  510. }
  511. string colorListPath = Path.Combine(appDataFolder, "color-list.txt");
  512. FileInfo fiColors = new FileInfo(colorListPath);
  513. using (StreamWriter sw = fiColors.CreateText())
  514. {
  515. string[] linesToWrite = new string[colors.Count];
  516. for (int i = 0; i < colors.Count; i++)
  517. {
  518. sw.WriteLine(colors[i].ToString());
  519. }
  520. }
  521. }
  522. catch
  523. {
  524. }
  525. }
  526. private void SaveColorNames()
  527. {
  528. try
  529. {
  530. string appDataFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Quick Color Picker");
  531. DirectoryInfo di = new DirectoryInfo(appDataFolder);
  532. if (!di.Exists)
  533. {
  534. di.Create();
  535. }
  536. string colorNamesPath = Path.Combine(appDataFolder, "color-names.txt");
  537. FileInfo fiNames = new FileInfo(colorNamesPath);
  538. using (StreamWriter sw = fiNames.CreateText())
  539. {
  540. string[] linesToWrite = new string[colorList.Items.Count];
  541. for (int i = 0; i < colorList.Items.Count; i++)
  542. {
  543. sw.WriteLine(colorList.Items[i].ToString());
  544. }
  545. }
  546. }
  547. catch
  548. {
  549. }
  550. }
  551. private void LoadColorList()
  552. {
  553. try
  554. {
  555. string colorListTxt = Path.Combine(
  556. Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
  557. "Quick Color Picker",
  558. "color-list.txt"
  559. );
  560. string colorNamesTxt = Path.Combine(
  561. Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
  562. "Quick Color Picker",
  563. "color-names.txt"
  564. );
  565. string[] colorsLines = File.ReadAllLines(colorListTxt);
  566. string[] namesLines = File.ReadAllLines(colorNamesTxt);
  567. for (int i = 0; i < colorsLines.Length; i++)
  568. {
  569. try
  570. {
  571. AddColor(colorsLines[i], namesLines[i]);
  572. }
  573. catch
  574. {
  575. }
  576. }
  577. colorList.SetSelected(colorList.Items.Count - 1, true);
  578. }
  579. catch
  580. {
  581. }
  582. }
  583. private void gradPanel_Click(object sender, EventArgs e)
  584. {
  585. AddColor((sender as Panel).BackColor);
  586. }
  587. private void formatButton_Click(object sender, EventArgs e)
  588. {
  589. setAnotherFormat(!anotherFormat, true);
  590. }
  591. private void hsvCopyButton_Click(object sender, EventArgs e)
  592. {
  593. Clipboard.SetText(hsvTextBox.Text);
  594. }
  595. private void renameButton_Click(object sender, EventArgs e)
  596. {
  597. if (colorList.SelectedIndex != -1)
  598. {
  599. colorList.Items[colorList.SelectedIndex] = renameTextBox.Text;
  600. colorList.Items[colorList.SelectedIndex] = colorList.Items[colorList.SelectedIndex];
  601. }
  602. SaveColorNames();
  603. }
  604. private void renameTextBox_KeyUp(object sender, KeyEventArgs e)
  605. {
  606. if (e.KeyCode == Keys.Enter)
  607. {
  608. renameButton.PerformClick();
  609. }
  610. }
  611. private void CreateLinearGradient(Color from, Color middle, Color to)
  612. {
  613. Bitmap bmp = new Bitmap(linearGradPictureBox.Width, linearGradPictureBox.Height);
  614. Graphics g = Graphics.FromImage(bmp);
  615. LinearGradientBrush linearGradientBrush = new LinearGradientBrush(
  616. new Point(0, 0),
  617. new Point(bmp.Width, bmp.Height),
  618. from, to
  619. );
  620. ColorBlend cblend = new ColorBlend(3);
  621. cblend.Colors = new Color[3] { from, middle, to };
  622. cblend.Positions = new float[3] { 0f, 0.5f, 1f };
  623. linearGradientBrush.InterpolationColors = cblend;
  624. g.FillRectangle(linearGradientBrush, 0, 0, bmp.Width, bmp.Height);
  625. linearGradPictureBox.Image = bmp;
  626. }
  627. private void linearGradPictureBox_MouseClick(object sender, MouseEventArgs e)
  628. {
  629. Bitmap b = new Bitmap(linearGradPictureBox.ClientSize.Width, linearGradPictureBox.Height);
  630. linearGradPictureBox.DrawToBitmap(b, linearGradPictureBox.ClientRectangle);
  631. Color colour = b.GetPixel(e.Location.X, e.Location.Y);
  632. AddColor(colour);
  633. }
  634. }
  635. }