1
0
mirror of https://github.com/DxWnd/DxWnd.reloaded synced 2024-12-30 09:25:35 +01:00
DxWnd.reloaded/dll/dxwcore.hpp

452 lines
10 KiB
C++
Raw Normal View History

#include <windows.h>
#include "syslibs.h"
#define DDSQLEN 0x20
#define MAXFONTS 0x40
2017-03-25 09:59:46 -04:00
#define WS_OVERLAPPEDTHIN (WS_OVERLAPPED | \
WS_CAPTION | \
WS_SYSMENU | \
WS_THICKFRAME | \
WS_MINIMIZEBOX | \
WS_MAXIMIZEBOX)
typedef struct {
DWORD dwTimerType;
union{
struct {
UINT uTimerId;
UINT uDelay;
UINT uResolution;
LPTIMECALLBACK lpTimeProc;
DWORD_PTR dwUser;
UINT fuEvent;
};
struct {
HWND hWnd;
UINT_PTR nIDEvent;
UINT uElapse;
TIMERPROC lpTimerFunc;
};
} t;
} TimerEvent_Type;
typedef struct {
LPDIRECTDRAWSURFACE lpdds;
USHORT uRef;
USHORT uRole;
USHORT uVersion;
2017-03-25 09:58:54 -04:00
DWORD dwCaps;
} SurfaceDB_Type;
typedef struct {
LPDIRECTDRAWSURFACE lpdds;
DWORD dwCaps;
} CapsDB_Type;
typedef enum {
2017-03-25 09:58:54 -04:00
SURFACE_ROLE_PRIMARY = 0,
SURFACE_ROLE_BACKBUFFER,
2017-03-25 09:59:46 -04:00
SURFACE_ROLE_ZBUFFER,
SURFACE_ROLE_3DREF,
SURFACE_ROLE_UNKNOWN
} Enum_Surface_Role_Type;
typedef struct {
HFONT font;
HFONT scaled;
} FontDB_Type;
class dxwCore
{
// Construction/destruction
public:
dxwCore();
virtual ~dxwCore();
// Operations
public: // methods
void InitTarget(TARGETMAP *);
void SethWnd(HWND hwnd);
void SethWnd(HWND hwnd, HWND hwndfps) {hWnd=hwnd; hWndFPS=hwndfps;}
void InitWindowPos(int, int, int, int);
HWND GethWnd(void) {return hWnd;}
void SetScreenSize(void);
void SetScreenSize(int x, int y);
DWORD GetScreenWidth(void) {return dwScreenWidth;}
DWORD GetScreenHeight(void) {return dwScreenHeight;}
void SetFullScreen(BOOL);
void SetFullScreen(BOOL, int);
BOOL IsFullScreen();
BOOL IsToRemap(HDC);
BOOL IsDesktop(HWND);
BOOL IsRealDesktop(HWND);
POINT FixCursorPos(POINT);
void FixNCHITCursorPos(LPPOINT);
void SetClipCursor(void);
void EraseClipCursor(void);
void InitializeClipCursorState(void);
BOOL IsClipCursorActive(void);
BOOL IsValidMainWindow();
RECT MapWindowRect(LPRECT);
RECT MapWindowRect(void);
RECT MapClientRect(LPRECT);
void MapClient(LPPOINT);
void MapClient(LPRECT);
void MapClient(int *, int *, int *, int *);
void MapClient(int *, int *);
//void MapClient(float *, float *);
void UnmapClient(LPPOINT);
void UnmapClient(int *, int *);
void UnmapClient(int *, int *, int *, int *);
void UnmapClient(LPRECT);
void MapWindow(LPPOINT);
void MapWindow(LPRECT);
void MapWindow(int *, int *, int *, int *);
void UnmapWindow(LPRECT);
void UnmapWindow(LPPOINT);
void FixWorkarea(LPRECT);
void UpdateDesktopCoordinates();
RECT GetScreenRect(void);
RECT GetUnmappedScreenRect();
RECT GetWindowRect(RECT);
RECT GetClientRect(RECT);
POINT GetFrameOffset();
POINT AddCoordinates(POINT, POINT);
RECT AddCoordinates(RECT, POINT);
POINT SubCoordinates(POINT, POINT);
POINT ClientOffset(HWND);
void AutoScale();
void ScreenRefresh(void);
BOOL HandleFPS(void);
BOOL ishWndFPS(HWND);
DWORD GetTickCount(void);
void GetSystemTime(LPSYSTEMTIME);
void GetSystemTimeAsFileTime(LPFILETIME);
DWORD StretchTime(DWORD);
DWORD StretchCounter(DWORD);
LARGE_INTEGER StretchCounter(LARGE_INTEGER);
void ShowOverlay();
void ShowOverlay(HDC);
void ShowOverlay(HDC, int, int);
void ShowOverlay(LPDIRECTDRAWSURFACE);
char *GetTSCaption(void);
char *GetTSCaption(int);
void DoSlow(int);
void ShowBanner(HWND);
void HideDesktop(HWND);
POINT ScreenToClient(POINT);
int GetDLLIndex(char *);
void PushDLL(char *, int);
void FixStyle(char *, HWND, WPARAM, LPARAM);
void FixWindowFrame(HWND);
DWORD FixWinStyle(DWORD);
DWORD FixWinExStyle(DWORD);
HDC AcquireEmulatedDC(HWND);
BOOL ReleaseEmulatedDC(HWND);
BOOL IsVirtual(HDC);
void ResetEmulatedDC();
int VirtualOffsetX, VirtualOffsetY, VirtualExtentX, VirtualExtentY;
void DumpPalette(DWORD, LPPALETTEENTRY);
void PushTimer(UINT, UINT, UINT, LPTIMECALLBACK, DWORD_PTR, UINT);
void PushTimer(HWND, UINT_PTR, UINT, TIMERPROC);
void PopTimer(UINT);
void PopTimer(HWND, UINT_PTR);
void RenewTimers();
BOOL CheckScreenResolution(unsigned int, unsigned int);
LARGE_INTEGER StretchLargeCounter(LARGE_INTEGER);
UINT MapKeysConfig(UINT, LPARAM, WPARAM);
void MapKeysInit();
void SetVSyncDelays(UINT);
void VSyncWait();
void VSyncWaitLine(DWORD);
void DumpDesktopStatus();
void ToggleFreezedTime();
void GetMonitorWorkarea(LPRECT, BOOL);
void CalculateWindowPos(HWND, DWORD, DWORD, LPWINDOWPOS);
void MessagePump(void);
void Mark(HDC, BOOL, COLORREF, int, int, int, int);
void Mark(HDC, BOOL, COLORREF, RECT);
public: // simple data variables
int MonitorId;
BOOL Windowize;
BOOL IsVisible;
BOOL IsEmulated;
DDPIXELFORMAT ActualPixelFormat;
DDPIXELFORMAT VirtualPixelFormat;
DWORD dwDDVersion;
DWORD dwTargetDDVersion;
DWORD dwMaxDDVersion;
DWORD MaxDdrawInterface;
DWORD dwFlags1;
DWORD dwFlags2;
DWORD dwFlags3;
DWORD dwFlags4;
DWORD dwFlags5;
DWORD dwFlags6;
DWORD dwFlags7;
DWORD dwFlags8;
DWORD dwFlags9;
DWORD dwFlags10;
DWORD dwTFlags;
HWND hParentWnd;
HWND hChildWnd;
BOOL bActive;
BOOL bDInputAbs;
DWORD MaxFPS;
DWORD SwapEffect;
char *gsModules;
int TimeShift;
long iPosX;
long iPosY;
long iSizX;
long iSizY;
long iPos0X;
long iPos0Y;
long iSiz0X;
long iSiz0Y;
long iMaxW;
long iMaxH;
int iRatioX;
int iRatioY;
char *CustomOpenGLLib;
WORD palVersion;
WORD palNumEntries;
PALETTEENTRY palPalEntry[256];
short FakeVersionId;
short Coordinates;
short MaxScreenRes;
short SlowRatio;
short ScanLine;
HDC RealHDC;
HDC VirtualHDC;
int GDIEmulationMode;
BOOL TimeFreeze;
RECT VirtualDesktop;
BOOL bHintActive;
BOOL bAutoScale;
DWORD dwRealScreenWidth;
DWORD dwRealScreenHeight;
// Implementation
protected:
LONG dwScreenWidth;
LONG dwScreenHeight;
BOOL FullScreen;
HWND hWnd, hWndFPS;
HBITMAP VirtualPic;
RECT VirtualPicRect;
private:
BOOL MustShowOverlay;
void ShowFPS(HDC, int, int);
void ShowTimeStretching(HDC, int, int);
TimerEvent_Type TimerEvent;
DWORD gdwRefreshRate;
#define MAXREFRESHDELAYCOUNT 20
int iRefreshDelays[MAXREFRESHDELAYCOUNT];
int iRefreshDelayCount;
BOOL ClipCursorToggleState;
};
class dxwSStack
{
public:
dxwSStack();
virtual ~dxwSStack();
public:
char *ExplainSurfaceRole(LPDIRECTDRAWSURFACE);
void ClearSurfaceList();
2017-03-25 09:58:54 -04:00
void PushPrimarySurface(LPDIRECTDRAWSURFACE, int, DWORD);
BOOL IsAPrimarySurface(LPDIRECTDRAWSURFACE);
void UnrefSurface(LPDIRECTDRAWSURFACE);
LPDIRECTDRAWSURFACE GetPrimarySurface(void);
2017-03-25 09:58:54 -04:00
void PushBackBufferSurface(LPDIRECTDRAWSURFACE, int, DWORD);
BOOL IsABackBufferSurface(LPDIRECTDRAWSURFACE);
2017-03-25 09:58:54 -04:00
LPDIRECTDRAWSURFACE GetZBufferSurface(void);
void PushZBufferSurface(LPDIRECTDRAWSURFACE, int, DWORD);
BOOL IsAZBufferSurface(LPDIRECTDRAWSURFACE);
2017-03-25 09:59:46 -04:00
LPDIRECTDRAWSURFACE GetBackBufferSurface(void);
void Push3DRefSurface(LPDIRECTDRAWSURFACE, int, DWORD);
BOOL IsA3DRefSurface(LPDIRECTDRAWSURFACE);
LPDIRECTDRAWSURFACE Get3DRefBufferSurface(void);
void PopSurface(LPDIRECTDRAWSURFACE);
DWORD DuplicateSurface(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, int);
2017-03-25 09:58:54 -04:00
DWORD GetCaps(LPDIRECTDRAWSURFACE);
2017-03-25 09:59:46 -04:00
SurfaceDB_Type *GetSurface(LPDIRECTDRAWSURFACE);
protected:
SurfaceDB_Type SurfaceDB[DDSQLEN+1];
LPDIRECTDRAWSURFACE lpDDSPrimary;
LPDIRECTDRAWSURFACE lpDDSBackBuffer;
2017-03-25 09:58:54 -04:00
LPDIRECTDRAWSURFACE lpDDSZBuffer;
2017-03-25 09:59:46 -04:00
LPDIRECTDRAWSURFACE lpDDS3DRef;
private:
2017-03-25 09:58:54 -04:00
void PushSurface(LPDIRECTDRAWSURFACE, USHORT, USHORT, DWORD);
LPDIRECTDRAWSURFACE GetSurfaceByRole(USHORT);
void SetSurfaceEntry(LPDIRECTDRAWSURFACE, USHORT, USHORT);
};
typedef struct {
HWND hwnd;
WNDPROC wndproc;
int w;
int h;
} wndstack_entry;
class dxwWStack
{
public:
dxwWStack();
virtual ~dxwWStack();
public:
void Put(HWND, WNDPROC, int, int);
void PutProc(HWND, WNDPROC);
void PutSize(HWND, int, int);
BOOL GetSize(HWND, int *, int *);
WNDPROC GetProc(HWND);
private:
wndstack_entry *WhndStack;
int WhndTOS;
int WhndSize;
};
class dxwFStack
{
public:
dxwFStack();
virtual ~dxwFStack();
public:
void Push(HFONT, HFONT);
HFONT GetScaledFont(HFONT);
HFONT DeleteFont(HFONT);
protected:
FontDB_Type *FontDB;
};
extern dxwCore dxw;
extern dxwSStack dxwss;
extern dxwWStack dxwws;
extern dxwFStack fontdb;
typedef enum {
SYSLIBIDX_KERNEL32 = 0,
SYSLIBIDX_USER32,
SYSLIBIDX_GDI32,
SYSLIBIDX_IMELIB,
SYSLIBIDX_ADVAPI32,
SYSLIBIDX_OLE32,
SYSLIBIDX_DIRECTDRAW,
SYSLIBIDX_DIRECT3D8,
SYSLIBIDX_DIRECT3D9,
SYSLIBIDX_DIRECT3D10,
SYSLIBIDX_DIRECT3D10_1,
SYSLIBIDX_DIRECT3D11,
SYSLIBIDX_OPENGL,
SYSLIBIDX_MSVFW,
SYSLIBIDX_DSOUND,
SYSLIBIDX_WINMM,
SYSLIBIDX_IMM32,
SYSLIBIDX_DINPUT,
SYSLIBIDX_DINPUT8,
SYSLIBIDX_WINTRUST,
SYSLIBIDX_DIRECT3D,
SYSLIBIDX_DIRECT3D700,
SYSLIBIDX_IMAGEHLP,
SYSLIBIDX_COMDLG32,
SYSLIBIDX_COMCTL32,
SYSLIBIDX_AVIFIL32,
SYSLIBIDX_GLIDE,
SYSLIBIDX_GLIDE2,
SYSLIBIDX_GLIDE3,
SYSLIBIDX_SMACKW32,
SYSLIBIDX_WING32,
FREE6,
SYSLIBIDX_MAX
}
enum_syslibraries;
#ifdef SYSLIBNAMES_DEFINES
char *SysNames[]={
"kernel32",
"USER32",
"GDI32",
"imelib",
"ADVAPI32",
"ole32",
"ddraw",
"d3d8",
"d3d9",
"d3d10",
"d3d10_1",
"d3d11",
"opengl32",
"msvfw32",
"dsound",
"winmm",
"imm32",
"dinput",
"dinput8",
"wintrust",
"d3dim",
"d3dim700",
"imagehlp",
"comdlg32",
"comctl32",
"AVIFIL32",
"_", "_", "_", "_", "_", "_", // 6 free slots
NULL
};
#else
extern char *SysNames[];
#endif
enum {
HINT_HINT = 0,
HINT_DDRAW, HINT_D3D8, HINT_D3D9, HINT_D3D10,
HINT_D3D11, HINT_OPENGL, HINT_DSOUND, HINT_DINPUT,
HINT_DINPUT8, HINT_MOVIES, HINT_D3D, HINT_IHLP,
HINT_FAKEOS, HINT_OBFUSCATED,HINT_SAFEDISC, HINT_SECUROM,
HINT_LIMITMEM, HINT_HOOKUPDATE,
HINT_LAST
};
enum {
DXVK_NONE=0,
DXVK_CLIPTOGGLE,
DXVK_REFRESH,
DXVK_LOGTOGGLE,
DXVK_PLOCKTOGGLE,
DXVK_FPSTOGGLE,
DXVK_TIMEFAST,
DXVK_TIMESLOW,
DXVK_TIMETOGGLE,
DXVK_ALTF4,
DXVK_PRINTSCREEN,
DXVK_CORNERIZE,
DXVK_FREEZETIME,
DXVK_FULLSCREEN,
DXVK_FAKEWORKAREA,
DXVK_FAKEDESKTOP,
DXVK_SIZE
};
enum {
GDIMODE_NONE = 0,
GDIMODE_STRETCHED,
GDIMODE_EMULATED,
GDIMODE_SHAREDDC
};
typedef HRESULT (WINAPI *ColorConversion_Type)(int, LPDIRECTDRAWSURFACE, RECT, LPDIRECTDRAWSURFACE *);
extern ColorConversion_Type pColorConversion;
extern void ToggleAcquiredDevices(BOOL);
extern GetWindowLong_Type pGetWindowLong;
extern SetWindowLong_Type pSetWindowLong;