1 /* 2 * PROJECT: PAINT for ReactOS 3 * LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later) 4 * PURPOSE: Keep track of palette data, notify listeners 5 * COPYRIGHT: Copyright 2015 Benedikt Freisen <b.freisen@gmx.net> 6 * Copyright 2021 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com> 7 */ 8 9 #include "precomp.h" 10 11 PaletteModel paletteModel; 12 13 /* FUNCTIONS ********************************************************/ 14 15 PaletteModel::PaletteModel() 16 { 17 m_fgColor = 0x00000000; 18 m_bgColor = 0x00ffffff; 19 SelectPalette(PAL_MODERN); 20 } 21 22 PAL_TYPE PaletteModel::SelectedPalette() 23 { 24 return m_nSelectedPalette; 25 } 26 27 void PaletteModel::SelectPalette(PAL_TYPE nPalette) 28 { 29 static const COLORREF modernColors[NUM_COLORS] = 30 { 31 0x000000, 0x464646, 0x787878, 0x300099, 0x241ced, 0x0078ff, 0x0ec2ff, 32 0x00f2ff, 0x1de6a8, 0x4cb122, 0xefb700, 0xf36d4d, 0x99362f, 0x98316f, 33 0xffffff, 0xdcdcdc, 0xb4b4b4, 0x3c5a9c, 0xb1a3ff, 0x7aaae5, 0x9ce4f5, 34 0xbdf9ff, 0xbcf9d3, 0x61bb9d, 0xead999, 0xd19a70, 0x8e6d54, 0xd5a5b5 35 }; 36 static const COLORREF oldColors[NUM_COLORS] = 37 { 38 0x000000, 0x808080, 0x000080, 0x008080, 0x008000, 0x808000, 0x800000, 39 0x800080, 0x408080, 0x404000, 0xff8000, 0x804000, 0xff0040, 0x004080, 40 0xffffff, 0xc0c0c0, 0x0000ff, 0x00ffff, 0x00ff00, 0xffff00, 0xff0000, 41 0xff00ff, 0x80ffff, 0x80ff00, 0xffff80, 0xff8080, 0x8000ff, 0x4080ff 42 }; 43 switch (nPalette) 44 { 45 case PAL_MODERN: 46 CopyMemory(m_colors, modernColors, sizeof(m_colors)); 47 break; 48 case PAL_OLDTYPE: 49 CopyMemory(m_colors, oldColors, sizeof(m_colors)); 50 break; 51 } 52 m_nSelectedPalette = nPalette; 53 NotifyPaletteChanged(); 54 } 55 56 COLORREF PaletteModel::GetColor(UINT nIndex) const 57 { 58 if (nIndex < NUM_COLORS) 59 return m_colors[nIndex]; 60 else 61 return 0; 62 } 63 64 void PaletteModel::SetColor(UINT nIndex, COLORREF newColor) 65 { 66 if (nIndex < NUM_COLORS) 67 { 68 m_colors[nIndex] = newColor; 69 NotifyPaletteChanged(); 70 } 71 } 72 73 COLORREF PaletteModel::GetFgColor() const 74 { 75 return m_fgColor; 76 } 77 78 void PaletteModel::SetFgColor(COLORREF newColor) 79 { 80 m_fgColor = newColor; 81 NotifyColorChanged(); 82 } 83 84 COLORREF PaletteModel::GetBgColor() const 85 { 86 return m_bgColor; 87 } 88 89 void PaletteModel::SetBgColor(COLORREF newColor) 90 { 91 m_bgColor = newColor; 92 NotifyColorChanged(); 93 } 94 95 void PaletteModel::NotifyColorChanged() 96 { 97 if (paletteWindow.IsWindow()) 98 paletteWindow.SendMessage(WM_PALETTEMODELCOLORCHANGED); 99 if (canvasWindow.IsWindow()) 100 canvasWindow.SendMessage(WM_PALETTEMODELCOLORCHANGED); 101 if (textEditWindow.IsWindow()) 102 textEditWindow.SendMessage(WM_PALETTEMODELCOLORCHANGED); 103 } 104 105 void PaletteModel::NotifyPaletteChanged() 106 { 107 if (paletteWindow.IsWindow()) 108 paletteWindow.Invalidate(FALSE); 109 } 110