69 lines
3.0 KiB
C++
69 lines
3.0 KiB
C++
#pragma once
|
|
#include "Common.h"
|
|
#include "Python.h"
|
|
|
|
// Forward declarations
|
|
class GameEngine;
|
|
|
|
// Python object structure for Window singleton
|
|
typedef struct {
|
|
PyObject_HEAD
|
|
// No data - Window is a singleton that accesses GameEngine
|
|
} PyWindowObject;
|
|
|
|
// C++ interface for the Window singleton
|
|
class PyWindow
|
|
{
|
|
public:
|
|
// Static methods for Python type
|
|
static PyObject* get(PyObject* cls, PyObject* args);
|
|
static PyObject* repr(PyWindowObject* self);
|
|
|
|
// Getters and setters for window properties
|
|
static PyObject* get_resolution(PyWindowObject* self, void* closure);
|
|
static int set_resolution(PyWindowObject* self, PyObject* value, void* closure);
|
|
static PyObject* get_fullscreen(PyWindowObject* self, void* closure);
|
|
static int set_fullscreen(PyWindowObject* self, PyObject* value, void* closure);
|
|
static PyObject* get_vsync(PyWindowObject* self, void* closure);
|
|
static int set_vsync(PyWindowObject* self, PyObject* value, void* closure);
|
|
static PyObject* get_title(PyWindowObject* self, void* closure);
|
|
static int set_title(PyWindowObject* self, PyObject* value, void* closure);
|
|
static PyObject* get_visible(PyWindowObject* self, void* closure);
|
|
static int set_visible(PyWindowObject* self, PyObject* value, void* closure);
|
|
static PyObject* get_framerate_limit(PyWindowObject* self, void* closure);
|
|
static int set_framerate_limit(PyWindowObject* self, PyObject* value, void* closure);
|
|
static PyObject* get_game_resolution(PyWindowObject* self, void* closure);
|
|
static int set_game_resolution(PyWindowObject* self, PyObject* value, void* closure);
|
|
static PyObject* get_scaling_mode(PyWindowObject* self, void* closure);
|
|
static int set_scaling_mode(PyWindowObject* self, PyObject* value, void* closure);
|
|
|
|
// Methods
|
|
static PyObject* center(PyWindowObject* self, PyObject* args);
|
|
static PyObject* screenshot(PyWindowObject* self, PyObject* args, PyObject* kwds);
|
|
|
|
static PyGetSetDef getsetters[];
|
|
static PyMethodDef methods[];
|
|
|
|
};
|
|
|
|
namespace mcrfpydef {
|
|
static PyTypeObject PyWindowType = {
|
|
.ob_base = {.ob_base = {.ob_refcnt = 1, .ob_type = NULL}, .ob_size = 0},
|
|
.tp_name = "mcrfpy.Window",
|
|
.tp_basicsize = sizeof(PyWindowObject),
|
|
.tp_itemsize = 0,
|
|
.tp_dealloc = (destructor)[](PyObject* self) {
|
|
// Don't delete the singleton instance
|
|
Py_TYPE(self)->tp_free(self);
|
|
},
|
|
.tp_repr = (reprfunc)PyWindow::repr,
|
|
.tp_flags = Py_TPFLAGS_DEFAULT,
|
|
.tp_doc = PyDoc_STR("Window singleton for accessing and modifying the game window properties"),
|
|
.tp_methods = nullptr, // Set in McRFPy_API.cpp after definition
|
|
.tp_getset = nullptr, // Set in McRFPy_API.cpp after definition
|
|
.tp_new = [](PyTypeObject* type, PyObject* args, PyObject* kwds) -> PyObject* {
|
|
PyErr_SetString(PyExc_TypeError, "Cannot instantiate Window. Use Window.get() to access the singleton.");
|
|
return NULL;
|
|
}
|
|
};
|
|
} |