From dbb69d89764e50198a5f3bd9dbccecb3ee8c2609 Mon Sep 17 00:00:00 2001 From: oz Date: Mon, 16 Nov 2020 17:12:31 +0300 Subject: [PATCH] fullscrn v2, ready. --- Doc/FuncStats.xlsx | Bin 31540 -> 31530 bytes SpaceCadetPinball/fullscrn.cpp | 239 ++++++++++++++++++++++++++++++--- SpaceCadetPinball/fullscrn.h | 20 ++- 3 files changed, 233 insertions(+), 26 deletions(-) diff --git a/Doc/FuncStats.xlsx b/Doc/FuncStats.xlsx index 2337dfbe43bfa814b44c8e353af1eec7c713c013..a4ce67b0c3786e49129646380df3b59d7c7af18e 100644 GIT binary patch delta 23871 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

    c_h9IQA?S9hTusoykb+P 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 OrXeDP7@vi}y#EKwfVKtz delta 23911 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

    d) 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 diff --git a/SpaceCadetPinball/fullscrn.cpp b/SpaceCadetPinball/fullscrn.cpp index d3d4498..059ec25 100644 --- a/SpaceCadetPinball/fullscrn.cpp +++ b/SpaceCadetPinball/fullscrn.cpp @@ -1,17 +1,56 @@ #include "pch.h" #include "fullscrn.h" +#include "render.h" +#include "winmain.h" int fullscrn::screen_mode; HWND fullscrn::hWnd; -tagRECT fullscrn::PubRect1; +tagRECT fullscrn::WindowRect1, fullscrn::WindowRect2; +rectangle_type fullscrn::WHRect; int fullscrn::fullscrn_flag1; int fullscrn::display_changed; int fullscrn::ChangeDisplay, fullscrn::SmthFullScrnFlag2; int fullscrn::trick; int fullscrn::MenuEnabled; HMENU fullscrn::MenuHandle; -int fullscrn::xDest, fullscrn::yDest; + +void fullscrn::init(int width, int height, int isFullscreen, HWND winHandle, HMENU menuHandle, int changeDisplay) +{ + WHRect.XPosition = 0; + WHRect.YPosition = 0; + ChangeDisplay = changeDisplay; + hWnd = winHandle; + MenuHandle = menuHandle; + WHRect.Width = width; + WHRect.Height = height; + + GetWindowRect(GetDesktopWindow(), &fullscrn::WindowRect1); + int widht2 = width + 2 * GetSystemMetrics(SM_CXBORDER); + int height2 = height + 2 * GetSystemMetrics(SM_CYBORDER); + int menuHeight = GetSystemMetrics(SM_CYMENU); + int captionHeight = GetSystemMetrics(SM_CYCAPTION); + int borderHeight = WindowRect1.bottom - WindowRect1.top - height2; + + WindowRect2.bottom = borderHeight / 2 - 2 + height2 + 4; + WindowRect2.right = (WindowRect1.right - WindowRect1.left - widht2) / 2 - 2 + widht2 + 4; + WindowRect2.left = (WindowRect1.right - WindowRect1.left - widht2) / 2 - 2; + WindowRect2.top = borderHeight / 2 - (captionHeight + menuHeight) - 2; + MoveWindow( + hWnd, + (WindowRect1.right - WindowRect1.left - widht2) / 2 - 2, + WindowRect2.top, + widht2 + 4, + WindowRect2.bottom - WindowRect2.top, + 0); + fullscrn_flag1 = 0; +} + +void fullscrn::shutdown() +{ + if (display_changed) + set_screen_mode(0); +} int fullscrn::set_screen_mode(int isFullscreen) { @@ -22,7 +61,7 @@ int fullscrn::set_screen_mode(int isFullscreen) if (isFullscreen) { if (IsWindowVisible(hWnd)) - GetWindowRect(hWnd, &PubRect1); + GetWindowRect(hWnd, &WindowRect2); enableFullscreen(); BYTE1(fullscrn_flag1) |= 0x80u; InvalidateRect(hWnd, nullptr, 1); @@ -104,10 +143,10 @@ int fullscrn::disableFullscreen() SetWindowPos( hWnd, nullptr, - PubRect1.left, - PubRect1.top, - PubRect1.right - PubRect1.left, - PubRect1.bottom - PubRect1.top, + WindowRect2.left, + WindowRect2.top, + WindowRect2.right - WindowRect2.left, + WindowRect2.bottom - WindowRect2.top, 0x14u); return 0; } @@ -135,30 +174,188 @@ bool fullscrn::set_menu_mode(int menuEnabled) void fullscrn::GetWindowCenter() { - int yDestLoc; // eax - HWND v1; // eax - struct tagRECT Rect; // [esp+4h] [ebp-10h] - - int dword_1025094 = 0, dword_1025098 = 0; // tmp, from render + int yPos; // eax + tagRECT Rect{}; // [esp+4h] [ebp-10h] if (screen_mode) { - v1 = GetDesktopWindow(); - GetWindowRect(v1, &Rect); - xDest = (Rect.right - dword_1025094 - Rect.left) / 2; - yDestLoc = (Rect.bottom - dword_1025098 - Rect.top) / 2; + GetWindowRect(GetDesktopWindow(), &Rect); + render::vscreen.XPosition = (Rect.right - render::vscreen.Width - Rect.left) / 2; + yPos = (Rect.bottom - render::vscreen.Height - Rect.top) / 2; } else { - xDest = 0; - yDestLoc = GetSystemMetrics(15); + render::vscreen.XPosition = 0; + yPos = GetSystemMetrics(15); } - yDest = yDestLoc; + render::vscreen.YPosition = yPos; if (MenuEnabled) - yDest -= GetSystemMetrics(15); + render::vscreen.YPosition -= GetSystemMetrics(15); } void fullscrn::force_redraw() { BYTE1(fullscrn_flag1) |= 0x80u; -} \ No newline at end of file +} + + +void fullscrn::center_in(HWND parent, HWND child) +{ + LONG right; // ebx + tagRECT childRect{}, parentRect{}, desktopRect{}; + + GetWindowRect(parent, &parentRect); + GetWindowRect(child, &childRect); + GetWindowRect(GetDesktopWindow(), &desktopRect); + if (display_changed) + { + desktopRect.bottom = 480; + desktopRect.left = 0; + desktopRect.top = 0; + right = 640; + desktopRect.right = 640; + parentRect.left = 0; + parentRect.top = 0; + parentRect.right = 640; + parentRect.bottom = 480; + } + else + { + right = desktopRect.right; + } + + int childHeight = childRect.bottom - childRect.top; + int smthWidth = parentRect.left + (parentRect.right + childRect.left - childRect.right - parentRect.left) / 2; + int smthHeight = parentRect.top + (parentRect.bottom + childRect.top - childRect.bottom - parentRect.top) / 2; + if (childRect.right - childRect.left + smthWidth > right) + smthWidth = right - (childRect.right - childRect.left); + if (childHeight + smthHeight > desktopRect.bottom) + smthHeight = desktopRect.bottom - childHeight; + if (smthWidth < desktopRect.left) + smthWidth = desktopRect.left; + if (smthHeight < desktopRect.top) + smthHeight = desktopRect.top; + MoveWindow(child, smthWidth, smthHeight, childRect.right - childRect.left, childRect.bottom - childRect.top, 0); +} + +int fullscrn::displaychange() +{ + int result = 0; + if (SmthFullScrnFlag2) + { + SmthFullScrnFlag2 = 0; + } + else + { + if (screen_mode && display_changed) + { + display_changed = 0; + screen_mode = 0; + setWindowFlagsDisDlg(); + BYTE1(fullscrn_flag1) |= 0x80u; + InvalidateRect(hWnd, nullptr, 1); + set_menu_mode(1); + SetWindowPos( + hWnd, + nullptr, + WindowRect2.left, + WindowRect2.top, + WindowRect2.right - WindowRect2.left, + WindowRect2.bottom - WindowRect2.top, + 0x1Cu); + result = 1; + } + else + { + SetWindowPos( + hWnd, + nullptr, + WindowRect2.left, + WindowRect2.top, + WindowRect2.right - WindowRect2.left, + WindowRect2.bottom - WindowRect2.top, + 0x14u); + } + center_in(GetDesktopWindow(), hWnd); + } + return result; +} + +void fullscrn::activate(int flag) +{ + if (screen_mode) + { + if (!flag) + { + set_screen_mode(0); + SetWindowPos(hWnd, (HWND)1, 0, 0, 0, 0, 0x13u); + } + } +} + +void fullscrn::fillRect(int right, int bottom) +{ + // Weird reg usage, should be zero + int v2 = 0; // ebx + int v3 = 0; // edi + + RECT rc; + HGDIOBJ brush = CreateSolidBrush(0); + if (brush) + { + HDC dc = winmain::_GetDC(hWnd); + HGDIOBJ brushHandle = SelectObject(dc, brush); + if (dc) + { + rc.right = right + v2 + 1; + rc.bottom = bottom + v3 + 1; + rc.left = v2; + rc.top = v3; + FillRect(dc, &rc, static_cast(brush)); + ReleaseDC(hWnd, dc); + } + SelectObject(dc, brushHandle); + DeleteObject(brush); + } +} + +int fullscrn::convert_mouse_pos(unsigned int mouseXY) +{ + unsigned __int16 x = mouseXY & 0xffFF - render::vscreen.XPosition; + unsigned __int16 y = (mouseXY >> 16) - render::vscreen.YPosition; + return x | y << 16; +} + +void fullscrn::getminmaxinfo(MINMAXINFO* maxMin) +{ + maxMin->ptMaxSize.x = WindowRect2.right - WindowRect2.left; + maxMin->ptMaxSize.y = WindowRect2.bottom - WindowRect2.top; + maxMin->ptMaxPosition.x = WindowRect2.left; + maxMin->ptMaxPosition.y = WindowRect2.top; +} + +void fullscrn::paint() +{ + int menuHeight; + if (screen_mode) + { + if ((fullscrn_flag1 & 0x8000) == 0 && fullscrn_flag1) + { + if (fullscrn_flag1 & 1) + { + menuHeight = GetSystemMetrics(SM_CYMENU); + fillRect(WindowRect1.right - 1, menuHeight); + } + } + else + { + if (MenuEnabled) + menuHeight = GetSystemMetrics(SM_CYMENU); + else + menuHeight = 0; + fillRect(WindowRect1.right, menuHeight + WindowRect1.bottom); + } + } + render::paint(); + fullscrn_flag1 = 0; +} diff --git a/SpaceCadetPinball/fullscrn.h b/SpaceCadetPinball/fullscrn.h index cad24c7..7969d64 100644 --- a/SpaceCadetPinball/fullscrn.h +++ b/SpaceCadetPinball/fullscrn.h @@ -1,4 +1,5 @@ #pragma once +#include "maths.h" #define BYTEn(x, n) (*((unsigned char*)&(x)+n)) #define BYTE1(x) BYTEn(x, 1) // byte 1 (counting from 0) @@ -10,23 +11,32 @@ public: static int screen_mode; static HWND hWnd; - static tagRECT PubRect1; + static tagRECT WindowRect1, WindowRect2; + static rectangle_type WHRect; static int fullscrn_flag1; static int display_changed; static int ChangeDisplay, SmthFullScrnFlag2; static int trick; + static void init(int width, int height, int isFullscreen, HWND winHandle, HMENU menuHandle, int changeDisplay); + static void shutdown(); static int set_screen_mode(int isFullscreen); static void force_redraw(); + static void center_in(HWND parent, HWND child); + static int displaychange(); + static void activate(int flag); + static int convert_mouse_pos(unsigned int mouseXY); + static void getminmaxinfo(MINMAXINFO* maxMin); + static void paint(); private : static int MenuEnabled; static HMENU MenuHandle; - static int xDest, yDest; - - static void GetWindowCenter(); + + static void GetWindowCenter(); static int disableWindowFlagsDisDlg(); static int setWindowFlagsDisDlg(); static int enableFullscreen(); - static int disableFullscreen(); + static int disableFullscreen(); static bool set_menu_mode(int menuEnabled); + static void fillRect(int right, int bottom); };