From 5a7ffbf0f512192b02e0eecf48bc9d2f8fe516c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Lucas=20Golini?= Date: Sun, 21 Jun 2020 00:47:41 -0300 Subject: [PATCH] Improved DPI awareness on Windows. Minor fix in Code Editor. Fixed Code Editor build with mingw32. --- projects/windows/ee.config | 1 - projects/windows/ee.files | 22 +++++++++++++++---- .../backend/SDL2/displaymanagersdl2.cpp | 21 ++++++++++++++++++ .../backend/SDL2/displaymanagersdl2.hpp | 4 ++++ src/eepp/window/backend/SDL2/windowsdl2.cpp | 8 +++++++ src/tools/codeeditor/codeeditor.cpp | 8 ++++--- 6 files changed, 56 insertions(+), 8 deletions(-) diff --git a/projects/windows/ee.config b/projects/windows/ee.config index 9358a2eb0..f5601b61b 100644 --- a/projects/windows/ee.config +++ b/projects/windows/ee.config @@ -1,5 +1,4 @@ #define EE_SDL_VERSION_2 -#define EE_X11_PLATFORM #define EE_DEBUG #define EE_MEMORY_MANAGER #define EE_SHADERS_SUPPORTED diff --git a/projects/windows/ee.files b/projects/windows/ee.files index b06e2e1a5..b22f377fa 100644 --- a/projects/windows/ee.files +++ b/projects/windows/ee.files @@ -1,4 +1,5 @@ ../../README.md +../../bin/assets/colorschemes/colorschemes.conf ../../bin/assets/ee.ini ../../bin/assets/layouts/imported.css ../../bin/assets/layouts/test.css @@ -63,6 +64,7 @@ ../../include/eepp/graphics/globalbatchrenderer.hpp ../../include/eepp/graphics/globaltextureatlas.hpp ../../include/eepp/graphics.hpp +../../include/eepp/graphics/glyphdrawable.hpp ../../include/eepp/graphics/image.hpp ../../include/eepp/graphics/ninepatch.hpp ../../include/eepp/graphics/ninepatchmanager.hpp @@ -322,6 +324,7 @@ ../../include/eepp/ui/doc/syntaxhighlighter.hpp ../../include/eepp/ui/doc/syntaxtokenizer.hpp ../../include/eepp/ui/doc/textdocument.hpp +../../include/eepp/ui/doc/textdocumentline.hpp ../../include/eepp/ui/doc/textposition.hpp ../../include/eepp/ui/doc/textrange.hpp ../../include/eepp/ui/doc/undostack.hpp @@ -334,12 +337,14 @@ ../../include/eepp/ui/uicheckbox.hpp ../../include/eepp/ui/uicodeeditor.hpp ../../include/eepp/ui/uicombobox.hpp -../../include/eepp/ui/uicommondialog.hpp ../../include/eepp/ui/uidropdownlist.hpp ../../include/eepp/ui/uieventdispatcher.hpp +../../include/eepp/ui/uifiledialog.hpp ../../include/eepp/ui/uifontstyleconfig.hpp ../../include/eepp/ui/uigridlayout.hpp ../../include/eepp/ui/uihelper.hpp +../../include/eepp/ui/uiicontheme.hpp +../../include/eepp/ui/uiiconthememanager.hpp ../../include/eepp/ui/uiimage.hpp ../../include/eepp/ui/uiitemcontainer.hpp ../../include/eepp/ui/uilayout.hpp @@ -348,9 +353,11 @@ ../../include/eepp/ui/uilistboxitem.hpp ../../include/eepp/ui/uiloader.hpp ../../include/eepp/ui/uimanager.hpp +../../include/eepp/ui/uimenubar.hpp ../../include/eepp/ui/uimenucheckbox.hpp ../../include/eepp/ui/uimenu.hpp ../../include/eepp/ui/uimenuitem.hpp +../../include/eepp/ui/uimenuradiobutton.hpp ../../include/eepp/ui/uimenuseparator.hpp ../../include/eepp/ui/uimenusubmenu.hpp ../../include/eepp/ui/uimessagebox.hpp @@ -369,6 +376,7 @@ ../../include/eepp/ui/uiskinstate.hpp ../../include/eepp/ui/uislider.hpp ../../include/eepp/ui/uispinbox.hpp +../../include/eepp/ui/uisplitter.hpp ../../include/eepp/ui/uisprite.hpp ../../include/eepp/ui/uistate.hpp ../../include/eepp/ui/uistyle.hpp @@ -389,7 +397,6 @@ ../../include/eepp/ui/uiwidgetcreator.hpp ../../include/eepp/ui/uiwidget.hpp ../../include/eepp/ui/uiwindow.hpp -../../include/eepp/ui/uiwinmenu.hpp ../../include/eepp/version.hpp ../../include/eepp/window/base.hpp ../../include/eepp/window/clipboard.hpp @@ -504,6 +511,7 @@ ../../src/eepp/graphics/framebuffermanager.hpp ../../src/eepp/graphics/globalbatchrenderer.cpp ../../src/eepp/graphics/globaltextureatlas.cpp +../../src/eepp/graphics/glyphdrawable.cpp ../../src/eepp/graphics/image.cpp ../../src/eepp/graphics/ninepatch.cpp ../../src/eepp/graphics/ninepatchmanager.cpp @@ -773,6 +781,7 @@ ../../src/eepp/ui/doc/syntaxtokenizer.cpp ../../src/eepp/ui/doc/textdocument.cpp ../../src/eepp/ui/doc/undostack.cpp +../../src/eepp/ui/keyboardshortcut.cpp ../../src/eepp/ui/tools/textureatlaseditor.cpp ../../src/eepp/ui/tools/textureatlasnew.cpp ../../src/eepp/ui/tools/textureatlasnew.hpp @@ -784,10 +793,12 @@ ../../src/eepp/ui/uicheckbox.cpp ../../src/eepp/ui/uicodeeditor.cpp ../../src/eepp/ui/uicombobox.cpp -../../src/eepp/ui/uicommondialog.cpp ../../src/eepp/ui/uidropdownlist.cpp ../../src/eepp/ui/uieventdispatcher.cpp +../../src/eepp/ui/uifiledialog.cpp ../../src/eepp/ui/uigridlayout.cpp +../../src/eepp/ui/uiicontheme.cpp +../../src/eepp/ui/uiiconthememanager.cpp ../../src/eepp/ui/uiimage.cpp ../../src/eepp/ui/uilayout.cpp ../../src/eepp/ui/uilinearlayout.cpp @@ -795,9 +806,11 @@ ../../src/eepp/ui/uilistboxitem.cpp ../../src/eepp/ui/uiloader.cpp ../../src/eepp/ui/uimanager.cpp +../../src/eepp/ui/uimenubar.cpp ../../src/eepp/ui/uimenucheckbox.cpp ../../src/eepp/ui/uimenu.cpp ../../src/eepp/ui/uimenuitem.cpp +../../src/eepp/ui/uimenuradiobutton.cpp ../../src/eepp/ui/uimenuseparator.cpp ../../src/eepp/ui/uimenusubmenu.cpp ../../src/eepp/ui/uimessagebox.cpp @@ -816,6 +829,7 @@ ../../src/eepp/ui/uiskinstate.cpp ../../src/eepp/ui/uislider.cpp ../../src/eepp/ui/uispinbox.cpp +../../src/eepp/ui/uisplitter.cpp ../../src/eepp/ui/uisprite.cpp ../../src/eepp/ui/uistate.cpp ../../src/eepp/ui/uistyle.cpp @@ -836,7 +850,6 @@ ../../src/eepp/ui/uiwidget.cpp ../../src/eepp/ui/uiwidgetcreator.cpp ../../src/eepp/ui/uiwindow.cpp -../../src/eepp/ui/uiwinmenu.cpp ../../src/eepp/window/backend/allegro5/cbackendal.hpp ../../src/eepp/window/backend/allegro5/cclipboardal.cpp ../../src/eepp/window/backend/allegro5/cclipboardal.hpp @@ -957,6 +970,7 @@ ../../src/thirdparty/SOIL2/src/SOIL2/stbi_pvr_c.h ../../src/thirdparty/SOIL2/src/SOIL2/stbi_pvr.h ../../src/tools/codeeditor/codeeditor.cpp +../../src/tools/codeeditor/codeeditor.hpp ../../src/tools/mapeditor/mapeditor.cpp ../../src/tools/textureatlaseditor/textureatlaseditor.cpp ../../src/tools/texturepacker/texturepacker.cpp diff --git a/src/eepp/window/backend/SDL2/displaymanagersdl2.cpp b/src/eepp/window/backend/SDL2/displaymanagersdl2.cpp index 48b39862b..a375f9198 100644 --- a/src/eepp/window/backend/SDL2/displaymanagersdl2.cpp +++ b/src/eepp/window/backend/SDL2/displaymanagersdl2.cpp @@ -1,3 +1,4 @@ +#include #include #include @@ -7,6 +8,24 @@ namespace EE { namespace Window { namespace Backend { namespace SDL2 { +static bool DISPLAY_REQUEST_DPI_AWARENESS = true; + +void DisplayManagerSDL2::setDPIAwareness() { +#if EE_PLATFORM == EE_PLATFORM_WIN +if ( DISPLAY_REQUEST_DPI_AWARENESS ) { + void* user32 = Sys::loadObject( "user32.dll" ); + if ( user32 ) { + int (*SetProcessDPIAware)() = + (int (*)()) Sys::loadFunction( user32, "SetProcessDPIAware" ); + if ( SetProcessDPIAware ) { + SetProcessDPIAware(); + DISPLAY_REQUEST_DPI_AWARENESS = false; + } + } +} +#endif +} + DisplaySDL2::DisplaySDL2( int index ) : Display( index ) {} std::string DisplaySDL2::getName() { @@ -24,6 +43,7 @@ Float DisplaySDL2::getDPI() { #if EE_PLATFORM == EE_PLATFORM_EMSCRIPTEN return 96.f * emscripten_get_device_pixel_ratio(); #else + DisplayManagerSDL2::setDPIAwareness(); float ddpi, hdpi, vdpi; if ( 0 == SDL_GetDisplayDPI( 0, &ddpi, &hdpi, &vdpi ) ) return ddpi; @@ -88,6 +108,7 @@ Rect DisplaySDL2::getUsableBounds() { } int DisplayManagerSDL2::getDisplayCount() { + setDPIAwareness(); if ( !SDL_WasInit( SDL_INIT_VIDEO ) ) SDL_Init( SDL_INIT_VIDEO ); return SDL_GetNumVideoDisplays(); diff --git a/src/eepp/window/backend/SDL2/displaymanagersdl2.hpp b/src/eepp/window/backend/SDL2/displaymanagersdl2.hpp index 7a46641b8..127e9897c 100644 --- a/src/eepp/window/backend/SDL2/displaymanagersdl2.hpp +++ b/src/eepp/window/backend/SDL2/displaymanagersdl2.hpp @@ -28,6 +28,10 @@ class EE_API DisplaySDL2 : public Display { class EE_API DisplayManagerSDL2 : public DisplayManager { public: + #if EE_PLATFORM == EE_PLATFORM_WIN + static void setDPIAwareness(); + #endif + int getDisplayCount(); Display* getDisplayIndex( int index ); diff --git a/src/eepp/window/backend/SDL2/windowsdl2.cpp b/src/eepp/window/backend/SDL2/windowsdl2.cpp index e72d5a016..e4a29f32e 100644 --- a/src/eepp/window/backend/SDL2/windowsdl2.cpp +++ b/src/eepp/window/backend/SDL2/windowsdl2.cpp @@ -16,6 +16,10 @@ #include #include +#if EE_PLATFORM == EE_PLATFORM_WIN +#include +#endif + #if EE_PLATFORM == EE_PLATFORM_WIN || EE_PLATFORM == EE_PLATFORM_MACOSX || \ defined( EE_X11_PLATFORM ) || EE_PLATFORM == EE_PLATFORM_IOS || \ EE_PLATFORM == EE_PLATFORM_ANDROID || EE_PLATFORM == EE_PLATFORM_EMSCRIPTEN @@ -211,6 +215,10 @@ WindowSDL::~WindowSDL() { } bool WindowSDL::create( WindowSettings Settings, ContextSettings Context ) { + #if EE_PLATFORM == EE_PLATFORM_WIN + DisplayManagerSDL2::setDPIAwareness(); + #endif + if ( mWindow.Created ) return false; diff --git a/src/tools/codeeditor/codeeditor.cpp b/src/tools/codeeditor/codeeditor.cpp index c03a8231e..73d5b4483 100644 --- a/src/tools/codeeditor/codeeditor.cpp +++ b/src/tools/codeeditor/codeeditor.cpp @@ -778,7 +778,9 @@ void App::onFileDropped( String file ) { Vector2f mousePos( mUISceneNode->getEventDispatcher()->getMousePosf() ); Node* node = mUISceneNode->overFind( mousePos ); UICodeEditor* codeEditor = mCurEditor; - if ( node->isType( UI_TYPE_CODEEDITOR ) ) { + if ( !node ) + node = codeEditor; + if ( node && node->isType( UI_TYPE_CODEEDITOR ) ) { codeEditor = node->asType(); if ( !codeEditor->getDocument().isEmpty() ) { auto d = createCodeEditorInTabWidget( tabWidgetFromEditor( codeEditor ) ); @@ -793,7 +795,7 @@ void App::onTextDropped( String text ) { Vector2f mousePos( mUISceneNode->getEventDispatcher()->getMousePosf() ); Node* node = mUISceneNode->overFind( mousePos ); UICodeEditor* codeEditor = mCurEditor; - if ( node->isType( UI_TYPE_CODEEDITOR ) ) + if ( node && node->isType( UI_TYPE_CODEEDITOR ) ) codeEditor = node->asType(); if ( codeEditor && !text.empty() ) { if ( text[text.size() - 1] != '\n' ) @@ -927,7 +929,7 @@ void App::init( const std::string& file, const Float& pidelDensity ) { if ( mWindow->isOpen() ) { mWindow->setCloseRequestCallback( - [&]( auto* win ) -> bool { return onCloseRequestCallback( win ); } ); + [&]( EE::Window::Window* win ) -> bool { return onCloseRequestCallback( win ); } ); mWindow->getInput()->pushCallback( [&]( InputEvent* event ) { if ( event->Type == InputEvent::FileDropped ) {