rlm@1: // GBColorDlg.cpp : implementation file rlm@1: // rlm@1: rlm@1: #include "stdafx.h" rlm@1: #include "resource.h" rlm@1: #include "GBColorDlg.h" rlm@1: #include "Reg.h" rlm@1: rlm@1: extern int32 gbPaletteOption; rlm@1: extern int emulating; rlm@1: extern int systemCartridgeType; rlm@1: extern u16 gbPalette[128]; rlm@1: extern u16 systemGbPalette[24]; rlm@1: rlm@1: static u16 defaultPalettes[][24] = { rlm@1: { rlm@1: 0x7FFF, 0x56B5, 0x318C, 0x0000, 0x7FFF, 0x56B5, 0x318C, 0x0000, rlm@1: }, rlm@1: { rlm@1: 0x6200, 0x7E10, 0x7C10, 0x5000, 0x6200, 0x7E10, 0x7C10, 0x5000, rlm@1: }, rlm@1: { rlm@1: 0x4008, 0x4000, 0x2000, 0x2008, 0x4008, 0x4000, 0x2000, 0x2008, rlm@1: }, rlm@1: { rlm@1: 0x43F0, 0x03E0, 0x4200, 0x2200, 0x43F0, 0x03E0, 0x4200, 0x2200, rlm@1: }, rlm@1: { rlm@1: 0x43FF, 0x03FF, 0x221F, 0x021F, 0x43FF, 0x03FF, 0x221F, 0x021F, rlm@1: }, rlm@1: { rlm@1: 0x621F, 0x7E1F, 0x7C1F, 0x2010, 0x621F, 0x7E1F, 0x7C1F, 0x2010, rlm@1: }, rlm@1: { rlm@1: 0x621F, 0x401F, 0x001F, 0x2010, 0x621F, 0x401F, 0x001F, 0x2010, rlm@1: }, rlm@1: { rlm@1: 0x1314, 0x0E91, 0x0E0D, 0x2108, 0x1314, 0x0E91, 0x0E0D, 0x2108, rlm@1: } rlm@1: }; rlm@1: rlm@1: ///////////////////////////////////////////////////////////////////////////// rlm@1: // GBColorDlg dialog rlm@1: rlm@1: GBColorDlg::GBColorDlg(CWnd*pParent /*=NULL*/) rlm@1: : CDialog(GBColorDlg::IDD, pParent) rlm@1: { rlm@1: //{{AFX_DATA_INIT(GBColorDlg) rlm@1: which = -1; rlm@1: //}}AFX_DATA_INIT rlm@1: which = gbPaletteOption; rlm@1: } rlm@1: rlm@1: void GBColorDlg::DoDataExchange(CDataExchange*pDX) rlm@1: { rlm@1: CDialog::DoDataExchange(pDX); rlm@1: //{{AFX_DATA_MAP(GBColorDlg) rlm@1: DDX_Control(pDX, IDC_PREDEFINED, m_predefined); rlm@1: DDX_Radio(pDX, IDC_DEFAULT, which); rlm@1: //}}AFX_DATA_MAP rlm@1: } rlm@1: rlm@1: BEGIN_MESSAGE_MAP(GBColorDlg, CDialog) rlm@1: //{{AFX_MSG_MAP(GBColorDlg) rlm@1: ON_BN_CLICKED(IDC_DEFAULT, OnDefault) rlm@1: ON_BN_CLICKED(IDC_RESET, OnReset) rlm@1: ON_BN_CLICKED(IDC_USER1, OnUser1) rlm@1: ON_BN_CLICKED(IDC_USER2, OnUser2) rlm@1: ON_BN_CLICKED(ID_OK, OnOk) rlm@1: ON_BN_CLICKED(ID_CANCEL, OnCancel) rlm@1: ON_CBN_SELCHANGE(IDC_PREDEFINED, OnSelchangePredefined) rlm@1: //}}AFX_MSG_MAP rlm@1: ON_CONTROL_RANGE(BN_CLICKED, IDC_COLOR_BG0, IDC_COLOR_OB3, OnColorClicked) rlm@1: END_MESSAGE_MAP() rlm@1: rlm@1: ///////////////////////////////////////////////////////////////////////////// rlm@1: // GBColorDlg message handlers rlm@1: rlm@1: void GBColorDlg::OnDefault() rlm@1: { rlm@1: setWhich(0); rlm@1: } rlm@1: rlm@1: void GBColorDlg::OnReset() rlm@1: { rlm@1: int s = which * 8; rlm@1: colors[s++] = (0x1f) | (0x1f << 5) | (0x1f << 10); rlm@1: colors[s++] = (0x15) | (0x15 << 5) | (0x15 << 10); rlm@1: colors[s++] = (0x0c) | (0x0c << 5) | (0x0c << 10); rlm@1: colors[s++] = 0; rlm@1: rlm@1: colors[s++] = (0x1f) | (0x1f << 5) | (0x1f << 10); rlm@1: colors[s++] = (0x15) | (0x15 << 5) | (0x15 << 10); rlm@1: colors[s++] = (0x0c) | (0x0c << 5) | (0x0c << 10); rlm@1: colors[s] = 0; rlm@1: setWhich(which); rlm@1: } rlm@1: rlm@1: void GBColorDlg::OnUser1() rlm@1: { rlm@1: setWhich(1); rlm@1: } rlm@1: rlm@1: void GBColorDlg::OnUser2() rlm@1: { rlm@1: setWhich(2); rlm@1: } rlm@1: rlm@1: void GBColorDlg::OnCancel() rlm@1: { rlm@1: EndDialog(FALSE); rlm@1: } rlm@1: rlm@1: void GBColorDlg::OnOk() rlm@1: { rlm@1: EndDialog(TRUE); rlm@1: } rlm@1: rlm@1: BOOL GBColorDlg::OnInitDialog() rlm@1: { rlm@1: CDialog::OnInitDialog(); rlm@1: rlm@1: colorControls[0].SubclassDlgItem(IDC_COLOR_BG0, this); rlm@1: colorControls[1].SubclassDlgItem(IDC_COLOR_BG1, this); rlm@1: colorControls[2].SubclassDlgItem(IDC_COLOR_BG2, this); rlm@1: colorControls[3].SubclassDlgItem(IDC_COLOR_BG3, this); rlm@1: colorControls[4].SubclassDlgItem(IDC_COLOR_OB0, this); rlm@1: colorControls[5].SubclassDlgItem(IDC_COLOR_OB1, this); rlm@1: colorControls[6].SubclassDlgItem(IDC_COLOR_OB2, this); rlm@1: colorControls[7].SubclassDlgItem(IDC_COLOR_OB3, this); rlm@1: rlm@1: for (int i = 0; i < 24; i++) rlm@1: { rlm@1: colors[i] = systemGbPalette[i]; rlm@1: } rlm@1: rlm@1: const char *names[] = { rlm@1: "Standard", rlm@1: "Blue Sea", rlm@1: "Dark Night", rlm@1: "Green Forest", rlm@1: "Hot Desert", rlm@1: "Pink Dreams", rlm@1: "Weird Colors", rlm@1: "Real Colors" rlm@1: }; rlm@1: rlm@1: for (int j = 0; j < 8; j++) rlm@1: { rlm@1: int index = m_predefined.AddString(names[j]); rlm@1: m_predefined.SetItemData(index, j); rlm@1: } rlm@1: rlm@1: RECT cbSize; rlm@1: int Height; rlm@1: rlm@1: m_predefined.GetClientRect(&cbSize); rlm@1: Height = m_predefined.GetItemHeight(0); rlm@1: Height += m_predefined.GetItemHeight(0) * (10); rlm@1: rlm@1: // Note: The use of SM_CYEDGE assumes that we're using Windows '95 rlm@1: // Now add on the height of the border of the edit box rlm@1: Height += GetSystemMetrics(SM_CYEDGE) * 2; // top & bottom edges rlm@1: rlm@1: // The height of the border of the drop-down box rlm@1: Height += GetSystemMetrics(SM_CYEDGE) * 2; // top & bottom edges rlm@1: rlm@1: // now set the size of the window rlm@1: m_predefined.SetWindowPos(NULL, rlm@1: 0, 0, rlm@1: cbSize.right, Height, rlm@1: SWP_NOMOVE | SWP_NOZORDER); rlm@1: rlm@1: setWhich(which); rlm@1: rlm@1: CenterWindow(); rlm@1: rlm@1: return TRUE; // return TRUE unless you set the focus to a control rlm@1: // EXCEPTION: OCX Property Pages should return FALSE rlm@1: } rlm@1: rlm@1: void GBColorDlg::setWhich(int w) rlm@1: { rlm@1: which = w; rlm@1: rlm@1: for (int i = 0; i < 8; i++) rlm@1: { rlm@1: colorControls[i].setColor(colors[which*8+i]); rlm@1: } rlm@1: } rlm@1: rlm@1: u16 *GBColorDlg::getColors() rlm@1: { rlm@1: return colors; rlm@1: } rlm@1: rlm@1: void GBColorDlg::OnColorClicked(UINT id) rlm@1: { rlm@1: id -= IDC_COLOR_BG0; rlm@1: rlm@1: u16 color = colors[which*8+id]; rlm@1: rlm@1: COLORREF colorInit = rlm@1: RGB((color & 0x1f) << 3, ((color >> 5) & 0x1f) << 3, ((color >> 10) & 0x1f) << 3); rlm@1: rlm@1: CColorDialog dlg(colorInit, rlm@1: CC_FULLOPEN | CC_ANYCOLOR, this); rlm@1: rlm@1: if (IDOK == dlg.DoModal()) rlm@1: { rlm@1: COLORREF c = dlg.GetColor(); rlm@1: rlm@1: colors[which*8+id] = (u16)((c >> 3) & 0x1f | ((c >> 11) & 0x1f) << 5 | rlm@1: ((c >> 19) & 0x1f) << 10); rlm@1: colorControls[id].setColor(colors[which*8+id]); rlm@1: } rlm@1: } rlm@1: rlm@1: int GBColorDlg::getWhich() rlm@1: { rlm@1: return which; rlm@1: } rlm@1: rlm@1: void GBColorDlg::OnSelchangePredefined() rlm@1: { rlm@1: int sel = m_predefined.GetCurSel(); rlm@1: rlm@1: if (sel != -1) rlm@1: { rlm@1: int data = m_predefined.GetItemData(sel); rlm@1: for (int i = 0; i < 8; i++) rlm@1: { rlm@1: colorControls[i].setColor(defaultPalettes[data][i]); rlm@1: colors[which*8+i] = defaultPalettes[data][i]; rlm@1: } rlm@1: } rlm@1: } rlm@1: