From 6007c45c8a97d4270d755044c75a916cab10aa11 Mon Sep 17 00:00:00 2001 From: Zorua Date: Mon, 12 Sep 2022 17:04:47 -0400 Subject: [PATCH] Add Graphics.display_width & Graphics.display_height --- binding/graphics-binding.cpp | 16 ++++++++++++++++ src/display/graphics.cpp | 12 ++++++++++++ src/display/graphics.h | 2 ++ 3 files changed, 30 insertions(+) diff --git a/binding/graphics-binding.cpp b/binding/graphics-binding.cpp index 5dce294..5b17f34 100644 --- a/binding/graphics-binding.cpp +++ b/binding/graphics-binding.cpp @@ -164,6 +164,20 @@ RB_METHOD(graphicsHeight) return rb_fix_new(shState->graphics().height()); } +RB_METHOD(graphicsDisplayWidth) +{ + RB_UNUSED_PARAM; + + return rb_fix_new(shState->graphics().displayWidth()); +} + +RB_METHOD(graphicsDisplayHeight) +{ + RB_UNUSED_PARAM; + + return rb_fix_new(shState->graphics().displayHeight()); +} + RB_METHOD(graphicsWait) { RB_UNUSED_PARAM; @@ -383,6 +397,8 @@ void graphicsBindingInit() _rb_define_module_function(module, "width", graphicsWidth); _rb_define_module_function(module, "height", graphicsHeight); + _rb_define_module_function(module, "display_width", graphicsDisplayWidth); + _rb_define_module_function(module, "display_height", graphicsDisplayHeight); _rb_define_module_function(module, "wait", graphicsWait); _rb_define_module_function(module, "fadeout", graphicsFadeout); _rb_define_module_function(module, "fadein", graphicsFadein); diff --git a/src/display/graphics.cpp b/src/display/graphics.cpp index cead806..92ae5f2 100644 --- a/src/display/graphics.cpp +++ b/src/display/graphics.cpp @@ -1330,6 +1330,18 @@ int Graphics::width() const { return p->scRes.x; } int Graphics::height() const { return p->scRes.y; } +int Graphics::displayWidth() const { + SDL_DisplayMode dm{}; + SDL_GetCurrentDisplayMode(SDL_GetWindowDisplayIndex(shState->sdlWindow()), &dm); + return dm.w / p->backingScaleFactor; +} + +int Graphics::displayHeight() const { + SDL_DisplayMode dm{}; + SDL_GetCurrentDisplayMode(SDL_GetWindowDisplayIndex(shState->sdlWindow()), &dm); + return dm.h / p->backingScaleFactor; +} + void Graphics::resizeScreen(int width, int height) { p->threadData->rqWindowAdjust.wait(); p->checkResize(true); diff --git a/src/display/graphics.h b/src/display/graphics.h index 935b2f3..cf2ff17 100644 --- a/src/display/graphics.h +++ b/src/display/graphics.h @@ -58,6 +58,8 @@ public: int width() const; int height() const; + int displayWidth() const; + int displayHeight() const; void resizeScreen(int width, int height); void resizeWindow(int width, int height, bool center=false); void drawMovieFrame(const THEORAPLAY_VideoFrame* video, Bitmap *videoBitmap);