From f2759ffe65b00b1e49486e7ab050a1ac079921c1 Mon Sep 17 00:00:00 2001 From: Armada Date: Sun, 15 Jun 2014 00:23:43 +0200 Subject: [PATCH] Remove EmuWindow. All it did was raise complexity. --- Source/Core/Core/Core.cpp | 5 - Source/Core/DolphinWX/GLInterface/WGL.cpp | 33 ++- Source/Core/DolphinWX/GLInterface/WGL.h | 2 + Source/Core/VideoBackends/D3D/D3DBase.h | 1 + Source/Core/VideoBackends/D3D/Render.cpp | 22 +- Source/Core/VideoBackends/D3D/Render.h | 2 +- Source/Core/VideoBackends/D3D/VideoBackend.h | 2 + Source/Core/VideoBackends/D3D/main.cpp | 16 +- Source/Core/VideoBackends/OGL/Render.cpp | 3 +- Source/Core/VideoBackends/OGL/main.cpp | 1 - Source/Core/VideoCommon/EmuWindow.cpp | 202 ------------------ Source/Core/VideoCommon/EmuWindow.h | 19 -- Source/Core/VideoCommon/VideoCommon.vcxproj | 2 - .../VideoCommon/VideoCommon.vcxproj.filters | 6 - 14 files changed, 32 insertions(+), 284 deletions(-) delete mode 100644 Source/Core/VideoCommon/EmuWindow.cpp delete mode 100644 Source/Core/VideoCommon/EmuWindow.h diff --git a/Source/Core/Core/Core.cpp b/Source/Core/Core/Core.cpp index 87d6cdd9c0..3071259aeb 100644 --- a/Source/Core/Core/Core.cpp +++ b/Source/Core/Core/Core.cpp @@ -6,7 +6,6 @@ #ifdef _WIN32 #include -#include "VideoCommon/EmuWindow.h" #endif #include "AudioCommon/AudioCommon.h" @@ -267,10 +266,6 @@ void Stop() // - Hammertime! INFO_LOG(CONSOLE, "%s", StopMessage(true, "Main Emu thread stopped").c_str()); -#ifdef _WIN32 - EmuWindow::Close(); -#endif - // Clear on screen messages that haven't expired g_video_backend->Video_ClearMessages(); diff --git a/Source/Core/DolphinWX/GLInterface/WGL.cpp b/Source/Core/DolphinWX/GLInterface/WGL.cpp index 3409c49c07..adeb48e05e 100644 --- a/Source/Core/DolphinWX/GLInterface/WGL.cpp +++ b/Source/Core/DolphinWX/GLInterface/WGL.cpp @@ -8,7 +8,6 @@ #include "DolphinWX/GLInterface/GLInterface.h" -#include "VideoCommon/EmuWindow.h" #include "VideoCommon/RenderBase.h" #include "VideoCommon/VertexShaderManager.h" #include "VideoCommon/VideoConfig.h" @@ -59,13 +58,16 @@ bool cInterfaceWGL::PeekMessages() // Show the current FPS void cInterfaceWGL::UpdateFPSDisplay(const std::string& text) { - EmuWindow::SetWindowText(text); + SetWindowTextA((HWND)m_window_handle, text.c_str()); } // Create rendering window. // Call browser: Core.cpp:EmuThread() > main.cpp:Video_Initialize() bool cInterfaceWGL::Create(void *&window_handle) { + if (window_handle == nullptr) + return false; + int _tx, _ty, _twidth, _theight; Host_GetRenderWindowSize(_tx, _ty, _twidth, _theight); @@ -73,20 +75,12 @@ bool cInterfaceWGL::Create(void *&window_handle) s_backbuffer_width = _twidth; s_backbuffer_height = _theight; + m_window_handle = window_handle; + #ifdef _WIN32 dllHandle = LoadLibrary(TEXT("OpenGL32.dll")); #endif - window_handle = (void*)EmuWindow::Create((HWND)window_handle, GetModuleHandle(0), _T("Please wait...")); - if (window_handle == nullptr) - { - Host_SysMessage("failed to create window"); - return false; - } - - // Show the window - EmuWindow::Show(); - PIXELFORMATDESCRIPTOR pfd = // pfd Tells Windows How We Want Things To Be { sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor @@ -111,7 +105,7 @@ bool cInterfaceWGL::Create(void *&window_handle) int PixelFormat; // Holds The Results After Searching For A Match - if (!(hDC=GetDC(EmuWindow::GetWnd()))) { + if (!(hDC = GetDC((HWND)window_handle))) { PanicAlert("(1) Can't create an OpenGL Device context. Fail."); return false; } @@ -151,15 +145,16 @@ bool cInterfaceWGL::ClearCurrent() void cInterfaceWGL::Update() { RECT rcWindow; - if (!EmuWindow::GetParentWnd()) + HWND parent = GetParent((HWND)m_window_handle); + if (!parent) { // We are not rendering to a child window - use client size. - GetClientRect(EmuWindow::GetWnd(), &rcWindow); + GetClientRect((HWND)m_window_handle, &rcWindow); } else { // We are rendering to a child window - use parent size. - GetWindowRect(EmuWindow::GetParentWnd(), &rcWindow); + GetWindowRect(parent, &rcWindow); } // Get the new window width and height @@ -168,11 +163,11 @@ void cInterfaceWGL::Update() int height = rcWindow.bottom - rcWindow.top; // If we are rendering to a child window - if (EmuWindow::GetParentWnd() != 0 && + if (GetParent((HWND)m_window_handle) != 0 && (s_backbuffer_width != width || s_backbuffer_height != height) && width >= 4 && height >= 4) { - ::MoveWindow(EmuWindow::GetWnd(), 0, 0, width, height, FALSE); + ::MoveWindow((HWND)m_window_handle, 0, 0, width, height, FALSE); s_backbuffer_width = width; s_backbuffer_height = height; } @@ -192,7 +187,7 @@ void cInterfaceWGL::Shutdown() hRC = nullptr; } - if (hDC && !ReleaseDC(EmuWindow::GetWnd(), hDC)) + if (hDC && !ReleaseDC((HWND)m_window_handle, hDC)) { ERROR_LOG(VIDEO, "Attempt to release device context failed."); hDC = nullptr; diff --git a/Source/Core/DolphinWX/GLInterface/WGL.h b/Source/Core/DolphinWX/GLInterface/WGL.h index 5b1f9817ee..7a0d3ff20d 100644 --- a/Source/Core/DolphinWX/GLInterface/WGL.h +++ b/Source/Core/DolphinWX/GLInterface/WGL.h @@ -21,4 +21,6 @@ public: void Update(); bool PeekMessages(); + + void* m_window_handle; }; diff --git a/Source/Core/VideoBackends/D3D/D3DBase.h b/Source/Core/VideoBackends/D3D/D3DBase.h index 3418a0c03d..f700c7b2ce 100644 --- a/Source/Core/VideoBackends/D3D/D3DBase.h +++ b/Source/Core/VideoBackends/D3D/D3DBase.h @@ -41,6 +41,7 @@ void Close(); extern ID3D11Device* device; extern ID3D11DeviceContext* context; extern IDXGISwapChain* swapchain; +extern HWND hWnd; extern bool bFrameInProgress; void Reset(); diff --git a/Source/Core/VideoBackends/D3D/Render.cpp b/Source/Core/VideoBackends/D3D/Render.cpp index f7c493577c..0db11ec1c2 100644 --- a/Source/Core/VideoBackends/D3D/Render.cpp +++ b/Source/Core/VideoBackends/D3D/Render.cpp @@ -26,7 +26,6 @@ #include "VideoCommon/AVIDump.h" #include "VideoCommon/BPFunctions.h" -#include "VideoCommon/EmuWindow.h" #include "VideoCommon/Fifo.h" #include "VideoCommon/FPSCounter.h" #include "VideoCommon/ImageWrite.h" @@ -178,7 +177,7 @@ void CreateScreenshotTexture(const TargetRectangle& rc) D3D::SetDebugObjectName((ID3D11DeviceChild*)s_screenshot_texture, "staging screenshot texture"); } -Renderer::Renderer() +Renderer::Renderer(void *&window_handle) { int x, y, w_temp, h_temp; @@ -186,7 +185,7 @@ Renderer::Renderer() Host_GetRenderWindowSize(x, y, w_temp, h_temp); - D3D::Create(EmuWindow::GetWnd()); + D3D::Create((HWND)window_handle); s_backbuffer_width = D3D::GetBackBufferWidth(); s_backbuffer_height = D3D::GetBackBufferHeight(); @@ -275,21 +274,8 @@ TargetRectangle Renderer::ConvertEFBRectangle(const EFBRectangle& rc) // size. bool Renderer::CheckForResize() { - while (EmuWindow::IsSizing()) - Sleep(10); - - if (EmuWindow::GetParentWnd()) - { - // Re-stretch window to parent window size again, if it has a parent window. - RECT rcParentWindow; - GetWindowRect(EmuWindow::GetParentWnd(), &rcParentWindow); - int width = rcParentWindow.right - rcParentWindow.left; - int height = rcParentWindow.bottom - rcParentWindow.top; - if (width != Renderer::GetBackbufferWidth() || height != Renderer::GetBackbufferHeight()) - MoveWindow(EmuWindow::GetWnd(), 0, 0, width, height, FALSE); - } RECT rcWindow; - GetClientRect(EmuWindow::GetWnd(), &rcWindow); + GetClientRect(D3D::hWnd, &rcWindow); int client_width = rcWindow.right - rcWindow.left; int client_height = rcWindow.bottom - rcWindow.top; @@ -866,7 +852,7 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbHeight,const EFBRectangl { s_recordWidth = GetTargetRectangle().GetWidth(); s_recordHeight = GetTargetRectangle().GetHeight(); - bAVIDumping = AVIDump::Start(EmuWindow::GetParentWnd(), s_recordWidth, s_recordHeight); + bAVIDumping = AVIDump::Start(D3D::hWnd, s_recordWidth, s_recordHeight); if (!bAVIDumping) { PanicAlert("Error dumping frames to AVI."); diff --git a/Source/Core/VideoBackends/D3D/Render.h b/Source/Core/VideoBackends/D3D/Render.h index 0b71ad4801..175d521ca2 100644 --- a/Source/Core/VideoBackends/D3D/Render.h +++ b/Source/Core/VideoBackends/D3D/Render.h @@ -9,7 +9,7 @@ namespace DX11 class Renderer : public ::Renderer { public: - Renderer(); + Renderer(void *&window_handle); ~Renderer(); void SetColorMask() override; diff --git a/Source/Core/VideoBackends/D3D/VideoBackend.h b/Source/Core/VideoBackends/D3D/VideoBackend.h index 6de3ceb743..fd58ab1ff4 100644 --- a/Source/Core/VideoBackends/D3D/VideoBackend.h +++ b/Source/Core/VideoBackends/D3D/VideoBackend.h @@ -21,6 +21,8 @@ class VideoBackend : public VideoBackendHardware void UpdateFPSDisplay(const std::string&) override; unsigned int PeekMessages() override; + + void* m_window_handle; }; } diff --git a/Source/Core/VideoBackends/D3D/main.cpp b/Source/Core/VideoBackends/D3D/main.cpp index 138b83d16c..043b22e35f 100644 --- a/Source/Core/VideoBackends/D3D/main.cpp +++ b/Source/Core/VideoBackends/D3D/main.cpp @@ -29,7 +29,6 @@ #include "VideoCommon/BPStructs.h" #include "VideoCommon/CommandProcessor.h" -#include "VideoCommon/EmuWindow.h" #include "VideoCommon/Fifo.h" #include "VideoCommon/IndexGenerator.h" #include "VideoCommon/OnScreenDisplay.h" @@ -58,7 +57,8 @@ unsigned int VideoBackend::PeekMessages() void VideoBackend::UpdateFPSDisplay(const std::string& text) { - EmuWindow::SetWindowText(StringFromFormat("%s | D3D | %s", scm_rev_str, text.c_str())); + std::string str = StringFromFormat("%s | D3D | %s", scm_rev_str, text.c_str()); + SetWindowTextA((HWND)m_window_handle, str.c_str()); } std::string VideoBackend::GetName() const @@ -147,6 +147,9 @@ void VideoBackend::ShowConfig(void *_hParent) bool VideoBackend::Initialize(void *&window_handle) { + if (window_handle == nullptr) + return false; + InitializeShared(); InitBackendInfo(); @@ -158,12 +161,7 @@ bool VideoBackend::Initialize(void *&window_handle) g_Config.VerifyValidity(); UpdateActiveConfig(); - window_handle = (void*)EmuWindow::Create((HWND)window_handle, GetModuleHandle(0), _T("Loading - Please wait.")); - if (window_handle == nullptr) - { - ERROR_LOG(VIDEO, "An error has occurred while trying to create the window."); - return false; - } + m_window_handle = window_handle; s_BackendInitialized = true; @@ -178,7 +176,7 @@ void VideoBackend::Video_Prepare() s_swapRequested = FALSE; // internal interfaces - g_renderer = new Renderer; + g_renderer = new Renderer(m_window_handle); g_texture_cache = new TextureCache; g_vertex_manager = new VertexManager; g_perf_query = new PerfQuery; diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index a1e41c5179..481d61454f 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -56,7 +56,6 @@ #endif #ifdef _WIN32 -#include "VideoCommon/EmuWindow.h" #endif #if defined _WIN32 || defined HAVE_LIBAV #include "VideoCommon/AVIDump.h" @@ -1461,7 +1460,7 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbHeight,const EFBRectangl if (!bLastFrameDumped) { #ifdef _WIN32 - bAVIDumping = AVIDump::Start(EmuWindow::GetParentWnd(), w, h); + bAVIDumping = AVIDump::Start((HWND)((cInterfaceWGL*)GLInterface)->m_window_handle, w, h); #else bAVIDumping = AVIDump::Start(w, h); #endif diff --git a/Source/Core/VideoBackends/OGL/main.cpp b/Source/Core/VideoBackends/OGL/main.cpp index c84f2944b3..aa31573054 100644 --- a/Source/Core/VideoBackends/OGL/main.cpp +++ b/Source/Core/VideoBackends/OGL/main.cpp @@ -80,7 +80,6 @@ Make AA apply instantly during gameplay if possible #ifdef _WIN32 #include "Common/IniFile.h" -#include "VideoCommon/EmuWindow.h" #endif #if defined(HAVE_WX) && HAVE_WX diff --git a/Source/Core/VideoCommon/EmuWindow.cpp b/Source/Core/VideoCommon/EmuWindow.cpp deleted file mode 100644 index 7983b5d7a6..0000000000 --- a/Source/Core/VideoCommon/EmuWindow.cpp +++ /dev/null @@ -1,202 +0,0 @@ -// Copyright 2013 Dolphin Emulator Project -// Licensed under GPLv2 -// Refer to the license.txt file included. - -#include -#include - -#include "Core/ConfigManager.h" -#include "Core/Core.h" -#include "Core/Host.h" - -#include "VideoCommon/EmuWindow.h" -#include "VideoCommon/Fifo.h" -#include "VideoCommon/VideoBackendBase.h" -#include "VideoCommon/VideoConfig.h" - -namespace EmuWindow -{ -HWND m_hWnd = nullptr; -HWND m_hParent = nullptr; -HINSTANCE m_hInstance = nullptr; -WNDCLASSEX wndClass; -const TCHAR m_szClassName[] = _T("DolphinEmuWnd"); -int g_winstyle; -static volatile bool s_sizing; -static const int WM_SETTEXT_CUSTOM = WM_USER + WM_SETTEXT; - -bool IsSizing() -{ - return s_sizing; -} - -HWND GetWnd() -{ - return m_hWnd; -} - -HWND GetParentWnd() -{ - return m_hParent; -} - -LRESULT CALLBACK WndProc( HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam ) -{ - switch ( iMsg ) - { - case WM_PAINT: - { - HDC hdc; - PAINTSTRUCT ps; - hdc = BeginPaint(hWnd, &ps); - EndPaint(hWnd, &ps); - } - break; - - case WM_ENTERSIZEMOVE: - s_sizing = true; - break; - - case WM_EXITSIZEMOVE: - s_sizing = false; - break; - - /* Post the mouse events to the main window, it's necessary, because the difference between the - keyboard inputs is that these events only appear here, not in the parent window or any other WndProc()*/ - case WM_LBUTTONDOWN: - if (g_ActiveConfig.backend_info.bSupports3DVision && g_ActiveConfig.b3DVision) - { - // This basically throws away the left button down input when b3DVision is activated so WX - // can't get access to it, stopping focus pulling on mouse click. - // (Input plugins use a different system so it doesn't cause too much weirdness) - break; - } - case WM_LBUTTONUP: - case WM_LBUTTONDBLCLK: - PostMessage(GetParentWnd(), iMsg, wParam, lParam); - break; - - // This is called when we close the window when we render to a separate window - case WM_CLOSE: - // When the user closes the window, we post an event to the main window to call Stop() - // Which then handles all the necessary steps to Shutdown the core - if (m_hParent == nullptr) - { - // Stop the game - //PostMessage(m_hParent, WM_USER, WM_USER_STOP, 0); - } - break; - - case WM_USER: - break; - - // Called when a screensaver wants to show up while this window is active - case WM_SYSCOMMAND: - - switch (wParam) - { - case SC_SCREENSAVE: - case SC_MONITORPOWER: - if (SConfig::GetInstance().m_LocalCoreStartupParameter.bDisableScreenSaver) - break; - default: - return DefWindowProc(hWnd, iMsg, wParam, lParam); - } - break; - case WM_SETCURSOR: - PostMessage(m_hParent, WM_USER, WM_USER_SETCURSOR, 0); - return true; - - case WM_SETTEXT_CUSTOM: - SendMessage(hWnd, WM_SETTEXT, wParam, lParam); - break; - - default: - return DefWindowProc(hWnd, iMsg, wParam, lParam); - } - return 0; -} - -HWND OpenWindow(HWND parent, HINSTANCE hInstance, int width, int height, const TCHAR *title) -{ - wndClass.cbSize = sizeof( wndClass ); - wndClass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; - wndClass.lpfnWndProc = WndProc; - wndClass.cbClsExtra = 0; - wndClass.cbWndExtra = 0; - wndClass.hInstance = hInstance; - wndClass.hIcon = LoadIcon( nullptr, IDI_APPLICATION ); - wndClass.hCursor = nullptr; - wndClass.hbrBackground = (HBRUSH)GetStockObject( BLACK_BRUSH ); - wndClass.lpszMenuName = nullptr; - wndClass.lpszClassName = m_szClassName; - wndClass.hIconSm = LoadIcon( nullptr, IDI_APPLICATION ); - - m_hInstance = hInstance; - RegisterClassEx( &wndClass ); - - m_hParent = parent; - - m_hWnd = CreateWindow(m_szClassName, title, (g_ActiveConfig.backend_info.bSupports3DVision && g_ActiveConfig.b3DVision) ? WS_EX_TOPMOST | WS_POPUP : WS_CHILD, - 0, 0, width, height, m_hParent, nullptr, hInstance, nullptr); - - return m_hWnd; -} - -void Show() -{ - ShowWindow(m_hWnd, SW_SHOW); - BringWindowToTop(m_hWnd); - UpdateWindow(m_hWnd); - SetFocus(m_hParent); -} - -HWND Create(HWND hParent, HINSTANCE hInstance, const TCHAR *title) -{ - // TODO: - // 1. Remove redundant window manipulation, - // 2. Request window sizes which actually make the client area map to a common resolution - HWND Ret; - int x=0, y=0, width=640, height=480; - Host_GetRenderWindowSize(x, y, width, height); - - // TODO: Don't show if fullscreen - Ret = OpenWindow(hParent, hInstance, width, height, title); - - if (Ret) - { - Show(); - } - return Ret; -} - -void Close() -{ - DestroyWindow(m_hWnd); - UnregisterClass(m_szClassName, m_hInstance); -} - -void SetSize(int width, int height) -{ - RECT rc = {0, 0, width, height}; - DWORD style = GetWindowLong(m_hWnd, GWL_STYLE); - AdjustWindowRect(&rc, style, false); - - int w = rc.right - rc.left; - int h = rc.bottom - rc.top; - - rc.left = (1280 - w)/2; - rc.right = rc.left + w; - rc.top = (1024 - h)/2; - rc.bottom = rc.top + h; - MoveWindow(m_hWnd, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, TRUE); -} - -void SetWindowText(const std::string& text) -{ - // the OS doesn't allow posting WM_SETTEXT, - // so we post our own message and convert it to that in WndProc - PostMessage(m_hWnd, WM_SETTEXT_CUSTOM, 0, (LPARAM)text.c_str()); -} - -} diff --git a/Source/Core/VideoCommon/EmuWindow.h b/Source/Core/VideoCommon/EmuWindow.h deleted file mode 100644 index 676ac43ad4..0000000000 --- a/Source/Core/VideoCommon/EmuWindow.h +++ /dev/null @@ -1,19 +0,0 @@ -#pragma once - -#include -#include - -namespace EmuWindow -{ - -HWND GetWnd(); -HWND GetParentWnd(); -HWND Create(HWND hParent, HINSTANCE hInstance, const TCHAR *title); -void Show(); -void Close(); -void SetSize(int displayWidth, int displayHeight); -bool IsSizing(); -void OSDMenu(WPARAM wParam); -void SetWindowText(const std::string& text); - -} diff --git a/Source/Core/VideoCommon/VideoCommon.vcxproj b/Source/Core/VideoCommon/VideoCommon.vcxproj index bc5e2c47ff..d5f693dff3 100644 --- a/Source/Core/VideoCommon/VideoCommon.vcxproj +++ b/Source/Core/VideoCommon/VideoCommon.vcxproj @@ -51,7 +51,6 @@ - @@ -98,7 +97,6 @@ - diff --git a/Source/Core/VideoCommon/VideoCommon.vcxproj.filters b/Source/Core/VideoCommon/VideoCommon.vcxproj.filters index d6ac8fa111..a573cdb16d 100644 --- a/Source/Core/VideoCommon/VideoCommon.vcxproj.filters +++ b/Source/Core/VideoCommon/VideoCommon.vcxproj.filters @@ -32,9 +32,6 @@ Base - - Base - Base @@ -150,9 +147,6 @@ Base - - Base - Base