win32: some presentation refactoring
This commit is contained in:
parent
633a5638a7
commit
cb09cf5170
|
@ -85,11 +85,11 @@
|
||||||
#include "pathsettings.h"
|
#include "pathsettings.h"
|
||||||
#include "utils/xstring.h"
|
#include "utils/xstring.h"
|
||||||
#include "directx/ddraw.h"
|
#include "directx/ddraw.h"
|
||||||
|
#include "video.h"
|
||||||
|
|
||||||
#include "aggdraw.h"
|
#include "aggdraw.h"
|
||||||
#include "agg2d.h"
|
#include "agg2d.h"
|
||||||
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
#define HAVE_REMOTE
|
#define HAVE_REMOTE
|
||||||
|
@ -99,6 +99,8 @@ using namespace std;
|
||||||
#include <pcap.h>
|
#include <pcap.h>
|
||||||
#include <remote-ext.h> //uh?
|
#include <remote-ext.h> //uh?
|
||||||
|
|
||||||
|
VideoInfo video;
|
||||||
|
|
||||||
//#define WX_STUB
|
//#define WX_STUB
|
||||||
|
|
||||||
#ifdef WX_STUB
|
#ifdef WX_STUB
|
||||||
|
@ -196,7 +198,6 @@ RECT MainScreenSrcRect, SubScreenSrcRect;
|
||||||
int WndX = 0;
|
int WndX = 0;
|
||||||
int WndY = 0;
|
int WndY = 0;
|
||||||
|
|
||||||
int ScreenGap = 0;
|
|
||||||
extern HWND RamSearchHWnd;
|
extern HWND RamSearchHWnd;
|
||||||
static BOOL lostFocusPause = TRUE;
|
static BOOL lostFocusPause = TRUE;
|
||||||
static BOOL lastPauseFromLostFocus = FALSE;
|
static BOOL lastPauseFromLostFocus = FALSE;
|
||||||
|
@ -373,33 +374,21 @@ VOID CALLBACK KeyInputTimer( UINT idEvent, UINT uMsg, DWORD_PTR dwUser, DWORD_PT
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rotation definitions
|
|
||||||
short GPU_rotation = 0;
|
|
||||||
DWORD GPU_width = 256;
|
|
||||||
DWORD GPU_height = 192*2;
|
|
||||||
DWORD rotationstartscan = 192;
|
|
||||||
DWORD rotationscanlines = 192*2;
|
|
||||||
|
|
||||||
void ScaleScreen(float factor)
|
void ScaleScreen(float factor)
|
||||||
{
|
{
|
||||||
if(factor==65535)
|
if(factor==65535)
|
||||||
factor = 1.5f;
|
factor = 1.5f;
|
||||||
else if(factor==65534)
|
else if(factor==65534)
|
||||||
factor = 2.5f;
|
factor = 2.5f;
|
||||||
if((GPU_rotation == 90) || (GPU_rotation == 270))
|
|
||||||
{
|
MainWindow->setClientSize((video.rotatedwidthgap() * factor), (video.rotatedheightgap() * factor));
|
||||||
MainWindow->setClientSize(((384 + ScreenGap) * factor), (256 * factor));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
MainWindow->setClientSize((256 * factor), ((384 + ScreenGap) * factor));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void translateXY(s32& x, s32& y)
|
void translateXY(s32& x, s32& y)
|
||||||
{
|
{
|
||||||
s32 tx=x, ty=y;
|
s32 tx=x, ty=y;
|
||||||
switch(GPU_rotation)
|
switch(video.rotation)
|
||||||
{
|
{
|
||||||
case 90:
|
case 90:
|
||||||
x = ty;
|
x = ty;
|
||||||
|
@ -412,7 +401,7 @@ void translateXY(s32& x, s32& y)
|
||||||
break;
|
break;
|
||||||
case 270:
|
case 270:
|
||||||
x = 255-ty;
|
x = 255-ty;
|
||||||
y = (tx-192-ScreenGap);
|
y = (tx-192-video.screengap);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -629,17 +618,8 @@ int CreateDDrawBuffers()
|
||||||
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
|
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
|
||||||
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
|
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
|
||||||
|
|
||||||
if ( (GPU_rotation == 0) || (GPU_rotation == 180) )
|
ddsd.dwWidth = video.rotatedwidth();
|
||||||
{
|
ddsd.dwHeight = video.rotatedheight();
|
||||||
ddsd.dwWidth = 256;
|
|
||||||
ddsd.dwHeight = 384;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if ( (GPU_rotation == 90) || (GPU_rotation == 270) )
|
|
||||||
{
|
|
||||||
ddsd.dwWidth = 384;
|
|
||||||
ddsd.dwHeight = 256;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IDirectDraw7_CreateSurface(lpDDraw, &ddsd, &lpBackSurface, NULL) != DD_OK) return -2;
|
if (IDirectDraw7_CreateSurface(lpDDraw, &ddsd, &lpBackSurface, NULL) != DD_OK) return -2;
|
||||||
|
|
||||||
|
@ -666,27 +646,27 @@ template<typename T, int bpp> static T convert(u16 val)
|
||||||
template<typename T, int bpp> static void doRotate(void* dst)
|
template<typename T, int bpp> static void doRotate(void* dst)
|
||||||
{
|
{
|
||||||
u8* buffer = (u8*)dst;
|
u8* buffer = (u8*)dst;
|
||||||
switch(GPU_rotation)
|
switch(video.rotation)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
case 180:
|
case 180:
|
||||||
{
|
{
|
||||||
if(ddsd.lPitch == 1024)
|
if(ddsd.lPitch == 1024)
|
||||||
{
|
{
|
||||||
if(GPU_rotation==180)
|
if(video.rotation==180)
|
||||||
for(int i = 0, j=98303; j>=0; i++,j--)
|
for(int i = 0, j=video.size()-1; j>=0; i++,j--)
|
||||||
((T*)buffer)[i] = convert<T,bpp>(((u16*)GPU_screen)[j]);
|
((T*)buffer)[i] = convert<T,bpp>(((u16*)GPU_screen)[j]);
|
||||||
else
|
else
|
||||||
for(int i = 0; i < 98304; i++)
|
for(int i = 0; i < video.size(); i++)
|
||||||
((T*)buffer)[i] = convert<T,bpp>(((u16*)GPU_screen)[i]);
|
((T*)buffer)[i] = convert<T,bpp>(((u16*)GPU_screen)[i]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(GPU_rotation==180)
|
if(video.rotation==180)
|
||||||
for(int y = 0; y < 384; y++)
|
for(int y = 0; y < video.height; y++)
|
||||||
{
|
{
|
||||||
for(int x = 0; x < 256; x++)
|
for(int x = 0; x < video.width; x++)
|
||||||
((T*)buffer)[x] = convert<T,bpp>(((u16*)GPU_screen)[384*256 - (y * 256) - x - 1]);
|
((T*)buffer)[x] = convert<T,bpp>(((u16*)GPU_screen)[video.height*video.width - (y * video.width) - x - 1]);
|
||||||
|
|
||||||
buffer += ddsd.lPitch;
|
buffer += ddsd.lPitch;
|
||||||
}
|
}
|
||||||
|
@ -704,7 +684,7 @@ template<typename T, int bpp> static void doRotate(void* dst)
|
||||||
case 90:
|
case 90:
|
||||||
case 270:
|
case 270:
|
||||||
{
|
{
|
||||||
if(GPU_rotation == 90)
|
if(video.rotation == 90)
|
||||||
for(int y = 0; y < 256; y++)
|
for(int y = 0; y < 256; y++)
|
||||||
{
|
{
|
||||||
for(int x = 0; x < 384; x++)
|
for(int x = 0; x < 384; x++)
|
||||||
|
@ -776,7 +756,7 @@ void Display()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gap
|
// Gap
|
||||||
if(ScreenGap > 0)
|
if(video.screengap > 0)
|
||||||
{
|
{
|
||||||
//u32 color = gapColors[win_fw_config.fav_colour];
|
//u32 color = gapColors[win_fw_config.fav_colour];
|
||||||
//u32 color_rev = (((color & 0xFF) << 16) | (color & 0xFF00) | ((color & 0xFF0000) >> 16));
|
//u32 color_rev = (((color & 0xFF) << 16) | (color & 0xFF00) | ((color & 0xFF0000) >> 16));
|
||||||
|
@ -851,7 +831,7 @@ DWORD WINAPI run()
|
||||||
|
|
||||||
InitSpeedThrottle();
|
InitSpeedThrottle();
|
||||||
|
|
||||||
osd->setRotate(GPU_rotation);
|
osd->setRotate(video.rotation);
|
||||||
|
|
||||||
if (DirectDrawCreateEx(NULL, (LPVOID*)&lpDDraw, IID_IDirectDraw7, NULL) != DD_OK)
|
if (DirectDrawCreateEx(NULL, (LPVOID*)&lpDDraw, IID_IDirectDraw7, NULL) != DD_OK)
|
||||||
{
|
{
|
||||||
|
@ -1131,7 +1111,7 @@ static BOOL LoadROM(const char * filename, const char * logicalName)
|
||||||
LoadSaveStateInfo();
|
LoadSaveStateInfo();
|
||||||
lagframecounter=0;
|
lagframecounter=0;
|
||||||
UpdateRecentRoms(logicalName);
|
UpdateRecentRoms(logicalName);
|
||||||
osd->setRotate(GPU_rotation);
|
osd->setRotate(video.rotation);
|
||||||
if (AutoRWLoad)
|
if (AutoRWLoad)
|
||||||
{
|
{
|
||||||
//Open Ram Watch if its auto-load setting is checked
|
//Open Ram Watch if its auto-load setting is checked
|
||||||
|
@ -1322,6 +1302,9 @@ int _main()
|
||||||
Desmume_InitOnce();
|
Desmume_InitOnce();
|
||||||
InitDecoder();
|
InitDecoder();
|
||||||
|
|
||||||
|
video.height = 384;
|
||||||
|
video.width = 256;
|
||||||
|
|
||||||
#ifdef WX_STUB
|
#ifdef WX_STUB
|
||||||
wxInitialize();
|
wxInitialize();
|
||||||
#endif
|
#endif
|
||||||
|
@ -1385,7 +1368,7 @@ int _main()
|
||||||
}
|
}
|
||||||
|
|
||||||
windowSize = GetPrivateProfileInt("Video","Window Size", 0, IniName);
|
windowSize = GetPrivateProfileInt("Video","Window Size", 0, IniName);
|
||||||
GPU_rotation = GetPrivateProfileInt("Video","Window Rotate", 0, IniName);
|
video.rotation = GetPrivateProfileInt("Video","Window Rotate", 0, IniName);
|
||||||
ForceRatio = GetPrivateProfileInt("Video","Window Force Ratio", 1, IniName);
|
ForceRatio = GetPrivateProfileInt("Video","Window Force Ratio", 1, IniName);
|
||||||
WndX = GetPrivateProfileInt("Video","WindowPosX", CW_USEDEFAULT, IniName);
|
WndX = GetPrivateProfileInt("Video","WindowPosX", CW_USEDEFAULT, IniName);
|
||||||
WndY = GetPrivateProfileInt("Video","WindowPosY", CW_USEDEFAULT, IniName);
|
WndY = GetPrivateProfileInt("Video","WindowPosY", CW_USEDEFAULT, IniName);
|
||||||
|
@ -1396,7 +1379,7 @@ int _main()
|
||||||
CommonSettings.hud.ShowLagFrameCounter = GetPrivateProfileBool("Display","Display Lag Counter", 0, IniName);
|
CommonSettings.hud.ShowLagFrameCounter = GetPrivateProfileBool("Display","Display Lag Counter", 0, IniName);
|
||||||
CommonSettings.hud.ShowMicrophone = GetPrivateProfileBool("Display","Display Microphone", 0, IniName);
|
CommonSettings.hud.ShowMicrophone = GetPrivateProfileBool("Display","Display Microphone", 0, IniName);
|
||||||
|
|
||||||
ScreenGap = GetPrivateProfileInt("Display", "ScreenGap", 0, IniName);
|
video.screengap = GetPrivateProfileInt("Display", "ScreenGap", 0, IniName);
|
||||||
FrameLimit = GetPrivateProfileInt("FrameLimit", "FrameLimit", 1, IniName);
|
FrameLimit = GetPrivateProfileInt("FrameLimit", "FrameLimit", 1, IniName);
|
||||||
CommonSettings.showGpu.main = GetPrivateProfileInt("Display", "MainGpu", 1, IniName) != 0;
|
CommonSettings.showGpu.main = GetPrivateProfileInt("Display", "MainGpu", 1, IniName) != 0;
|
||||||
CommonSettings.showGpu.sub = GetPrivateProfileInt("Display", "SubGpu", 1, IniName) != 0;
|
CommonSettings.showGpu.sub = GetPrivateProfileInt("Display", "SubGpu", 1, IniName) != 0;
|
||||||
|
@ -1426,7 +1409,7 @@ int _main()
|
||||||
//sprintf(text, "%s", DESMUME_NAME_AND_VERSION);
|
//sprintf(text, "%s", DESMUME_NAME_AND_VERSION);
|
||||||
MainWindow = new WINCLASS(CLASSNAME, hAppInst);
|
MainWindow = new WINCLASS(CLASSNAME, hAppInst);
|
||||||
DWORD dwStyle = WS_CAPTION| WS_SYSMENU | WS_SIZEBOX | WS_MINIMIZEBOX | WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
|
DWORD dwStyle = WS_CAPTION| WS_SYSMENU | WS_SIZEBOX | WS_MINIMIZEBOX | WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
|
||||||
if (!MainWindow->create(DESMUME_NAME_AND_VERSION, WndX/*CW_USEDEFAULT*/, WndY/*CW_USEDEFAULT*/, 256,384+ScreenGap,
|
if (!MainWindow->create(DESMUME_NAME_AND_VERSION, WndX/*CW_USEDEFAULT*/, WndY/*CW_USEDEFAULT*/, 256,384+video.screengap,
|
||||||
WS_CAPTION| WS_SYSMENU | WS_SIZEBOX | WS_MINIMIZEBOX | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
|
WS_CAPTION| WS_SYSMENU | WS_SIZEBOX | WS_MINIMIZEBOX | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
|
||||||
NULL))
|
NULL))
|
||||||
{
|
{
|
||||||
|
@ -1435,7 +1418,7 @@ int _main()
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
gpu_SetRotateScreen(GPU_rotation);
|
gpu_SetRotateScreen(video.rotation);
|
||||||
|
|
||||||
/* default the firmware settings, they may get changed later */
|
/* default the firmware settings, they may get changed later */
|
||||||
NDS_FillDefaultFirmwareConfigData( &win_fw_config);
|
NDS_FillDefaultFirmwareConfigData( &win_fw_config);
|
||||||
|
@ -1452,14 +1435,7 @@ int _main()
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if((GPU_rotation == 90) || (GPU_rotation == 270))
|
MainWindow->setMinSize(video.rotatedwidthgap(), video.rotatedheightgap());
|
||||||
{
|
|
||||||
MainWindow->setMinSize(384+ScreenGap, 256);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
MainWindow->setMinSize(256, 384+ScreenGap);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
{
|
||||||
if(windowSize == 0)
|
if(windowSize == 0)
|
||||||
|
@ -1761,13 +1737,13 @@ void UpdateWndRects(HWND hwnd)
|
||||||
RECT rc;
|
RECT rc;
|
||||||
|
|
||||||
int wndWidth, wndHeight;
|
int wndWidth, wndHeight;
|
||||||
int defHeight = (384 + ScreenGap);
|
int defHeight = (384 + video.screengap);
|
||||||
float ratio;
|
float ratio;
|
||||||
int oneScreenHeight, gapHeight;
|
int oneScreenHeight, gapHeight;
|
||||||
|
|
||||||
GetClientRect(hwnd, &rc);
|
GetClientRect(hwnd, &rc);
|
||||||
|
|
||||||
if((GPU_rotation == 90) || (GPU_rotation == 270))
|
if((video.rotation == 90) || (video.rotation == 270))
|
||||||
{
|
{
|
||||||
wndWidth = (rc.bottom - rc.top);
|
wndWidth = (rc.bottom - rc.top);
|
||||||
wndHeight = (rc.right - rc.left);
|
wndHeight = (rc.right - rc.left);
|
||||||
|
@ -1782,7 +1758,7 @@ void UpdateWndRects(HWND hwnd)
|
||||||
oneScreenHeight = (192 * ratio);
|
oneScreenHeight = (192 * ratio);
|
||||||
gapHeight = (wndHeight - (oneScreenHeight * 2));
|
gapHeight = (wndHeight - (oneScreenHeight * 2));
|
||||||
|
|
||||||
if((GPU_rotation == 90) || (GPU_rotation == 270))
|
if((video.rotation == 90) || (video.rotation == 270))
|
||||||
{
|
{
|
||||||
// Main screen
|
// Main screen
|
||||||
ptClient.x = rc.left;
|
ptClient.x = rc.left;
|
||||||
|
@ -1797,7 +1773,7 @@ void UpdateWndRects(HWND hwnd)
|
||||||
MainScreenRect.bottom = ptClient.y;
|
MainScreenRect.bottom = ptClient.y;
|
||||||
|
|
||||||
//if there was no specified screen gap, extend the top screen to cover the extra column
|
//if there was no specified screen gap, extend the top screen to cover the extra column
|
||||||
if(ScreenGap == 0) MainScreenRect.right += gapHeight;
|
if(video.screengap == 0) MainScreenRect.right += gapHeight;
|
||||||
|
|
||||||
// Sub screen
|
// Sub screen
|
||||||
ptClient.x = (rc.left + oneScreenHeight + gapHeight);
|
ptClient.x = (rc.left + oneScreenHeight + gapHeight);
|
||||||
|
@ -1832,7 +1808,7 @@ void UpdateWndRects(HWND hwnd)
|
||||||
MainScreenRect.bottom = ptClient.y;
|
MainScreenRect.bottom = ptClient.y;
|
||||||
|
|
||||||
//if there was no specified screen gap, extend the top screen to cover the extra row
|
//if there was no specified screen gap, extend the top screen to cover the extra row
|
||||||
if(ScreenGap == 0) MainScreenRect.bottom += gapHeight;
|
if(video.screengap == 0) MainScreenRect.bottom += gapHeight;
|
||||||
|
|
||||||
// Sub screen
|
// Sub screen
|
||||||
ptClient.x = rc.left;
|
ptClient.x = rc.left;
|
||||||
|
@ -1856,7 +1832,7 @@ void UpdateWndRects(HWND hwnd)
|
||||||
|
|
||||||
void UpdateScreenRects()
|
void UpdateScreenRects()
|
||||||
{
|
{
|
||||||
if((GPU_rotation == 90) || (GPU_rotation == 270))
|
if((video.rotation == 90) || (video.rotation == 270))
|
||||||
{
|
{
|
||||||
// Main screen
|
// Main screen
|
||||||
MainScreenSrcRect.left = 0;
|
MainScreenSrcRect.left = 0;
|
||||||
|
@ -1888,40 +1864,21 @@ void UpdateScreenRects()
|
||||||
|
|
||||||
void SetScreenGap(int gap)
|
void SetScreenGap(int gap)
|
||||||
{
|
{
|
||||||
RECT rc;
|
|
||||||
int height, width;
|
|
||||||
int oldgap, diff;
|
|
||||||
|
|
||||||
GetClientRect(MainWindow->getHWnd(), &rc);
|
video.screengap = gap;
|
||||||
width = (rc.right - rc.left);
|
MainWindow->setMinSize(video.rotatedwidthgap(), video.rotatedheightgap());
|
||||||
height = (rc.bottom - rc.top);
|
MainWindow->setClientSize(video.rotatedwidthgap(), video.rotatedheightgap());
|
||||||
|
|
||||||
oldgap = ScreenGap;
|
|
||||||
ScreenGap = gap;
|
|
||||||
|
|
||||||
if((GPU_rotation == 90) || (GPU_rotation == 270))
|
|
||||||
{
|
|
||||||
diff = ((gap - oldgap) * (height / 256.0f));
|
|
||||||
MainWindow->setMinSize((384 + gap), 256);
|
|
||||||
MainWindow->setClientSize(width+diff, height);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
diff = ((gap - oldgap) * (width / 256.0f));
|
|
||||||
MainWindow->setMinSize(256, (384 + gap));
|
|
||||||
MainWindow->setClientSize(width, height+diff);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//========================================================================================
|
//========================================================================================
|
||||||
void SetRotate(HWND hwnd, int rot)
|
void SetRotate(HWND hwnd, int rot)
|
||||||
{
|
{
|
||||||
RECT rc;
|
RECT rc;
|
||||||
int oldrot = GPU_rotation;
|
int oldrot = video.rotation;
|
||||||
int oldheight, oldwidth;
|
int oldheight, oldwidth;
|
||||||
int newheight, newwidth;
|
int newheight, newwidth;
|
||||||
|
|
||||||
GPU_rotation = rot;
|
video.rotation = rot;
|
||||||
|
|
||||||
GetClientRect(hwnd, &rc);
|
GetClientRect(hwnd, &rc);
|
||||||
oldwidth = (rc.right - rc.left);
|
oldwidth = (rc.right - rc.left);
|
||||||
|
@ -1956,43 +1913,7 @@ void SetRotate(HWND hwnd, int rot)
|
||||||
|
|
||||||
osd->setRotate(rot);
|
osd->setRotate(rot);
|
||||||
|
|
||||||
switch (rot)
|
MainWindow->setMinSize((video.rotatedwidthgap()), video.rotatedheightgap());
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
GPU_width = 256;
|
|
||||||
GPU_height = 192*2;
|
|
||||||
rotationstartscan = 192;
|
|
||||||
rotationscanlines = 192*2;
|
|
||||||
MainWindow->setMinSize(GPU_width, (GPU_height + ScreenGap));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 90:
|
|
||||||
GPU_rotation = 90;
|
|
||||||
GPU_width = 192*2;
|
|
||||||
GPU_height = 256;
|
|
||||||
rotationstartscan = 0;
|
|
||||||
rotationscanlines = 256;
|
|
||||||
MainWindow->setMinSize((GPU_width + ScreenGap), GPU_height);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 180:
|
|
||||||
GPU_rotation = 180;
|
|
||||||
GPU_width = 256;
|
|
||||||
GPU_height = 192*2;
|
|
||||||
rotationstartscan = 0;
|
|
||||||
rotationscanlines = 192*2;
|
|
||||||
MainWindow->setMinSize(GPU_width, (GPU_height + ScreenGap));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 270:
|
|
||||||
GPU_rotation = 270;
|
|
||||||
GPU_width = 192*2;
|
|
||||||
GPU_height = 256;
|
|
||||||
rotationstartscan = 0;
|
|
||||||
rotationscanlines = 256;
|
|
||||||
MainWindow->setMinSize((GPU_width + ScreenGap), GPU_height);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
MainWindow->setClientSize(newwidth, newheight);
|
MainWindow->setClientSize(newwidth, newheight);
|
||||||
|
|
||||||
|
@ -2005,15 +1926,15 @@ void SetRotate(HWND hwnd, int rot)
|
||||||
ddsd.dwSize = sizeof(ddsd);
|
ddsd.dwSize = sizeof(ddsd);
|
||||||
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
|
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
|
||||||
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
|
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
|
||||||
ddsd.dwWidth = GPU_width;
|
ddsd.dwWidth = video.rotatedwidth();
|
||||||
ddsd.dwHeight = GPU_height;
|
ddsd.dwHeight = video.rotatedheight();
|
||||||
|
|
||||||
IDirectDraw7_CreateSurface(lpDDraw, &ddsd, &lpBackSurface, NULL);
|
IDirectDraw7_CreateSurface(lpDDraw, &ddsd, &lpBackSurface, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
WritePrivateProfileInt("Video","Window Rotate",GPU_rotation,IniName);
|
WritePrivateProfileInt("Video","Window Rotate",video.rotation,IniName);
|
||||||
|
|
||||||
gpu_SetRotateScreen(GPU_rotation);
|
gpu_SetRotateScreen(video.rotation);
|
||||||
|
|
||||||
UpdateScreenRects();
|
UpdateScreenRects();
|
||||||
}
|
}
|
||||||
|
@ -2504,10 +2425,10 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
|
||||||
//Force Maintain Ratio
|
//Force Maintain Ratio
|
||||||
MainWindow->checkMenu(IDC_FORCERATIO, MF_BYCOMMAND | ((ForceRatio)?MF_CHECKED:MF_UNCHECKED));
|
MainWindow->checkMenu(IDC_FORCERATIO, MF_BYCOMMAND | ((ForceRatio)?MF_CHECKED:MF_UNCHECKED));
|
||||||
//Screen rotation
|
//Screen rotation
|
||||||
MainWindow->checkMenu(IDC_ROTATE0, MF_BYCOMMAND | ((GPU_rotation==0)?MF_CHECKED:MF_UNCHECKED));
|
MainWindow->checkMenu(IDC_ROTATE0, MF_BYCOMMAND | ((video.rotation==0)?MF_CHECKED:MF_UNCHECKED));
|
||||||
MainWindow->checkMenu(IDC_ROTATE90, MF_BYCOMMAND | ((GPU_rotation==90)?MF_CHECKED:MF_UNCHECKED));
|
MainWindow->checkMenu(IDC_ROTATE90, MF_BYCOMMAND | ((video.rotation==90)?MF_CHECKED:MF_UNCHECKED));
|
||||||
MainWindow->checkMenu(IDC_ROTATE180, MF_BYCOMMAND | ((GPU_rotation==180)?MF_CHECKED:MF_UNCHECKED));
|
MainWindow->checkMenu(IDC_ROTATE180, MF_BYCOMMAND | ((video.rotation==180)?MF_CHECKED:MF_UNCHECKED));
|
||||||
MainWindow->checkMenu(IDC_ROTATE270, MF_BYCOMMAND | ((GPU_rotation==270)?MF_CHECKED:MF_UNCHECKED));
|
MainWindow->checkMenu(IDC_ROTATE270, MF_BYCOMMAND | ((video.rotation==270)?MF_CHECKED:MF_UNCHECKED));
|
||||||
|
|
||||||
//Window Size
|
//Window Size
|
||||||
MainWindow->checkMenu(IDC_WINDOW1X, MF_BYCOMMAND | ((windowSize==1)?MF_CHECKED:MF_UNCHECKED));
|
MainWindow->checkMenu(IDC_WINDOW1X, MF_BYCOMMAND | ((windowSize==1)?MF_CHECKED:MF_UNCHECKED));
|
||||||
|
@ -2518,9 +2439,9 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
|
||||||
MainWindow->checkMenu(IDC_WINDOW4X, MF_BYCOMMAND | ((windowSize==4)?MF_CHECKED:MF_UNCHECKED));
|
MainWindow->checkMenu(IDC_WINDOW4X, MF_BYCOMMAND | ((windowSize==4)?MF_CHECKED:MF_UNCHECKED));
|
||||||
|
|
||||||
//Screen Separation
|
//Screen Separation
|
||||||
MainWindow->checkMenu(IDM_SCREENSEP_NONE, MF_BYCOMMAND | ((ScreenGap==0)? MF_CHECKED:MF_UNCHECKED));
|
MainWindow->checkMenu(IDM_SCREENSEP_NONE, MF_BYCOMMAND | ((video.screengap==0)? MF_CHECKED:MF_UNCHECKED));
|
||||||
MainWindow->checkMenu(IDM_SCREENSEP_BORDER, MF_BYCOMMAND | ((ScreenGap==5)? MF_CHECKED:MF_UNCHECKED));
|
MainWindow->checkMenu(IDM_SCREENSEP_BORDER, MF_BYCOMMAND | ((video.screengap==5)? MF_CHECKED:MF_UNCHECKED));
|
||||||
MainWindow->checkMenu(IDM_SCREENSEP_NDSGAP, MF_BYCOMMAND | ((ScreenGap==64)?MF_CHECKED:MF_UNCHECKED));
|
MainWindow->checkMenu(IDM_SCREENSEP_NDSGAP, MF_BYCOMMAND | ((video.screengap==64)?MF_CHECKED:MF_UNCHECKED));
|
||||||
|
|
||||||
//Counters / Etc.
|
//Counters / Etc.
|
||||||
MainWindow->checkMenu(ID_VIEW_FRAMECOUNTER, MF_BYCOMMAND | ((CommonSettings.hud.FrameCounterDisplay)?MF_CHECKED:MF_UNCHECKED));
|
MainWindow->checkMenu(ID_VIEW_FRAMECOUNTER, MF_BYCOMMAND | ((CommonSettings.hud.FrameCounterDisplay)?MF_CHECKED:MF_UNCHECKED));
|
||||||
|
@ -2597,7 +2518,7 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
|
||||||
|
|
||||||
//Save frame counter status
|
//Save frame counter status
|
||||||
WritePrivateProfileInt("Display", "FrameCounter", CommonSettings.hud.FrameCounterDisplay, IniName);
|
WritePrivateProfileInt("Display", "FrameCounter", CommonSettings.hud.FrameCounterDisplay, IniName);
|
||||||
WritePrivateProfileInt("Display", "ScreenGap", ScreenGap, IniName);
|
WritePrivateProfileInt("Display", "ScreenGap", video.screengap, IniName);
|
||||||
|
|
||||||
//Save Ram Watch information
|
//Save Ram Watch information
|
||||||
WritePrivateProfileInt("RamWatch", "SaveWindowPos", RWSaveWindowPos, IniName);
|
WritePrivateProfileInt("RamWatch", "SaveWindowPos", RWSaveWindowPos, IniName);
|
||||||
|
@ -2745,11 +2666,11 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
|
||||||
s32 x = (s32)((s16)LOWORD(lParam));
|
s32 x = (s32)((s16)LOWORD(lParam));
|
||||||
s32 y = (s32)((s16)HIWORD(lParam));
|
s32 y = (s32)((s16)HIWORD(lParam));
|
||||||
GetClientRect(hwnd,&r);
|
GetClientRect(hwnd,&r);
|
||||||
int defwidth = 256, defheight = (384+ScreenGap);
|
int defwidth = 256, defheight = (384+video.screengap);
|
||||||
int winwidth = (r.right-r.left), winheight = (r.bottom-r.top);
|
int winwidth = (r.right-r.left), winheight = (r.bottom-r.top);
|
||||||
|
|
||||||
// translate from scaling (screen resolution to 256x384 or 512x192)
|
// translate from scaling (screen resolution to 256x384 or 512x192)
|
||||||
switch (GPU_rotation)
|
switch (video.rotation)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
case 180:
|
case 180:
|
||||||
|
@ -2768,10 +2689,10 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
//translate for rotation
|
//translate for rotation
|
||||||
if (GPU_rotation != 0)
|
if (video.rotation != 0)
|
||||||
translateXY(x,y);
|
translateXY(x,y);
|
||||||
else
|
else
|
||||||
y-=(192+ScreenGap);
|
y-=(192+video.screengap);
|
||||||
if(x<0) x = 0; else if(x>255) x = 255;
|
if(x<0) x = 0; else if(x>255) x = 255;
|
||||||
if(y<0) y = 0; else if(y>192) y = 192;
|
if(y<0) y = 0; else if(y>192) y = 192;
|
||||||
NDS_setTouchPos(x, y);
|
NDS_setTouchPos(x, y);
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
class VideoInfo
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
|
||||||
|
int rotation;
|
||||||
|
int screengap;
|
||||||
|
|
||||||
|
int size() {
|
||||||
|
return width*height;
|
||||||
|
}
|
||||||
|
|
||||||
|
int rotatedwidth() {
|
||||||
|
switch(rotation) {
|
||||||
|
case 0:
|
||||||
|
return width;
|
||||||
|
case 90:
|
||||||
|
return height;
|
||||||
|
case 180:
|
||||||
|
return width;
|
||||||
|
case 270:
|
||||||
|
return height;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int rotatedheight() {
|
||||||
|
switch(rotation) {
|
||||||
|
case 0:
|
||||||
|
return height;
|
||||||
|
case 90:
|
||||||
|
return width;
|
||||||
|
case 180:
|
||||||
|
return height;
|
||||||
|
case 270:
|
||||||
|
return width;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int rotatedwidthgap() {
|
||||||
|
switch(rotation) {
|
||||||
|
case 0:
|
||||||
|
return width;
|
||||||
|
case 90:
|
||||||
|
return height + screengap;
|
||||||
|
case 180:
|
||||||
|
return width;
|
||||||
|
case 270:
|
||||||
|
return height + screengap;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int rotatedheightgap() {
|
||||||
|
switch(rotation) {
|
||||||
|
case 0:
|
||||||
|
return height + screengap;
|
||||||
|
case 90:
|
||||||
|
return width;
|
||||||
|
case 180:
|
||||||
|
return height + screengap;
|
||||||
|
case 270:
|
||||||
|
return width;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in New Issue