aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Visualization/vis_milk2/dxcontext.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Plugins/Visualization/vis_milk2/dxcontext.h')
-rw-r--r--Src/Plugins/Visualization/vis_milk2/dxcontext.h151
1 files changed, 151 insertions, 0 deletions
diff --git a/Src/Plugins/Visualization/vis_milk2/dxcontext.h b/Src/Plugins/Visualization/vis_milk2/dxcontext.h
new file mode 100644
index 00000000..15076f9c
--- /dev/null
+++ b/Src/Plugins/Visualization/vis_milk2/dxcontext.h
@@ -0,0 +1,151 @@
+/*
+ LICENSE
+ -------
+Copyright 2005-2013 Nullsoft, Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ * Neither the name of Nullsoft nor the names of its contributors may be used to
+ endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef __NULLSOFT_DX9_PLUGIN_SHELL_DXCONTEXT_H__
+#define __NULLSOFT_DX9_PLUGIN_SHELL_DXCONTEXT_H__ 1
+
+#include <windows.h>
+#include "shell_defines.h"
+
+#ifdef _DEBUG
+ #define D3D_DEBUG_INFO // declare this before including d3d9.h
+#endif
+#include <d3d9.h>
+#include <d3dx9.h>
+
+#define SNAP_WINDOWED_MODE_BLOCKSIZE 32 // or use 0 if you don't want snapping
+
+typedef struct
+{
+ eScrMode screenmode; // WINDOWED, FULLSCREEN, or FAKE FULLSCREEN
+ int nbackbuf;
+ int allow_page_tearing;
+ GUID adapter_guid;
+ char adapter_devicename[256];
+ D3DDISPLAYMODE display_mode; // ONLY VALID FOR FULLSCREEN MODE.
+ D3DMULTISAMPLE_TYPE multisamp;
+ HWND parent_window;
+ int m_dualhead_horz; // 0 = span both, 1 = left only, 2 = right only
+ int m_dualhead_vert; // 0 = span both, 1 = top only, 2 = bottom only
+ int m_skin;
+}
+DXCONTEXT_PARAMS;
+
+#define MAX_DXC_ADAPTERS 32
+
+class DXContext
+{
+ public:
+ // PUBLIC FUNCTIONS
+ DXContext(HWND hWndWinamp,HINSTANCE hInstance,LPCWSTR szClassName,LPCSTR szWindowCaption,WNDPROC pProc,LONG_PTR uWindowLong, int minimize_winamp, wchar_t* szIniFile);
+ ~DXContext();
+ BOOL StartOrRestartDevice(DXCONTEXT_PARAMS *pParams); // also serves as Init() function
+ BOOL OnUserResizeWindow(RECT *new_window_rect, RECT *new_client_rect);
+ inline HWND GetHwnd() { return m_hwnd; };
+ inline int TempIgnoreDestroyMessages() { return m_ignore_wm_destroy; };
+ void OnTrulyExiting() { m_truly_exiting = 1; }
+ void UpdateMonitorWorkRect();
+ int GetBitDepth() { return m_bpp; };
+ inline D3DFORMAT GetZFormat() { return m_zFormat; };
+ char* GetDriver() { return m_szDriver; };
+ char* GetDesc() { return m_szDesc; };
+ void SaveWindow();
+
+ // PUBLIC DATA - DO NOT WRITE TO THESE FROM OUTSIDE THE CLASS
+ int m_ready;
+ HRESULT m_lastErr;
+ int m_window_width;
+ int m_window_height;
+ int m_client_width; //in windowed mode, these are the SNAPPED (locked to nearest 32x32)
+ int m_client_height; // width and height
+ int m_REAL_client_width; //these are the ACTUAL (raw) width and height -
+ int m_REAL_client_height; // only valid in windowed mode!
+ int m_fake_fs_covers_all;
+ int m_frame_delay;
+ RECT m_all_monitors_rect; // rect that encompasses all monitors that make up the desktop. The primary monitor's upper-left corner is (0,0).
+ RECT m_monitor_rect; // rect for monitor the plugin is running on; for pseudo-multimon modes like 2048x768, if user decides to only run on half the monitor, this rect reflects that as well.
+ RECT m_monitor_rect_orig; // same, but it's the original rect; does not account for pseudo-multimon modes like 2048x768
+ RECT m_monitor_work_rect; // same, but excludes the taskbar area.
+ RECT m_monitor_work_rect_orig; // original work rect; does not account for pseudo-multimon modes like 2048x768
+ DXCONTEXT_PARAMS m_current_mode;
+ LPDIRECT3DDEVICE9 m_lpDevice;
+ D3DPRESENT_PARAMETERS m_d3dpp;
+ LPDIRECT3D9 m_lpD3D;
+ D3DCAPS9 m_caps;
+
+ protected:
+ D3DMULTISAMPLE_TYPE m_multisamp;
+ D3DFORMAT m_zFormat;
+ D3DFORMAT m_orig_windowed_mode_format[MAX_DXC_ADAPTERS];
+ HMODULE m_hmod_d3d9, m_hmod_d3dx9;
+ int m_ordinal_adapter;
+ HWND m_hwnd;
+ HWND m_hwnd_winamp;
+ LONG_PTR m_uWindowLong;
+ ATOM m_classAtom;
+ char m_szWindowCaption[512];
+ wchar_t m_szIniFile[MAX_PATH];
+ char m_szDriver[MAX_DEVICE_IDENTIFIER_STRING];
+ char m_szDesc[MAX_DEVICE_IDENTIFIER_STRING];
+ HINSTANCE m_hInstance;
+ int m_ignore_wm_destroy;
+ int m_minimize_winamp;
+ int m_winamp_minimized;
+ int m_truly_exiting;
+ int m_bpp;
+
+ embedWindowState myWindowState;
+
+ void WriteSafeWindowPos();
+ int GetWindowedModeAutoSize(int iteration);
+ BOOL TestDepth(int ordinal_adapter, D3DFORMAT fmt);
+ BOOL TestFormat(int ordinal_adapter, D3DFORMAT fmt);
+ int CheckAndCorrectFullscreenDispMode(int ordinal_adapter, D3DDISPLAYMODE *pdm);
+ void SetViewport();
+ void MinimizeWinamp(HMONITOR hPluginMonitor);
+ BOOL Internal_Init(DXCONTEXT_PARAMS *pParams, BOOL bFirstInit);
+ void Internal_CleanUp();
+ void RestoreWinamp();
+ void GetSnappedClientSize(); //windowed mode only
+};
+
+#define DXC_ERR_REGWIN -2
+#define DXC_ERR_CREATEWIN -3
+#define DXC_ERR_CREATE3D -4
+#define DXC_ERR_GETFORMAT -5
+#define DXC_ERR_FORMAT -6
+#define DXC_ERR_CREATEDEV_PROBABLY_OUTOFVIDEOMEMORY -7
+#define DXC_ERR_RESIZEFAILED -8
+#define DXC_ERR_CAPSFAIL -9
+#define DXC_ERR_BAD_FS_DISPLAYMODE -10
+#define DXC_ERR_USER_CANCELED -11
+#define DXC_ERR_CREATEDEV_NOT_AVAIL -12
+#define DXC_ERR_CREATEDDRAW -13
+
+#endif \ No newline at end of file