BGE: New API method getDisplayDimensions
authorThomas Szepe <HG1_public@gmx.net>
Tue, 7 Apr 2015 16:32:25 +0000 (18:32 +0200)
committerThomas Szepe <HG1_public@gmx.net>
Tue, 7 Apr 2015 16:32:25 +0000 (18:32 +0200)
This patch adds a new API function to get the actual display dimensions in pixels.

Reviewers: dfelinto, sybren, lordloki, moguri

Reviewed By: lordloki, moguri

Differential Revision: https://developer.blender.org/D648

doc/python_api/rst/bge.render.rst
source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp
source/gameengine/BlenderRoutines/KX_BlenderCanvas.h
source/gameengine/GamePlayer/common/GPC_Canvas.h
source/gameengine/GamePlayer/ghost/GPG_Canvas.cpp
source/gameengine/GamePlayer/ghost/GPG_Canvas.h
source/gameengine/Ketsji/KX_PythonInit.cpp
source/gameengine/Rasterizer/RAS_ICanvas.h

index 651693b7a8a74926915743477379c7ffc1f8887f..1748ae14fc8b2bd43cad400d81712fcba6d08322 100644 (file)
@@ -123,6 +123,12 @@ Functions
 
    :rtype: bool
 
+.. function:: getDisplayDimensions()
+
+   Get the actual display dimensions, in pixels, of the physical display (e.g., the monitor).
+   
+   :type dimension: list [width,heigh] 
+
 .. function:: makeScreenshot(filename)
 
    Writes an image file with the current displayed frame.
index 3a31806fad4f420e29d4876c7dae976e7fd46d98..e37818678d6aa4ef4bbdda6f8f83dbeef24ffd29 100644 (file)
@@ -97,6 +97,11 @@ bool KX_BlenderCanvas::GetSwapInterval(int &intervalOut)
        return wm_window_get_swap_interval(m_win, &intervalOut);
 }
 
+void KX_BlenderCanvas::GetDisplayDimensions(int &width, int &height)
+{
+       wm_get_screensize(&width, &height);
+}
+
 void KX_BlenderCanvas::ResizeWindow(int width, int height)
 {
        // Not implemented for the embedded player
index c150af21230f30ba53099f2d6a03d0ac7f0a3080..817a667d7837ca603e3ae5ed94df0cd99f52d2ba 100644 (file)
@@ -87,6 +87,8 @@ public:
                int &intervalOut
        );
 
+       void GetDisplayDimensions(int &width, int &height);
+
                void 
        ResizeWindow(
                int width,
index acbea477e3800230c20a9d1d7cdfa8c444694f25..34cc9759a08d4587969ec4fa1b25adee6c7cadcc 100644 (file)
@@ -71,6 +71,8 @@ public:
 
        virtual void ResizeWindow(int width, int height) {}
 
+       virtual void GetDisplayDimensions(int &width, int &height) {}
+
        /**
         * \section Methods inherited from abstract base class RAS_ICanvas.
         */
index 556f85804ea984c3cb61b89e5220387e110b8488..09eb1691dae732c9877dc4bed603e303f3902351 100644 (file)
@@ -121,6 +121,18 @@ bool GPG_Canvas::GetSwapInterval(int& intervalOut)
        return false;
 }
 
+void GPG_Canvas::GetDisplayDimensions(int &width, int &height)
+ {
+       unsigned int uiwidth;
+       unsigned int uiheight;
+
+       GHOST_ISystem *system = GHOST_ISystem::getSystem();
+       system->getMainDisplayDimensions(uiwidth, uiheight);
+
+       width = uiwidth;
+       height = uiheight;
+}
+
 void GPG_Canvas::ResizeWindow(int width, int height)
 {
        if (m_window->getState() == GHOST_kWindowStateFullScreen)
index 337c2cedf55d842159355ce94db78bc251e1717c..18afbf6cd9e309484c586b0ecb8a1162d63a8923 100644 (file)
@@ -63,6 +63,8 @@ public:
        virtual float GetMouseNormalizedX(int x);
        virtual float GetMouseNormalizedY(int y);
 
+       virtual void GetDisplayDimensions(int &width, int &height);
+
        virtual void ResizeWindow(int width, int height);
        virtual void SetFullScreen(bool enable);
        virtual bool GetFullScreen();
index 18b25d340ddc02d5dc1e9eafef7a1f0a13f6ca3d..420e0be8c5d85434cf83680ffe95c209e862652d 100644 (file)
@@ -1403,6 +1403,20 @@ static PyObject *gPyClearDebugList(PyObject *)
        Py_RETURN_NONE;
 }
 
+static PyObject *gPyGetDisplayDimensions(PyObject *)
+{
+       PyObject *list = PyList_New(0);
+       int width;
+       int height;
+
+       gp_Canvas->GetDisplayDimensions(width, height);
+
+       PyList_Append(list, PyLong_FromLong(width));
+       PyList_Append(list, PyLong_FromLong(height));
+
+       return list;
+}
+
 PyDoc_STRVAR(Rasterizer_module_documentation,
 "This is the Python API for the game engine of Rasterizer"
 );
@@ -1446,6 +1460,8 @@ static struct PyMethodDef rasterizer_methods[] = {
        {"setWindowSize", (PyCFunction) gPySetWindowSize, METH_VARARGS, ""},
        {"setFullScreen", (PyCFunction) gPySetFullScreen, METH_O, ""},
        {"getFullScreen", (PyCFunction) gPyGetFullScreen, METH_NOARGS, ""},
+       {"getDisplayDimensions", (PyCFunction) gPyGetDisplayDimensions, METH_NOARGS,
+        "Get the actual dimensions, in pixels, of the physical display (e.g., the monitor)."},
        {"setMipmapping", (PyCFunction) gPySetMipmapping, METH_VARARGS, ""},
        {"getMipmapping", (PyCFunction) gPyGetMipmapping, METH_NOARGS, ""},
        {"setVsync", (PyCFunction) gPySetVsync, METH_VARARGS, ""},
index d90cbea286e5d8d5524368e1be545932d5ee2189..471c2c97fa171427d3240445bd17b6cf5564ca9c 100644 (file)
@@ -237,6 +237,8 @@ public:
                const char* filename
        )=0;
 
+       virtual void GetDisplayDimensions(int &width, int &height) = 0;
+
        virtual
                void 
        ResizeWindow(