forked from sin365/AxibugEmuOnline
561 lines
14 KiB
C++
561 lines
14 KiB
C++
|
//
|
|||
|
// <20>p<EFBFBD>^<5E>[<5B><><EFBFBD>r<EFBFBD><72><EFBFBD>[<5B>N<EFBFBD><4E><EFBFBD>X
|
|||
|
//
|
|||
|
#define WIN32_LEAN_AND_MEAN
|
|||
|
#include <windows.h>
|
|||
|
#include <shellapi.h>
|
|||
|
#include <commdlg.h>
|
|||
|
#include <string>
|
|||
|
using namespace std;
|
|||
|
|
|||
|
#include "VirtuaNESres.h"
|
|||
|
#include "DebugOut.h"
|
|||
|
#include "App.h"
|
|||
|
#include "Pathlib.h"
|
|||
|
|
|||
|
#include "Wnd.h"
|
|||
|
#include "PaletteEdit.h"
|
|||
|
#include "EmuThread.h"
|
|||
|
|
|||
|
#include "MMU.h"
|
|||
|
|
|||
|
#include "DirectDraw.h"
|
|||
|
|
|||
|
// <20><><EFBFBD>b<EFBFBD>Z<EFBFBD>[<5B>W
|
|||
|
DLG_MESSAGE_BEGIN(CPaletteEdit)
|
|||
|
DLG_ON_MESSAGE( WM_INITDIALOG, OnInitDialog )
|
|||
|
DLG_ON_MESSAGE( WM_DESTROY, OnDestroy )
|
|||
|
DLG_ON_MESSAGE( WM_ACTIVATE, OnActivate )
|
|||
|
DLG_ON_MESSAGE( WM_LBUTTONDOWN, OnLButtonDown )
|
|||
|
DLG_ON_MESSAGE( WM_RBUTTONDOWN, OnRButtonDown )
|
|||
|
DLG_ON_MESSAGE( WM_HSCROLL, OnHScroll )
|
|||
|
DLG_ON_MESSAGE( WM_PAINT, OnPaint )
|
|||
|
DLG_ON_MESSAGE( WM_TIMER, OnTimer )
|
|||
|
|
|||
|
// <20>R<EFBFBD>}<7D><><EFBFBD>h
|
|||
|
DLG_COMMAND_BEGIN()
|
|||
|
DLG_ON_COMMAND( IDOK, OnOK )
|
|||
|
DLG_ON_COMMAND( IDCANCEL, OnCancel )
|
|||
|
DLG_ON_COMMAND( IDDEFAULT, OnDefault )
|
|||
|
|
|||
|
DLG_ON_COMMAND_NOTIFY_RANGE( IDC_PAL_R_EDIT, IDC_PAL_B_EDIT, EN_CHANGE, OnRGBChange )
|
|||
|
DLG_ON_COMMAND( IDC_PAL_UNDO, OnUndo )
|
|||
|
DLG_ON_COMMAND( IDC_PAL_LOAD, OnLoad )
|
|||
|
DLG_ON_COMMAND( IDC_PAL_SAVE, OnSave )
|
|||
|
|
|||
|
DLG_COMMAND_END()
|
|||
|
// Notify <20><><EFBFBD>b<EFBFBD>Z<EFBFBD>[<5B>W
|
|||
|
DLG_NOTIFY_BEGIN()
|
|||
|
DLG_NOTIFY_END()
|
|||
|
DLG_MESSAGE_END()
|
|||
|
|
|||
|
CPaletteEdit::CPaletteEdit()
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
CPaletteEdit::~CPaletteEdit()
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
BOOL CPaletteEdit::Create( HWND hWndParent )
|
|||
|
{
|
|||
|
m_bShortCutDisable = FALSE;
|
|||
|
|
|||
|
m_hWnd = ::CreateDialogParam( CApp::GetPlugin(), MAKEINTRESOURCE(IDD_CFG_PALETTE),
|
|||
|
hWndParent, g_DlgProc, (LPARAM)this );
|
|||
|
if( !m_hWnd )
|
|||
|
return FALSE;
|
|||
|
|
|||
|
// <20><><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD>X<EFBFBD>_<EFBFBD>C<EFBFBD>A<EFBFBD><41><EFBFBD>O<EFBFBD><4F><EFBFBD>X<EFBFBD>g<EFBFBD>ɉ<EFBFBD><C989><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
CWndList::Add( this );
|
|||
|
|
|||
|
DirectDraw.GetPaletteTable( m_Palette );
|
|||
|
|
|||
|
m_PaletteSelect = 0;
|
|||
|
ZEROMEMORY( &m_RGB, sizeof(RGBQUAD) );
|
|||
|
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
void CPaletteEdit::Destroy()
|
|||
|
{
|
|||
|
if( m_hWnd ) {
|
|||
|
// <20>ʒu<CA92>ۑ<EFBFBD>
|
|||
|
::GetWindowRect( m_hWnd, &Config.general.rcPaletteEditPos );
|
|||
|
|
|||
|
// <20><><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD>X<EFBFBD>_<EFBFBD>C<EFBFBD>A<EFBFBD><41><EFBFBD>O<EFBFBD><4F><EFBFBD>X<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>폜
|
|||
|
CWndList::Del( this );
|
|||
|
|
|||
|
::KillTimer( m_hWnd, 1 );
|
|||
|
|
|||
|
::DestroyWindow( m_hWnd );
|
|||
|
m_hWnd = NULL;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
DLGMSG CPaletteEdit::OnInitDialog( DLGMSGPARAM )
|
|||
|
{
|
|||
|
// DEBUGOUT( "CPaletteEdit::OnInitDialog\n" );
|
|||
|
|
|||
|
// <20>ʒu<CA92>C<EFBFBD><43>
|
|||
|
if( Config.general.rcPaletteEditPos.right-Config.general.rcPaletteEditPos.left != 0
|
|||
|
&& Config.general.rcPaletteEditPos.bottom-Config.general.rcPaletteEditPos.top != 0 ) {
|
|||
|
::SetWindowPos( m_hWnd, HWND_NOTOPMOST, Config.general.rcPaletteEditPos.left, Config.general.rcPaletteEditPos.top,
|
|||
|
0, 0, SWP_NOSIZE | SWP_NOZORDER );
|
|||
|
}
|
|||
|
|
|||
|
// UPDOWN
|
|||
|
::SendDlgItemMessage( m_hWnd, IDC_PAL_R_UPDOWN, UDM_SETRANGE, 0, (LPARAM)MAKELONG(255, 0) );
|
|||
|
::SendDlgItemMessage( m_hWnd, IDC_PAL_G_UPDOWN, UDM_SETRANGE, 0, (LPARAM)MAKELONG(255, 0) );
|
|||
|
::SendDlgItemMessage( m_hWnd, IDC_PAL_B_UPDOWN, UDM_SETRANGE, 0, (LPARAM)MAKELONG(255, 0) );
|
|||
|
|
|||
|
// <20>X<EFBFBD><58><EFBFBD>C<EFBFBD>_
|
|||
|
::SendDlgItemMessage( m_hWnd, IDC_PAL_R_SLIDER, TBM_SETRANGE, 0, MAKELONG(0,255) );
|
|||
|
::SendDlgItemMessage( m_hWnd, IDC_PAL_G_SLIDER, TBM_SETRANGE, 0, MAKELONG(0,255) );
|
|||
|
::SendDlgItemMessage( m_hWnd, IDC_PAL_B_SLIDER, TBM_SETRANGE, 0, MAKELONG(0,255) );
|
|||
|
::SendDlgItemMessage( m_hWnd, IDC_PAL_R_SLIDER, TBM_SETPAGESIZE, 0, 10 );
|
|||
|
::SendDlgItemMessage( m_hWnd, IDC_PAL_G_SLIDER, TBM_SETPAGESIZE, 0, 10 );
|
|||
|
::SendDlgItemMessage( m_hWnd, IDC_PAL_B_SLIDER, TBM_SETPAGESIZE, 0, 10 );
|
|||
|
|
|||
|
// COPY/EXCHANGE
|
|||
|
BTNCHECK( IDC_PAL_COPY, TRUE );
|
|||
|
|
|||
|
m_bShortCutDisable = TRUE;
|
|||
|
|
|||
|
DirectDraw.GetPaletteTable( m_Palette );
|
|||
|
::memcpy( m_PaletteUndo, m_Palette, sizeof(m_Palette) );
|
|||
|
::memcpy( m_PaletteDefault, m_Palette, sizeof(m_Palette) );
|
|||
|
::memcpy( m_BGPAL, BGPAL, 16 );
|
|||
|
::memcpy( m_SPPAL, SPPAL, 16 );
|
|||
|
|
|||
|
m_PaletteSelect = 0;
|
|||
|
OnChaneSelect();
|
|||
|
|
|||
|
::SetTimer( m_hWnd, 1, 50, NULL );
|
|||
|
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
DLGMSG CPaletteEdit::OnDestroy( DLGMSGPARAM )
|
|||
|
{
|
|||
|
// DEBUGOUT( "CPaletteEdit::OnDestroy\n" );
|
|||
|
// <20>ʒu<CA92>ۑ<EFBFBD>
|
|||
|
::GetWindowRect( m_hWnd, &Config.general.rcPaletteEditPos );
|
|||
|
|
|||
|
// <20><><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD>X<EFBFBD>_<EFBFBD>C<EFBFBD>A<EFBFBD><41><EFBFBD>O<EFBFBD><4F><EFBFBD>X<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>폜
|
|||
|
CWndList::Del( this );
|
|||
|
|
|||
|
m_hWnd = NULL;
|
|||
|
m_bShortCutDisable = FALSE;
|
|||
|
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
DLGMSG CPaletteEdit::OnActivate( DLGMSGPARAM )
|
|||
|
{
|
|||
|
// DEBUGOUT( "CPaletteEdit::OnActivate\n" );
|
|||
|
|
|||
|
if( LOWORD(wParam) == WA_INACTIVE ) {
|
|||
|
// DEBUGOUT( "CPaletteEdit::OnActivate:Inactive\n" );
|
|||
|
//// if( !m_bShortCutDisable )
|
|||
|
::PostMessage( CApp::GetHWnd(), WM_VNS_SHORTCUTENABLE, (WPARAM)TRUE, 0 );
|
|||
|
//// m_bShortCutDisable = TRUE;
|
|||
|
|
|||
|
//// if( Emu.IsRunning() )
|
|||
|
//// Emu.Resume();
|
|||
|
} else {
|
|||
|
// DEBUGOUT( "CPaletteEdit::OnActivate:Active\n" );
|
|||
|
::PostMessage( CApp::GetHWnd(), WM_VNS_SHORTCUTENABLE, (WPARAM)FALSE, 0 );
|
|||
|
//// m_bShortCutDisable = FALSE;
|
|||
|
|
|||
|
//// if( Emu.IsRunning() )
|
|||
|
//// Emu.Pause();
|
|||
|
}
|
|||
|
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
|
|||
|
DLGMSG CPaletteEdit::OnLButtonDown( DLGMSGPARAM )
|
|||
|
{
|
|||
|
// DEBUGOUT( "CPaletteEdit::OnLButtonDown\n" );
|
|||
|
|
|||
|
INT xp = LOWORD(lParam);
|
|||
|
INT yp = HIWORD(lParam);
|
|||
|
|
|||
|
RECT rcC;
|
|||
|
::GetClientRect( m_hWnd, &rcC );
|
|||
|
|
|||
|
RECT rc;
|
|||
|
rc.left = ((rcC.right-rcC.left) - (CELL_SIZE*CELL_H)) / 2;
|
|||
|
rc.right = rc.left + CELL_H * CELL_SIZE;
|
|||
|
rc.top = 8;
|
|||
|
rc.bottom = rc.top + CELL_V * CELL_SIZE;
|
|||
|
|
|||
|
if( xp >= rc.left && xp < rc.right && yp >= rc.top && yp < rc.bottom ) {
|
|||
|
m_PaletteSelect = ((xp-rc.left)/CELL_SIZE) + ((yp-rc.top)/CELL_SIZE)*16;
|
|||
|
|
|||
|
::memcpy( m_PaletteUndo, m_Palette, sizeof(m_Palette) );
|
|||
|
|
|||
|
OnChaneSelect();
|
|||
|
}
|
|||
|
|
|||
|
rc.top = rc.bottom+8;
|
|||
|
rc.bottom = rc.top + 2 * CELL_SIZE;
|
|||
|
|
|||
|
if( xp >= rc.left && xp < rc.right && yp >= rc.top && yp < rc.bottom ) {
|
|||
|
int x = (xp-rc.left)/CELL_SIZE;
|
|||
|
int y = (yp-rc.top)/CELL_SIZE;
|
|||
|
|
|||
|
if( y == 0 ) m_PaletteSelect = BGPAL[x];
|
|||
|
else m_PaletteSelect = SPPAL[x];
|
|||
|
|
|||
|
::memcpy( m_PaletteUndo, m_Palette, sizeof(m_Palette) );
|
|||
|
|
|||
|
OnChaneSelect();
|
|||
|
}
|
|||
|
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
DLGMSG CPaletteEdit::OnRButtonDown( DLGMSGPARAM )
|
|||
|
{
|
|||
|
// DEBUGOUT( "CPaletteEdit::OnRButtonDown\n" );
|
|||
|
|
|||
|
INT xp = LOWORD(lParam);
|
|||
|
INT yp = HIWORD(lParam);
|
|||
|
|
|||
|
RECT rcC;
|
|||
|
::GetClientRect( m_hWnd, &rcC );
|
|||
|
|
|||
|
RECT rc;
|
|||
|
rc.left = ((rcC.right-rcC.left) - (CELL_SIZE*CELL_H)) / 2;
|
|||
|
rc.right = rc.left + CELL_H * CELL_SIZE;
|
|||
|
rc.top = 8;
|
|||
|
rc.bottom = rc.top + CELL_V * CELL_SIZE;
|
|||
|
|
|||
|
if( xp >= rc.left && xp < rc.right && yp >= rc.top && yp < rc.bottom ) {
|
|||
|
int nSel = ((xp-rc.left)/CELL_SIZE) + ((yp-rc.top)/CELL_SIZE)*16;
|
|||
|
|
|||
|
::memcpy( m_PaletteUndo, m_Palette, sizeof(m_Palette) );
|
|||
|
|
|||
|
if( IsBTNCHECK( IDC_PAL_COPY ) ) {
|
|||
|
m_Palette[nSel] = m_Palette[m_PaletteSelect];
|
|||
|
} else {
|
|||
|
RGBQUAD RGBtemp;
|
|||
|
RGBtemp = m_Palette[m_PaletteSelect];
|
|||
|
m_RGB = m_Palette[m_PaletteSelect] = m_Palette[nSel];
|
|||
|
m_Palette[nSel] = RGBtemp;
|
|||
|
}
|
|||
|
|
|||
|
OnChaneSelect();
|
|||
|
}
|
|||
|
|
|||
|
rc.top = rc.bottom+8;
|
|||
|
rc.bottom = rc.top + 2 * CELL_SIZE;
|
|||
|
|
|||
|
if( xp >= rc.left && xp < rc.right && yp >= rc.top && yp < rc.bottom ) {
|
|||
|
int x = (xp-rc.left)/CELL_SIZE;
|
|||
|
int y = (yp-rc.top)/CELL_SIZE;
|
|||
|
|
|||
|
int nSel;
|
|||
|
if( y == 0 ) nSel = BGPAL[x];
|
|||
|
else nSel = SPPAL[x];
|
|||
|
|
|||
|
::memcpy( m_PaletteUndo, m_Palette, sizeof(m_Palette) );
|
|||
|
|
|||
|
m_Palette[nSel] = m_Palette[m_PaletteSelect];
|
|||
|
|
|||
|
OnChaneSelect();
|
|||
|
}
|
|||
|
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
DLGMSG CPaletteEdit::OnHScroll( DLGMSGPARAM )
|
|||
|
{
|
|||
|
// DEBUGOUT( "CPaletteEdit::OnHScroll\n" );
|
|||
|
|
|||
|
// int nScrollCode = (int)LOWORD(wParam); // scroll bar value
|
|||
|
// int nPos = (int) HIWORD(wParam); // scroll box position
|
|||
|
HWND hWndBar = (HWND)lParam; // handle to scroll bar
|
|||
|
|
|||
|
int nEdit = 0;
|
|||
|
int nPos = ::SendMessage( hWndBar, TBM_GETPOS, 0, 0 );
|
|||
|
|
|||
|
if( hWndBar == ::GetDlgItem( m_hWnd, IDC_PAL_R_SLIDER ) ) {
|
|||
|
nEdit = IDC_PAL_R_EDIT;
|
|||
|
}
|
|||
|
if( hWndBar == ::GetDlgItem( m_hWnd, IDC_PAL_G_SLIDER ) ) {
|
|||
|
nEdit = IDC_PAL_G_EDIT;
|
|||
|
}
|
|||
|
if( hWndBar == ::GetDlgItem( m_hWnd, IDC_PAL_B_SLIDER ) ) {
|
|||
|
nEdit = IDC_PAL_B_EDIT;
|
|||
|
}
|
|||
|
|
|||
|
if( nEdit ) {
|
|||
|
CHAR szStr[16];
|
|||
|
::wsprintf( szStr, "%d", nPos );
|
|||
|
::SetWindowText( ::GetDlgItem( m_hWnd, nEdit ), szStr );
|
|||
|
}
|
|||
|
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
DLGMSG CPaletteEdit::OnPaint( DLGMSGPARAM )
|
|||
|
{
|
|||
|
// DEBUGOUT( "CPaletteEdit::OnPaint\n" );
|
|||
|
|
|||
|
PAINTSTRUCT ps;
|
|||
|
HDC hDC = ::BeginPaint( hWnd, &ps );
|
|||
|
|
|||
|
int xoffs;
|
|||
|
RECT rcC;
|
|||
|
::GetClientRect( m_hWnd, &rcC );
|
|||
|
|
|||
|
xoffs = ((rcC.right-rcC.left) - (CELL_SIZE*CELL_H)) / 2;
|
|||
|
|
|||
|
RECT rc;
|
|||
|
for( int y = 0; y < CELL_V; y++ ) {
|
|||
|
for( int x = 0; x < CELL_H; x++ ) {
|
|||
|
rc.left = xoffs + x * CELL_SIZE;
|
|||
|
rc.right = rc.left + CELL_SIZE;
|
|||
|
rc.top = 8 + y * CELL_SIZE;
|
|||
|
rc.bottom = rc.top + CELL_SIZE;
|
|||
|
|
|||
|
::SetBkColor( hDC, RGB(m_Palette[x+y*16].rgbRed,m_Palette[x+y*16].rgbGreen,m_Palette[x+y*16].rgbBlue) );
|
|||
|
::ExtTextOut( hDC, 0, 0, ETO_OPAQUE, &rc, NULL, 0, NULL );
|
|||
|
|
|||
|
if( m_PaletteSelect == (x+y*16) ) {
|
|||
|
::DrawEdge( hDC, &rc, BDR_SUNKENOUTER, BF_RECT );
|
|||
|
} else {
|
|||
|
::DrawEdge( hDC, &rc, BDR_RAISEDOUTER, BF_RECT );
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// BG/SP PALETTE
|
|||
|
rc.left = xoffs;
|
|||
|
rc.right = rc.left + CELL_SIZE;
|
|||
|
for( int i = 0; i < 16; i++ ) {
|
|||
|
rc.top = 8 + 8 + 4 * CELL_SIZE;
|
|||
|
rc.bottom = rc.top + CELL_SIZE;
|
|||
|
::SetBkColor( hDC, RGB(m_Palette[m_BGPAL[i]].rgbRed,m_Palette[m_BGPAL[i]].rgbGreen,m_Palette[m_BGPAL[i]].rgbBlue) );
|
|||
|
::ExtTextOut( hDC, 0, 0, ETO_OPAQUE, &rc, NULL, 0, NULL );
|
|||
|
::DrawEdge( hDC, &rc, BDR_RAISEDOUTER, BF_RECT );
|
|||
|
|
|||
|
rc.top += CELL_SIZE;
|
|||
|
rc.bottom += CELL_SIZE;
|
|||
|
::SetBkColor( hDC, RGB(m_Palette[m_SPPAL[i]].rgbRed,m_Palette[m_SPPAL[i]].rgbGreen,m_Palette[m_SPPAL[i]].rgbBlue) );
|
|||
|
::ExtTextOut( hDC, 0, 0, ETO_OPAQUE, &rc, NULL, 0, NULL );
|
|||
|
::DrawEdge( hDC, &rc, BDR_RAISEDOUTER, BF_RECT );
|
|||
|
|
|||
|
rc.left += CELL_SIZE;
|
|||
|
rc.right += CELL_SIZE;
|
|||
|
}
|
|||
|
|
|||
|
::EndPaint( hWnd, &ps );
|
|||
|
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
DLGMSG CPaletteEdit::OnTimer( DLGMSGPARAM )
|
|||
|
{
|
|||
|
if( ::memcmp( m_BGPAL, BGPAL, 16 ) != 0 || ::memcmp( m_SPPAL, SPPAL, 16 ) != 0 ) {
|
|||
|
::memcpy( m_BGPAL, BGPAL, 16 );
|
|||
|
::memcpy( m_SPPAL, SPPAL, 16 );
|
|||
|
|
|||
|
RECT rcC;
|
|||
|
::GetClientRect( m_hWnd, &rcC );
|
|||
|
rcC.bottom = 8 + 8 + CELL_V*CELL_SIZE + 2*CELL_SIZE;
|
|||
|
|
|||
|
::InvalidateRect( m_hWnd, &rcC, FALSE );
|
|||
|
}
|
|||
|
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
DLGCMD CPaletteEdit::OnOK( DLGCMDPARAM )
|
|||
|
{
|
|||
|
// DEBUGOUT( "CPaletteEdit::OnOK\n" );
|
|||
|
::DestroyWindow( m_hWnd );
|
|||
|
}
|
|||
|
|
|||
|
DLGCMD CPaletteEdit::OnCancel( DLGCMDPARAM )
|
|||
|
{
|
|||
|
// DEBUGOUT( "CPaletteEdit::OnCancel\n" );
|
|||
|
::DestroyWindow( m_hWnd );
|
|||
|
}
|
|||
|
|
|||
|
DLGCMD CPaletteEdit::OnDefault( DLGCMDPARAM )
|
|||
|
{
|
|||
|
// DEBUGOUT( "CPaletteEdit::OnDefault\n" );
|
|||
|
|
|||
|
::memcpy( m_Palette, m_PaletteDefault, sizeof(m_PaletteDefault) );
|
|||
|
::memcpy( m_PaletteUndo, m_PaletteDefault, sizeof(m_PaletteDefault) );
|
|||
|
|
|||
|
OnChaneSelect();
|
|||
|
}
|
|||
|
|
|||
|
DLGCMD CPaletteEdit::OnRGBChange( DLGCMDPARAM )
|
|||
|
{
|
|||
|
// DEBUGOUT( "CPaletteEdit::OnRGBChange\n" );
|
|||
|
|
|||
|
CHAR szColor[16];
|
|||
|
INT val = 0;
|
|||
|
|
|||
|
::GetWindowText( hWnd, szColor, sizeof(szColor)-1 );
|
|||
|
if( ::lstrlen(szColor) > 0 ) {
|
|||
|
val = ::atoi(szColor);
|
|||
|
if( val < 0 ) {
|
|||
|
val = 0;
|
|||
|
::SetWindowText( hWnd, "0" );
|
|||
|
} else if( val > 255 ) {
|
|||
|
val = 255;
|
|||
|
::SetWindowText( hWnd, "255" );
|
|||
|
}
|
|||
|
} else {
|
|||
|
val = 0;
|
|||
|
::SetWindowText( hWnd, "0" );
|
|||
|
}
|
|||
|
|
|||
|
int nSlider = 0;
|
|||
|
if( hWnd == ::GetDlgItem( m_hWnd, IDC_PAL_R_EDIT ) ) {
|
|||
|
m_RGB.rgbRed = (BYTE)val;
|
|||
|
nSlider = IDC_PAL_R_SLIDER;
|
|||
|
}
|
|||
|
if( hWnd == ::GetDlgItem( m_hWnd, IDC_PAL_G_EDIT ) ) {
|
|||
|
m_RGB.rgbGreen = (BYTE)val;
|
|||
|
nSlider = IDC_PAL_G_SLIDER;
|
|||
|
}
|
|||
|
if( hWnd == ::GetDlgItem( m_hWnd, IDC_PAL_B_EDIT ) ) {
|
|||
|
m_RGB.rgbBlue = (BYTE)val;
|
|||
|
nSlider = IDC_PAL_B_SLIDER;
|
|||
|
}
|
|||
|
|
|||
|
if( nSlider ) {
|
|||
|
::SendDlgItemMessage( m_hWnd, nSlider, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)val );
|
|||
|
|
|||
|
OnUpdateColor();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
DLGCMD CPaletteEdit::OnUndo( DLGCMDPARAM )
|
|||
|
{
|
|||
|
// DEBUGOUT( "CPaletteEdit::OnUndo\n" );
|
|||
|
|
|||
|
::memcpy( m_Palette, m_PaletteUndo, sizeof(m_Palette) );
|
|||
|
OnChaneSelect();
|
|||
|
}
|
|||
|
|
|||
|
DLGCMD CPaletteEdit::OnLoad( DLGCMDPARAM )
|
|||
|
{
|
|||
|
// DEBUGOUT( "CPaletteEdit::OnLoad\n" );
|
|||
|
|
|||
|
CHAR szFile[ _MAX_PATH ];
|
|||
|
OPENFILENAME ofn;
|
|||
|
ZEROMEMORY( &ofn, sizeof(ofn) );
|
|||
|
|
|||
|
ofn.lpstrInitialDir = CApp::GetModulePath();
|
|||
|
szFile[0] = '\0';
|
|||
|
|
|||
|
ofn.lStructSize = sizeof(ofn);
|
|||
|
ofn.hwndOwner = m_hWnd;
|
|||
|
ofn.lpstrFile = szFile;
|
|||
|
ofn.nMaxFile = sizeof(szFile);
|
|||
|
// ofn.lpstrDefExt = ".pal";
|
|||
|
|
|||
|
CHAR szTitle[256];
|
|||
|
CApp::LoadString( IDS_UI_OPENPALETTE, szTitle, sizeof(szTitle) );
|
|||
|
ofn.lpstrTitle = szTitle;
|
|||
|
|
|||
|
ofn.lpstrFilter = "Palette File(*.pal)\0*.pal\0All File(*.*)\0*.*\0";
|
|||
|
ofn.nFilterIndex = 1;
|
|||
|
ofn.Flags = OFN_READONLY|OFN_HIDEREADONLY|OFN_EXPLORER|OFN_PATHMUSTEXIST;
|
|||
|
|
|||
|
if( ::GetOpenFileName( &ofn ) ) {
|
|||
|
::memcpy( m_PaletteUndo, m_Palette, sizeof(m_Palette) );
|
|||
|
|
|||
|
DirectDraw.SetPaletteFile( szFile );
|
|||
|
DirectDraw.GetPaletteTable( m_Palette );
|
|||
|
OnChaneSelect();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
DLGCMD CPaletteEdit::OnSave( DLGCMDPARAM )
|
|||
|
{
|
|||
|
// DEBUGOUT( "CPaletteEdit::OnSave\n" );
|
|||
|
|
|||
|
CHAR szFile[ _MAX_PATH ];
|
|||
|
OPENFILENAME ofn;
|
|||
|
ZEROMEMORY( &ofn, sizeof(ofn) );
|
|||
|
|
|||
|
ofn.lpstrInitialDir = CApp::GetModulePath();
|
|||
|
szFile[0] = '\0';
|
|||
|
|
|||
|
ofn.lStructSize = sizeof(ofn);
|
|||
|
ofn.hwndOwner = m_hWnd;
|
|||
|
ofn.lpstrFile = szFile;
|
|||
|
ofn.nMaxFile = sizeof(szFile);
|
|||
|
|
|||
|
ofn.lpstrDefExt = ".pal";
|
|||
|
|
|||
|
CHAR szTitle[256];
|
|||
|
CApp::LoadString( IDS_UI_SAVEPALETTE, szTitle, sizeof(szTitle) );
|
|||
|
ofn.lpstrTitle = szTitle;
|
|||
|
|
|||
|
ofn.lpstrFilter = "Palette File(*.pal)\0*.pal\0All File(*.*)\0*.*\0";
|
|||
|
ofn.nFilterIndex = 1;
|
|||
|
ofn.Flags = OFN_READONLY|OFN_HIDEREADONLY|OFN_EXPLORER|OFN_PATHMUSTEXIST;
|
|||
|
ofn.Flags |= OFN_OVERWRITEPROMPT;
|
|||
|
|
|||
|
if( ::GetSaveFileName( &ofn ) ) {
|
|||
|
FILE* fp = NULL;
|
|||
|
|
|||
|
if( (fp = ::fopen( szFile, "wb" )) ) {
|
|||
|
for( int i = 0; i < 64; i++ ) {
|
|||
|
::fputc( (int)m_Palette[i].rgbRed, fp );
|
|||
|
::fputc( (int)m_Palette[i].rgbGreen, fp );
|
|||
|
::fputc( (int)m_Palette[i].rgbBlue, fp );
|
|||
|
}
|
|||
|
::fclose( fp );
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void CPaletteEdit::OnChaneSelect()
|
|||
|
{
|
|||
|
// DEBUGOUT( "CPaletteEdit::OnChaneSelect\n" );
|
|||
|
|
|||
|
m_RGB = m_Palette[m_PaletteSelect];
|
|||
|
|
|||
|
CHAR szStr[16];
|
|||
|
::wsprintf( szStr, "%02X", m_PaletteSelect );
|
|||
|
::SetDlgItemText( m_hWnd, IDC_PAL_NO, szStr );
|
|||
|
|
|||
|
::wsprintf( szStr, "%d", m_RGB.rgbRed );
|
|||
|
::SetDlgItemText( m_hWnd, IDC_PAL_R_EDIT, szStr );
|
|||
|
::wsprintf( szStr, "%d", m_RGB.rgbGreen );
|
|||
|
::SetDlgItemText( m_hWnd, IDC_PAL_G_EDIT, szStr );
|
|||
|
::wsprintf( szStr, "%d", m_RGB.rgbBlue );
|
|||
|
::SetDlgItemText( m_hWnd, IDC_PAL_B_EDIT, szStr );
|
|||
|
|
|||
|
OnUpdateColor();
|
|||
|
|
|||
|
::InvalidateRect( m_hWnd, NULL, FALSE );
|
|||
|
}
|
|||
|
|
|||
|
void CPaletteEdit::OnUpdateColor()
|
|||
|
{
|
|||
|
// DEBUGOUT( "CPaletteEdit::OnUpdateColor\n" );
|
|||
|
|
|||
|
m_Palette[m_PaletteSelect] = m_RGB;
|
|||
|
|
|||
|
DirectDraw.SetPaletteTable( m_Palette );
|
|||
|
|
|||
|
if( Emu.IsPausing() ) {
|
|||
|
::InvalidateRect( CApp::GetHWnd(), NULL, FALSE );
|
|||
|
}
|
|||
|
|
|||
|
::InvalidateRect( m_hWnd, NULL, FALSE );
|
|||
|
}
|