From f424c8f053797bc9d559865f52822d9cbf33ae3f Mon Sep 17 00:00:00 2001 From: Abhilash Singh Date: Wed, 14 Dec 2016 22:18:44 +0530 Subject: tdf#90794 Fix the Linux HiDPI start screen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I2553cf69d6968865dc6011c73a0d2c0e7519b7a8 Reviewed-on: https://gerrit.libreoffice.org/32018 Reviewed-by: Caolán McNamara Tested-by: Caolán McNamara --- desktop/unx/source/splashx.c | 49 ++++++++++++++++++++++++++++++++++++++++---- desktop/unx/source/splashx.h | 1 - 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/desktop/unx/source/splashx.c b/desktop/unx/source/splashx.c index d227ff5690a0..c4740993cd50 100644 --- a/desktop/unx/source/splashx.c +++ b/desktop/unx/source/splashx.c @@ -531,6 +531,32 @@ static rtl_String* ustr_to_str( rtl_uString* pStr ) return pOut; } +static sal_Bool getScreenSize(int* display_width, int* display_height) +{ + Display* bDisplay = NULL; + Screen* bScreen = NULL; + + bDisplay = XOpenDisplay( NULL ); + if ( !bDisplay ) + { + fprintf( stderr, "Failed to open default display.\n" ); + return sal_False; + } + + bScreen = DefaultScreenOfDisplay( bDisplay ); + if ( !bScreen ) + { + fprintf( stderr, "Failed to obtain the default screen of given display.\n" ); + return sal_False; + } + + *display_width = bScreen->width; + *display_height = bScreen->height; + + XCloseDisplay( bDisplay ); + return sal_True; +} + #define IMG_SUFFIX ".png" static void splash_load_image( struct splash* splash, rtl_uString* pUAppPath ) @@ -540,7 +566,7 @@ static void splash_load_image( struct splash* splash, rtl_uString* pUAppPath ) * now the splash screen will have to get along with language-territory. */ char *pBuffer, *pSuffix, *pLocale; - int nLocSize; + int nLocSize, display_width, display_height; rtl_Locale *pLoc = NULL; rtl_String *pLang, *pCountry, *pAppPath; @@ -570,9 +596,24 @@ static void splash_load_image( struct splash* splash, rtl_uString* pUAppPath ) if ( splash_load_bmp( splash, pBuffer ) ) goto cleanup; - strcpy (pSuffix, "intro" IMG_SUFFIX); - if ( splash_load_bmp( splash, pBuffer ) ) - goto cleanup; + if ( getScreenSize( &display_width, &display_height ) == sal_True ) + { + //load high resolution splash image + if ( display_width > 1920 && display_height > 1024 ) // suggest better display size limits? + { + //TODO- change progress bar parameters after getting size of intro-highres.png + strcpy (pSuffix, "intro-highres" IMG_SUFFIX); + if ( splash_load_bmp( splash, pBuffer ) ) + goto cleanup; + } + //load low resolution splash image + else + { + strcpy (pSuffix, "intro" IMG_SUFFIX); + if ( splash_load_bmp( splash, pBuffer ) ) + goto cleanup; + } + } fprintf (stderr, "Failed to find intro image\n"); diff --git a/desktop/unx/source/splashx.h b/desktop/unx/source/splashx.h index a74be00ed5e7..4e9c72c1897d 100644 --- a/desktop/unx/source/splashx.h +++ b/desktop/unx/source/splashx.h @@ -9,7 +9,6 @@ #ifndef INCLUDED_DESKTOP_UNX_SOURCE_SPLASHX_H #define INCLUDED_DESKTOP_UNX_SOURCE_SPLASHX_H - #include #ifdef __cplusplus -- cgit v1.2.3