Implementation of the new monitor abstraction.
diff --git a/include/monitor.h b/include/monitor.h
new file mode 100644
index 0000000..ae5f8e1
--- /dev/null
+++ b/include/monitor.h
@@ -0,0 +1,33 @@
+/*
+ * Monitor definitions
+ *
+ */
+
+#ifndef __WINE_MONITOR_H
+#define __WINE_MONITOR_H
+
+struct tagMONITOR_DRIVER;
+
+typedef struct tagMONITOR
+{
+ struct tagMONITOR_DRIVER *pDriver;
+ void *pDriverData;
+} MONITOR;
+
+typedef struct tagMONITOR_DRIVER {
+ void (*pInitialize)(MONITOR *);
+ void (*pFinalize)(MONITOR *);
+ int (*pGetWidth)(MONITOR *);
+ int (*pGetHeight)(MONITOR *);
+ int (*pGetDepth)(MONITOR *);
+} MONITOR_DRIVER;
+
+extern MONITOR MONITOR_PrimaryMonitor;
+
+extern void MONITOR_Initialize(MONITOR *pMonitor);
+extern void MONITOR_Finalize(MONITOR *pMonitor);
+extern int MONITOR_GetWidth(MONITOR *pMonitor);
+extern int MONITOR_GetHeight(MONITOR *pMonitor);
+extern int MONITOR_GetDepth(MONITOR *pMonitor);
+
+#endif /* __WINE_MONITOR_H */
diff --git a/windows/multimon.c b/windows/multimon.c
index de7c2b8..6938c25 100644
--- a/windows/multimon.c
+++ b/windows/multimon.c
@@ -4,10 +4,57 @@
* Copyright 1998 Turchanov Sergey
*/
+#include "monitor.h"
#include "windows.h"
+/**********************************************************************/
+
#define xPRIMARY_MONITOR ((HMONITOR)0x12340042)
+MONITOR MONITOR_PrimaryMonitor;
+
+/***********************************************************************
+ * MONITOR_Initialize
+ */
+void MONITOR_Initialize(MONITOR *pMonitor)
+{
+ pMonitor->pDriver->pInitialize(pMonitor);
+}
+
+/***********************************************************************
+ * MONITOR_Finalize
+ */
+void MONITOR_Finalize(MONITOR *pMonitor)
+{
+ pMonitor->pDriver->pFinalize(pMonitor);
+}
+
+/***********************************************************************
+ * MONITOR_GetWidth
+ */
+int MONITOR_GetWidth(MONITOR *pMonitor)
+{
+ return pMonitor->pDriver->pGetWidth(pMonitor);
+}
+
+/***********************************************************************
+ * MONITOR_GetHeight
+ */
+int MONITOR_GetHeight(MONITOR *pMonitor)
+{
+ return pMonitor->pDriver->pGetHeight(pMonitor);
+}
+
+/***********************************************************************
+ * MONITOR_GetDepth
+ */
+int MONITOR_GetDepth(MONITOR *pMonitor)
+{
+ return pMonitor->pDriver->pGetDepth(pMonitor);
+}
+
+/**********************************************************************/
+
HMONITOR WINAPI MonitorFromPoint(POINT32 ptScreenCoords, DWORD dwFlags)
{
if ((dwFlags & (MONITOR_DEFAULTTOPRIMARY | MONITOR_DEFAULTTONEAREST)) ||