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