We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Splash screen can take a lot of space in low resolution screens
When starting Spyder in my laptop screen (1366 x 768) the splash looks like this (kind of big):

![image](https://user-images.githubusercontent.com/16781833/125324449-374ae780-e340-11eb-8de1-9f15903007e4.png)


However in my secondary screen (1920×1080) the splash looks better:

![image](https://user-images.githubusercontent.com/16781833/125323370-fe5e4300-e33e-11eb-8372-53702b7cef7d.png)


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `spyder/app/utils.py`
Content:
```
1 # -*- coding: utf-8 -*-
2 #
3 # Copyright © Spyder Project Contributors
4 # Licensed under the terms of the MIT License
5 # (see spyder/__init__.py for details)
6 
7 """Utility functions for the Spyder application."""
8 
9 # Standard library imports
10 import glob
11 import logging
12 import os
13 import os.path as osp
14 import re
15 import sys
16 
17 # Third-party imports
18 import psutil
19 from qtpy.QtCore import QCoreApplication, Qt
20 from qtpy.QtGui import QColor, QPalette, QPixmap
21 from qtpy.QtWidgets import QSplashScreen
22 
23 # Local imports
24 from spyder.config.base import (DEV, get_conf_path, get_debug_level,
25                                 running_under_pytest)
26 from spyder.utils.image_path_manager import get_image_path
27 from spyder.utils.qthelpers import file_uri
28 from spyder.utils.external.dafsa.dafsa import DAFSA
29 from spyder.utils.stylesheet import QStylePalette
30 
31 # For spyder-ide/spyder#7447.
32 try:
33     from qtpy.QtQuick import QQuickWindow, QSGRendererInterface
34 except Exception:
35     QQuickWindow = QSGRendererInterface = None
36 
37 
38 root_logger = logging.getLogger()
39 FILTER_NAMES = os.environ.get('SPYDER_FILTER_LOG', "").split(',')
40 FILTER_NAMES = [f.strip() for f in FILTER_NAMES]
41 
42 
43 class Spy:
44     """
45     This is used to inject a 'spy' object in the internal console
46     namespace to inspect Spyder internals.
47 
48     Attributes:
49         app       Reference to main QApplication object
50         window    Reference to spyder.MainWindow widget
51     """
52     def __init__(self, app, window):
53         self.app = app
54         self.window = window
55 
56     def __dir__(self):
57         return (list(self.__dict__.keys()) +
58                 [x for x in dir(self.__class__) if x[0] != '_'])
59 
60 
61 def get_python_doc_path():
62     """
63     Return Python documentation path
64     (Windows: return the PythonXX.chm path if available)
65     """
66     if os.name == 'nt':
67         doc_path = osp.join(sys.prefix, "Doc")
68         if not osp.isdir(doc_path):
69             return
70         python_chm = [path for path in os.listdir(doc_path)
71                       if re.match(r"(?i)Python[0-9]{3,6}.chm", path)]
72         if python_chm:
73             return file_uri(osp.join(doc_path, python_chm[0]))
74     else:
75         vinf = sys.version_info
76         doc_path = '/usr/share/doc/python%d.%d/html' % (vinf[0], vinf[1])
77     python_doc = osp.join(doc_path, "index.html")
78     if osp.isfile(python_doc):
79         return file_uri(python_doc)
80 
81 
82 def set_opengl_implementation(option):
83     """
84     Set the OpenGL implementation used by Spyder.
85 
86     See spyder-ide/spyder#7447 for the details.
87     """
88     if option == 'software':
89         QCoreApplication.setAttribute(Qt.AA_UseSoftwareOpenGL)
90         if QQuickWindow is not None:
91             QQuickWindow.setSceneGraphBackend(QSGRendererInterface.Software)
92     elif option == 'desktop':
93         QCoreApplication.setAttribute(Qt.AA_UseDesktopOpenGL)
94         if QQuickWindow is not None:
95             QQuickWindow.setSceneGraphBackend(QSGRendererInterface.OpenGL)
96     elif option == 'gles':
97         QCoreApplication.setAttribute(Qt.AA_UseOpenGLES)
98         if QQuickWindow is not None:
99             QQuickWindow.setSceneGraphBackend(QSGRendererInterface.OpenGL)
100 
101 
102 def setup_logging(cli_options):
103     """Setup logging with cli options defined by the user."""
104     if cli_options.debug_info or get_debug_level() > 0:
105         levels = {2: logging.INFO, 3: logging.DEBUG}
106         log_level = levels[get_debug_level()]
107         log_format = '%(asctime)s [%(levelname)s] [%(name)s] -> %(message)s'
108 
109         console_filters = cli_options.filter_log.split(',')
110         console_filters = [x.strip() for x in console_filters]
111         console_filters = console_filters + FILTER_NAMES
112         console_filters = [x for x in console_filters if x != '']
113 
114         handlers = [logging.StreamHandler()]
115         if cli_options.debug_output == 'file':
116             log_file = 'spyder-debug.log'
117             handlers.append(
118                 logging.FileHandler(filename=log_file, mode='w+')
119             )
120         else:
121             log_file = None
122 
123         match_func = lambda x: True
124         if console_filters != [''] and len(console_filters) > 0:
125             dafsa = DAFSA(console_filters)
126             match_func = lambda x: (dafsa.lookup(x, stop_on_prefix=True)
127                                     is not None)
128 
129         formatter = logging.Formatter(log_format)
130 
131         class ModuleFilter(logging.Filter):
132             """Filter messages based on module name prefix."""
133 
134             def filter(self, record):
135                 return match_func(record.name)
136 
137         filter = ModuleFilter()
138         root_logger.setLevel(log_level)
139         for handler in handlers:
140             handler.addFilter(filter)
141             handler.setFormatter(formatter)
142             handler.setLevel(log_level)
143             root_logger.addHandler(handler)
144 
145 
146 def delete_lsp_log_files():
147     """Delete previous dead Spyder instances LSP log files."""
148     regex = re.compile(r'.*_.*_(\d+)[.]log')
149     files = glob.glob(osp.join(get_conf_path('lsp_logs'), '*.log'))
150     for f in files:
151         match = regex.match(f)
152         if match is not None:
153             pid = int(match.group(1))
154             if not psutil.pid_exists(pid):
155                 os.remove(f)
156 
157 
158 def qt_message_handler(msg_type, msg_log_context, msg_string):
159     """
160     Qt warning messages are intercepted by this handler.
161 
162     On some operating systems, warning messages might be displayed
163     even if the actual message does not apply. This filter adds a
164     blacklist for messages that are being printed for no apparent
165     reason. Anything else will get printed in the internal console.
166 
167     In DEV mode, all messages are printed.
168     """
169     BLACKLIST = [
170         'QMainWidget::resizeDocks: all sizes need to be larger than 0',
171     ]
172     if DEV or msg_string not in BLACKLIST:
173         print(msg_string)  # spyder: test-skip
174 
175 
176 def create_splash_screen():
177     """Create splash screen."""
178     if not running_under_pytest():
179         splash = QSplashScreen(QPixmap(get_image_path('splash')))
180         splash_font = splash.font()
181         splash_font.setPixelSize(14)
182         splash.setFont(splash_font)
183     else:
184         splash = None
185 
186     return splash
187 
188 
189 def set_links_color(app):
190     """
191     Fix color for links.
192 
193     This was taken from QDarkstyle, which is MIT licensed.
194     """
195     color = QStylePalette.COLOR_ACCENT_3
196     qcolor = QColor(color)
197 
198     app_palette = app.palette()
199     app_palette.setColor(QPalette.Normal, QPalette.Link, qcolor)
200     app.setPalette(app_palette)
201
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/spyder/app/utils.py b/spyder/app/utils.py
--- a/spyder/app/utils.py
+++ b/spyder/app/utils.py
@@ -176,7 +176,9 @@
 def create_splash_screen():
     """Create splash screen."""
     if not running_under_pytest():
-        splash = QSplashScreen(QPixmap(get_image_path('splash')))
+        pixmap = QPixmap(get_image_path('splash'))
+        splash = QSplashScreen(
+            pixmap.scaledToWidth(500, Qt.SmoothTransformation))
         splash_font = splash.font()
         splash_font.setPixelSize(14)
         splash.setFont(splash_font)

{"golden_diff": "diff --git a/spyder/app/utils.py b/spyder/app/utils.py\n--- a/spyder/app/utils.py\n+++ b/spyder/app/utils.py\n@@ -176,7 +176,9 @@\n def create_splash_screen():\n     \"\"\"Create splash screen.\"\"\"\n     if not running_under_pytest():\n-        splash = QSplashScreen(QPixmap(get_image_path('splash')))\n+        pixmap = QPixmap(get_image_path('splash'))\n+        splash = QSplashScreen(\n+            pixmap.scaledToWidth(500, Qt.SmoothTransformation))\n         splash_font = splash.font()\n         splash_font.setPixelSize(14)\n         splash.setFont(splash_font)\n", "issue": "Splash screen can take a lot of space in low resolution screens\nWhen starting Spyder in my laptop screen (1366 x 768) the splash looks like this (kind of big):\r\n\r\n![image](https://user-images.githubusercontent.com/16781833/125324449-374ae780-e340-11eb-8de1-9f15903007e4.png)\r\n\r\n\r\nHowever in my secondary screen (1920\u00d71080) the splash looks better:\r\n\r\n![image](https://user-images.githubusercontent.com/16781833/125323370-fe5e4300-e33e-11eb-8372-53702b7cef7d.png)\r\n\n", "before_files": [{"content": "# -*- coding: utf-8 -*-\n#\n# Copyright \u00a9 Spyder Project Contributors\n# Licensed under the terms of the MIT License\n# (see spyder/__init__.py for details)\n\n\"\"\"Utility functions for the Spyder application.\"\"\"\n\n# Standard library imports\nimport glob\nimport logging\nimport os\nimport os.path as osp\nimport re\nimport sys\n\n# Third-party imports\nimport psutil\nfrom qtpy.QtCore import QCoreApplication, Qt\nfrom qtpy.QtGui import QColor, QPalette, QPixmap\nfrom qtpy.QtWidgets import QSplashScreen\n\n# Local imports\nfrom spyder.config.base import (DEV, get_conf_path, get_debug_level,\n                                running_under_pytest)\nfrom spyder.utils.image_path_manager import get_image_path\nfrom spyder.utils.qthelpers import file_uri\nfrom spyder.utils.external.dafsa.dafsa import DAFSA\nfrom spyder.utils.stylesheet import QStylePalette\n\n# For spyder-ide/spyder#7447.\ntry:\n    from qtpy.QtQuick import QQuickWindow, QSGRendererInterface\nexcept Exception:\n    QQuickWindow = QSGRendererInterface = None\n\n\nroot_logger = logging.getLogger()\nFILTER_NAMES = os.environ.get('SPYDER_FILTER_LOG', \"\").split(',')\nFILTER_NAMES = [f.strip() for f in FILTER_NAMES]\n\n\nclass Spy:\n    \"\"\"\n    This is used to inject a 'spy' object in the internal console\n    namespace to inspect Spyder internals.\n\n    Attributes:\n        app       Reference to main QApplication object\n        window    Reference to spyder.MainWindow widget\n    \"\"\"\n    def __init__(self, app, window):\n        self.app = app\n        self.window = window\n\n    def __dir__(self):\n        return (list(self.__dict__.keys()) +\n                [x for x in dir(self.__class__) if x[0] != '_'])\n\n\ndef get_python_doc_path():\n    \"\"\"\n    Return Python documentation path\n    (Windows: return the PythonXX.chm path if available)\n    \"\"\"\n    if os.name == 'nt':\n        doc_path = osp.join(sys.prefix, \"Doc\")\n        if not osp.isdir(doc_path):\n            return\n        python_chm = [path for path in os.listdir(doc_path)\n                      if re.match(r\"(?i)Python[0-9]{3,6}.chm\", path)]\n        if python_chm:\n            return file_uri(osp.join(doc_path, python_chm[0]))\n    else:\n        vinf = sys.version_info\n        doc_path = '/usr/share/doc/python%d.%d/html' % (vinf[0], vinf[1])\n    python_doc = osp.join(doc_path, \"index.html\")\n    if osp.isfile(python_doc):\n        return file_uri(python_doc)\n\n\ndef set_opengl_implementation(option):\n    \"\"\"\n    Set the OpenGL implementation used by Spyder.\n\n    See spyder-ide/spyder#7447 for the details.\n    \"\"\"\n    if option == 'software':\n        QCoreApplication.setAttribute(Qt.AA_UseSoftwareOpenGL)\n        if QQuickWindow is not None:\n            QQuickWindow.setSceneGraphBackend(QSGRendererInterface.Software)\n    elif option == 'desktop':\n        QCoreApplication.setAttribute(Qt.AA_UseDesktopOpenGL)\n        if QQuickWindow is not None:\n            QQuickWindow.setSceneGraphBackend(QSGRendererInterface.OpenGL)\n    elif option == 'gles':\n        QCoreApplication.setAttribute(Qt.AA_UseOpenGLES)\n        if QQuickWindow is not None:\n            QQuickWindow.setSceneGraphBackend(QSGRendererInterface.OpenGL)\n\n\ndef setup_logging(cli_options):\n    \"\"\"Setup logging with cli options defined by the user.\"\"\"\n    if cli_options.debug_info or get_debug_level() > 0:\n        levels = {2: logging.INFO, 3: logging.DEBUG}\n        log_level = levels[get_debug_level()]\n        log_format = '%(asctime)s [%(levelname)s] [%(name)s] -> %(message)s'\n\n        console_filters = cli_options.filter_log.split(',')\n        console_filters = [x.strip() for x in console_filters]\n        console_filters = console_filters + FILTER_NAMES\n        console_filters = [x for x in console_filters if x != '']\n\n        handlers = [logging.StreamHandler()]\n        if cli_options.debug_output == 'file':\n            log_file = 'spyder-debug.log'\n            handlers.append(\n                logging.FileHandler(filename=log_file, mode='w+')\n            )\n        else:\n            log_file = None\n\n        match_func = lambda x: True\n        if console_filters != [''] and len(console_filters) > 0:\n            dafsa = DAFSA(console_filters)\n            match_func = lambda x: (dafsa.lookup(x, stop_on_prefix=True)\n                                    is not None)\n\n        formatter = logging.Formatter(log_format)\n\n        class ModuleFilter(logging.Filter):\n            \"\"\"Filter messages based on module name prefix.\"\"\"\n\n            def filter(self, record):\n                return match_func(record.name)\n\n        filter = ModuleFilter()\n        root_logger.setLevel(log_level)\n        for handler in handlers:\n            handler.addFilter(filter)\n            handler.setFormatter(formatter)\n            handler.setLevel(log_level)\n            root_logger.addHandler(handler)\n\n\ndef delete_lsp_log_files():\n    \"\"\"Delete previous dead Spyder instances LSP log files.\"\"\"\n    regex = re.compile(r'.*_.*_(\\d+)[.]log')\n    files = glob.glob(osp.join(get_conf_path('lsp_logs'), '*.log'))\n    for f in files:\n        match = regex.match(f)\n        if match is not None:\n            pid = int(match.group(1))\n            if not psutil.pid_exists(pid):\n                os.remove(f)\n\n\ndef qt_message_handler(msg_type, msg_log_context, msg_string):\n    \"\"\"\n    Qt warning messages are intercepted by this handler.\n\n    On some operating systems, warning messages might be displayed\n    even if the actual message does not apply. This filter adds a\n    blacklist for messages that are being printed for no apparent\n    reason. Anything else will get printed in the internal console.\n\n    In DEV mode, all messages are printed.\n    \"\"\"\n    BLACKLIST = [\n        'QMainWidget::resizeDocks: all sizes need to be larger than 0',\n    ]\n    if DEV or msg_string not in BLACKLIST:\n        print(msg_string)  # spyder: test-skip\n\n\ndef create_splash_screen():\n    \"\"\"Create splash screen.\"\"\"\n    if not running_under_pytest():\n        splash = QSplashScreen(QPixmap(get_image_path('splash')))\n        splash_font = splash.font()\n        splash_font.setPixelSize(14)\n        splash.setFont(splash_font)\n    else:\n        splash = None\n\n    return splash\n\n\ndef set_links_color(app):\n    \"\"\"\n    Fix color for links.\n\n    This was taken from QDarkstyle, which is MIT licensed.\n    \"\"\"\n    color = QStylePalette.COLOR_ACCENT_3\n    qcolor = QColor(color)\n\n    app_palette = app.palette()\n    app_palette.setColor(QPalette.Normal, QPalette.Link, qcolor)\n    app.setPalette(app_palette)\n", "path": "spyder/app/utils.py"}], "after_files": [{"content": "# -*- coding: utf-8 -*-\n#\n# Copyright \u00a9 Spyder Project Contributors\n# Licensed under the terms of the MIT License\n# (see spyder/__init__.py for details)\n\n\"\"\"Utility functions for the Spyder application.\"\"\"\n\n# Standard library imports\nimport glob\nimport logging\nimport os\nimport os.path as osp\nimport re\nimport sys\n\n# Third-party imports\nimport psutil\nfrom qtpy.QtCore import QCoreApplication, Qt\nfrom qtpy.QtGui import QColor, QPalette, QPixmap\nfrom qtpy.QtWidgets import QSplashScreen\n\n# Local imports\nfrom spyder.config.base import (DEV, get_conf_path, get_debug_level,\n                                running_under_pytest)\nfrom spyder.utils.image_path_manager import get_image_path\nfrom spyder.utils.qthelpers import file_uri\nfrom spyder.utils.external.dafsa.dafsa import DAFSA\nfrom spyder.utils.stylesheet import QStylePalette\n\n# For spyder-ide/spyder#7447.\ntry:\n    from qtpy.QtQuick import QQuickWindow, QSGRendererInterface\nexcept Exception:\n    QQuickWindow = QSGRendererInterface = None\n\n\nroot_logger = logging.getLogger()\nFILTER_NAMES = os.environ.get('SPYDER_FILTER_LOG', \"\").split(',')\nFILTER_NAMES = [f.strip() for f in FILTER_NAMES]\n\n\nclass Spy:\n    \"\"\"\n    This is used to inject a 'spy' object in the internal console\n    namespace to inspect Spyder internals.\n\n    Attributes:\n        app       Reference to main QApplication object\n        window    Reference to spyder.MainWindow widget\n    \"\"\"\n    def __init__(self, app, window):\n        self.app = app\n        self.window = window\n\n    def __dir__(self):\n        return (list(self.__dict__.keys()) +\n                [x for x in dir(self.__class__) if x[0] != '_'])\n\n\ndef get_python_doc_path():\n    \"\"\"\n    Return Python documentation path\n    (Windows: return the PythonXX.chm path if available)\n    \"\"\"\n    if os.name == 'nt':\n        doc_path = osp.join(sys.prefix, \"Doc\")\n        if not osp.isdir(doc_path):\n            return\n        python_chm = [path for path in os.listdir(doc_path)\n                      if re.match(r\"(?i)Python[0-9]{3,6}.chm\", path)]\n        if python_chm:\n            return file_uri(osp.join(doc_path, python_chm[0]))\n    else:\n        vinf = sys.version_info\n        doc_path = '/usr/share/doc/python%d.%d/html' % (vinf[0], vinf[1])\n    python_doc = osp.join(doc_path, \"index.html\")\n    if osp.isfile(python_doc):\n        return file_uri(python_doc)\n\n\ndef set_opengl_implementation(option):\n    \"\"\"\n    Set the OpenGL implementation used by Spyder.\n\n    See spyder-ide/spyder#7447 for the details.\n    \"\"\"\n    if option == 'software':\n        QCoreApplication.setAttribute(Qt.AA_UseSoftwareOpenGL)\n        if QQuickWindow is not None:\n            QQuickWindow.setSceneGraphBackend(QSGRendererInterface.Software)\n    elif option == 'desktop':\n        QCoreApplication.setAttribute(Qt.AA_UseDesktopOpenGL)\n        if QQuickWindow is not None:\n            QQuickWindow.setSceneGraphBackend(QSGRendererInterface.OpenGL)\n    elif option == 'gles':\n        QCoreApplication.setAttribute(Qt.AA_UseOpenGLES)\n        if QQuickWindow is not None:\n            QQuickWindow.setSceneGraphBackend(QSGRendererInterface.OpenGL)\n\n\ndef setup_logging(cli_options):\n    \"\"\"Setup logging with cli options defined by the user.\"\"\"\n    if cli_options.debug_info or get_debug_level() > 0:\n        levels = {2: logging.INFO, 3: logging.DEBUG}\n        log_level = levels[get_debug_level()]\n        log_format = '%(asctime)s [%(levelname)s] [%(name)s] -> %(message)s'\n\n        console_filters = cli_options.filter_log.split(',')\n        console_filters = [x.strip() for x in console_filters]\n        console_filters = console_filters + FILTER_NAMES\n        console_filters = [x for x in console_filters if x != '']\n\n        handlers = [logging.StreamHandler()]\n        if cli_options.debug_output == 'file':\n            log_file = 'spyder-debug.log'\n            handlers.append(\n                logging.FileHandler(filename=log_file, mode='w+')\n            )\n        else:\n            log_file = None\n\n        match_func = lambda x: True\n        if console_filters != [''] and len(console_filters) > 0:\n            dafsa = DAFSA(console_filters)\n            match_func = lambda x: (dafsa.lookup(x, stop_on_prefix=True)\n                                    is not None)\n\n        formatter = logging.Formatter(log_format)\n\n        class ModuleFilter(logging.Filter):\n            \"\"\"Filter messages based on module name prefix.\"\"\"\n\n            def filter(self, record):\n                return match_func(record.name)\n\n        filter = ModuleFilter()\n        root_logger.setLevel(log_level)\n        for handler in handlers:\n            handler.addFilter(filter)\n            handler.setFormatter(formatter)\n            handler.setLevel(log_level)\n            root_logger.addHandler(handler)\n\n\ndef delete_lsp_log_files():\n    \"\"\"Delete previous dead Spyder instances LSP log files.\"\"\"\n    regex = re.compile(r'.*_.*_(\\d+)[.]log')\n    files = glob.glob(osp.join(get_conf_path('lsp_logs'), '*.log'))\n    for f in files:\n        match = regex.match(f)\n        if match is not None:\n            pid = int(match.group(1))\n            if not psutil.pid_exists(pid):\n                os.remove(f)\n\n\ndef qt_message_handler(msg_type, msg_log_context, msg_string):\n    \"\"\"\n    Qt warning messages are intercepted by this handler.\n\n    On some operating systems, warning messages might be displayed\n    even if the actual message does not apply. This filter adds a\n    blacklist for messages that are being printed for no apparent\n    reason. Anything else will get printed in the internal console.\n\n    In DEV mode, all messages are printed.\n    \"\"\"\n    BLACKLIST = [\n        'QMainWidget::resizeDocks: all sizes need to be larger than 0',\n    ]\n    if DEV or msg_string not in BLACKLIST:\n        print(msg_string)  # spyder: test-skip\n\n\ndef create_splash_screen():\n    \"\"\"Create splash screen.\"\"\"\n    if not running_under_pytest():\n        pixmap = QPixmap(get_image_path('splash'))\n        splash = QSplashScreen(\n            pixmap.scaledToWidth(500, Qt.SmoothTransformation))\n        splash_font = splash.font()\n        splash_font.setPixelSize(14)\n        splash.setFont(splash_font)\n    else:\n        splash = None\n\n    return splash\n\n\ndef set_links_color(app):\n    \"\"\"\n    Fix color for links.\n\n    This was taken from QDarkstyle, which is MIT licensed.\n    \"\"\"\n    color = QStylePalette.COLOR_ACCENT_3\n    qcolor = QColor(color)\n\n    app_palette = app.palette()\n    app_palette.setColor(QPalette.Normal, QPalette.Link, qcolor)\n    app.setPalette(app_palette)\n", "path": "spyder/app/utils.py"}]}