Mercurial > vba-clojure
comparison src/win32/GBColorDlg.cpp @ 1:f9f4f1b99eed
importing src directory
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 03 Mar 2012 10:31:27 -0600 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:8ced16adf2e1 | 1:f9f4f1b99eed |
---|---|
1 // GBColorDlg.cpp : implementation file | |
2 // | |
3 | |
4 #include "stdafx.h" | |
5 #include "resource.h" | |
6 #include "GBColorDlg.h" | |
7 #include "Reg.h" | |
8 | |
9 extern int32 gbPaletteOption; | |
10 extern int emulating; | |
11 extern int systemCartridgeType; | |
12 extern u16 gbPalette[128]; | |
13 extern u16 systemGbPalette[24]; | |
14 | |
15 static u16 defaultPalettes[][24] = { | |
16 { | |
17 0x7FFF, 0x56B5, 0x318C, 0x0000, 0x7FFF, 0x56B5, 0x318C, 0x0000, | |
18 }, | |
19 { | |
20 0x6200, 0x7E10, 0x7C10, 0x5000, 0x6200, 0x7E10, 0x7C10, 0x5000, | |
21 }, | |
22 { | |
23 0x4008, 0x4000, 0x2000, 0x2008, 0x4008, 0x4000, 0x2000, 0x2008, | |
24 }, | |
25 { | |
26 0x43F0, 0x03E0, 0x4200, 0x2200, 0x43F0, 0x03E0, 0x4200, 0x2200, | |
27 }, | |
28 { | |
29 0x43FF, 0x03FF, 0x221F, 0x021F, 0x43FF, 0x03FF, 0x221F, 0x021F, | |
30 }, | |
31 { | |
32 0x621F, 0x7E1F, 0x7C1F, 0x2010, 0x621F, 0x7E1F, 0x7C1F, 0x2010, | |
33 }, | |
34 { | |
35 0x621F, 0x401F, 0x001F, 0x2010, 0x621F, 0x401F, 0x001F, 0x2010, | |
36 }, | |
37 { | |
38 0x1314, 0x0E91, 0x0E0D, 0x2108, 0x1314, 0x0E91, 0x0E0D, 0x2108, | |
39 } | |
40 }; | |
41 | |
42 ///////////////////////////////////////////////////////////////////////////// | |
43 // GBColorDlg dialog | |
44 | |
45 GBColorDlg::GBColorDlg(CWnd*pParent /*=NULL*/) | |
46 : CDialog(GBColorDlg::IDD, pParent) | |
47 { | |
48 //{{AFX_DATA_INIT(GBColorDlg) | |
49 which = -1; | |
50 //}}AFX_DATA_INIT | |
51 which = gbPaletteOption; | |
52 } | |
53 | |
54 void GBColorDlg::DoDataExchange(CDataExchange*pDX) | |
55 { | |
56 CDialog::DoDataExchange(pDX); | |
57 //{{AFX_DATA_MAP(GBColorDlg) | |
58 DDX_Control(pDX, IDC_PREDEFINED, m_predefined); | |
59 DDX_Radio(pDX, IDC_DEFAULT, which); | |
60 //}}AFX_DATA_MAP | |
61 } | |
62 | |
63 BEGIN_MESSAGE_MAP(GBColorDlg, CDialog) | |
64 //{{AFX_MSG_MAP(GBColorDlg) | |
65 ON_BN_CLICKED(IDC_DEFAULT, OnDefault) | |
66 ON_BN_CLICKED(IDC_RESET, OnReset) | |
67 ON_BN_CLICKED(IDC_USER1, OnUser1) | |
68 ON_BN_CLICKED(IDC_USER2, OnUser2) | |
69 ON_BN_CLICKED(ID_OK, OnOk) | |
70 ON_BN_CLICKED(ID_CANCEL, OnCancel) | |
71 ON_CBN_SELCHANGE(IDC_PREDEFINED, OnSelchangePredefined) | |
72 //}}AFX_MSG_MAP | |
73 ON_CONTROL_RANGE(BN_CLICKED, IDC_COLOR_BG0, IDC_COLOR_OB3, OnColorClicked) | |
74 END_MESSAGE_MAP() | |
75 | |
76 ///////////////////////////////////////////////////////////////////////////// | |
77 // GBColorDlg message handlers | |
78 | |
79 void GBColorDlg::OnDefault() | |
80 { | |
81 setWhich(0); | |
82 } | |
83 | |
84 void GBColorDlg::OnReset() | |
85 { | |
86 int s = which * 8; | |
87 colors[s++] = (0x1f) | (0x1f << 5) | (0x1f << 10); | |
88 colors[s++] = (0x15) | (0x15 << 5) | (0x15 << 10); | |
89 colors[s++] = (0x0c) | (0x0c << 5) | (0x0c << 10); | |
90 colors[s++] = 0; | |
91 | |
92 colors[s++] = (0x1f) | (0x1f << 5) | (0x1f << 10); | |
93 colors[s++] = (0x15) | (0x15 << 5) | (0x15 << 10); | |
94 colors[s++] = (0x0c) | (0x0c << 5) | (0x0c << 10); | |
95 colors[s] = 0; | |
96 setWhich(which); | |
97 } | |
98 | |
99 void GBColorDlg::OnUser1() | |
100 { | |
101 setWhich(1); | |
102 } | |
103 | |
104 void GBColorDlg::OnUser2() | |
105 { | |
106 setWhich(2); | |
107 } | |
108 | |
109 void GBColorDlg::OnCancel() | |
110 { | |
111 EndDialog(FALSE); | |
112 } | |
113 | |
114 void GBColorDlg::OnOk() | |
115 { | |
116 EndDialog(TRUE); | |
117 } | |
118 | |
119 BOOL GBColorDlg::OnInitDialog() | |
120 { | |
121 CDialog::OnInitDialog(); | |
122 | |
123 colorControls[0].SubclassDlgItem(IDC_COLOR_BG0, this); | |
124 colorControls[1].SubclassDlgItem(IDC_COLOR_BG1, this); | |
125 colorControls[2].SubclassDlgItem(IDC_COLOR_BG2, this); | |
126 colorControls[3].SubclassDlgItem(IDC_COLOR_BG3, this); | |
127 colorControls[4].SubclassDlgItem(IDC_COLOR_OB0, this); | |
128 colorControls[5].SubclassDlgItem(IDC_COLOR_OB1, this); | |
129 colorControls[6].SubclassDlgItem(IDC_COLOR_OB2, this); | |
130 colorControls[7].SubclassDlgItem(IDC_COLOR_OB3, this); | |
131 | |
132 for (int i = 0; i < 24; i++) | |
133 { | |
134 colors[i] = systemGbPalette[i]; | |
135 } | |
136 | |
137 const char *names[] = { | |
138 "Standard", | |
139 "Blue Sea", | |
140 "Dark Night", | |
141 "Green Forest", | |
142 "Hot Desert", | |
143 "Pink Dreams", | |
144 "Weird Colors", | |
145 "Real Colors" | |
146 }; | |
147 | |
148 for (int j = 0; j < 8; j++) | |
149 { | |
150 int index = m_predefined.AddString(names[j]); | |
151 m_predefined.SetItemData(index, j); | |
152 } | |
153 | |
154 RECT cbSize; | |
155 int Height; | |
156 | |
157 m_predefined.GetClientRect(&cbSize); | |
158 Height = m_predefined.GetItemHeight(0); | |
159 Height += m_predefined.GetItemHeight(0) * (10); | |
160 | |
161 // Note: The use of SM_CYEDGE assumes that we're using Windows '95 | |
162 // Now add on the height of the border of the edit box | |
163 Height += GetSystemMetrics(SM_CYEDGE) * 2; // top & bottom edges | |
164 | |
165 // The height of the border of the drop-down box | |
166 Height += GetSystemMetrics(SM_CYEDGE) * 2; // top & bottom edges | |
167 | |
168 // now set the size of the window | |
169 m_predefined.SetWindowPos(NULL, | |
170 0, 0, | |
171 cbSize.right, Height, | |
172 SWP_NOMOVE | SWP_NOZORDER); | |
173 | |
174 setWhich(which); | |
175 | |
176 CenterWindow(); | |
177 | |
178 return TRUE; // return TRUE unless you set the focus to a control | |
179 // EXCEPTION: OCX Property Pages should return FALSE | |
180 } | |
181 | |
182 void GBColorDlg::setWhich(int w) | |
183 { | |
184 which = w; | |
185 | |
186 for (int i = 0; i < 8; i++) | |
187 { | |
188 colorControls[i].setColor(colors[which*8+i]); | |
189 } | |
190 } | |
191 | |
192 u16 *GBColorDlg::getColors() | |
193 { | |
194 return colors; | |
195 } | |
196 | |
197 void GBColorDlg::OnColorClicked(UINT id) | |
198 { | |
199 id -= IDC_COLOR_BG0; | |
200 | |
201 u16 color = colors[which*8+id]; | |
202 | |
203 COLORREF colorInit = | |
204 RGB((color & 0x1f) << 3, ((color >> 5) & 0x1f) << 3, ((color >> 10) & 0x1f) << 3); | |
205 | |
206 CColorDialog dlg(colorInit, | |
207 CC_FULLOPEN | CC_ANYCOLOR, this); | |
208 | |
209 if (IDOK == dlg.DoModal()) | |
210 { | |
211 COLORREF c = dlg.GetColor(); | |
212 | |
213 colors[which*8+id] = (u16)((c >> 3) & 0x1f | ((c >> 11) & 0x1f) << 5 | | |
214 ((c >> 19) & 0x1f) << 10); | |
215 colorControls[id].setColor(colors[which*8+id]); | |
216 } | |
217 } | |
218 | |
219 int GBColorDlg::getWhich() | |
220 { | |
221 return which; | |
222 } | |
223 | |
224 void GBColorDlg::OnSelchangePredefined() | |
225 { | |
226 int sel = m_predefined.GetCurSel(); | |
227 | |
228 if (sel != -1) | |
229 { | |
230 int data = m_predefined.GetItemData(sel); | |
231 for (int i = 0; i < 8; i++) | |
232 { | |
233 colorControls[i].setColor(defaultPalettes[data][i]); | |
234 colors[which*8+i] = defaultPalettes[data][i]; | |
235 } | |
236 } | |
237 } | |
238 |