2020#include " StelFileMgr.hpp"
2121#include " StelUtils.hpp"
2222
23+ #include < QOpenGLContext>
2324#include < QPainter>
25+ #include < QSurface>
2426#include < cmath>
2527
2628SplashScreen::SplashScreenWidget* SplashScreen::instance;
@@ -142,24 +144,56 @@ void setBestFontStretch(SplashTextHolder& h, QFont& font, const QString& text,
142144 font.setStretch (max);
143145}
144146
147+ // This is necessary for Android
148+ class OpenGLContextPresever
149+ {
150+ public:
151+ QOpenGLContext* prevContext;
152+ QSurface* prevSurface;
153+
154+ OpenGLContextPresever ()
155+ {
156+ prevContext = QOpenGLContext::currentContext ();
157+ if (prevContext)
158+ {
159+ prevSurface = prevContext->surface ();
160+ }
161+ }
162+
163+ ~OpenGLContextPresever ()
164+ {
165+ if (QOpenGLContext::currentContext () != prevContext)
166+ {
167+ prevContext->makeCurrent (prevSurface);
168+ }
169+ }
170+ };
171+
145172}
146173
147174void SplashScreen::present (const double sizeRatio)
148175{
176+ OpenGLContextPresever preserver;
177+
149178 Q_ASSERT (!instance);
150179 instance=new SplashScreenWidget (sizeRatio);
151180 instance->show ();
181+
182+ #if !defined(Q_OS_ANDROID)
152183 instance->ensureFirstPaint ();
184+ #endif
153185}
154186
155187void SplashScreen::showMessage (QString const & message)
156188{
189+ OpenGLContextPresever contextPreserver;
157190 Q_ASSERT (instance);
158191 instance->showMessage (message, Qt::AlignLeft|Qt::AlignBottom, Qt::white);
159192}
160193
161194void SplashScreen::finish (QWidget* mainWindow)
162195{
196+ OpenGLContextPresever contextPreserver;
163197 Q_ASSERT (instance);
164198 instance->hide ();
165199 instance->finish (mainWindow);
@@ -169,6 +203,7 @@ void SplashScreen::finish(QWidget* mainWindow)
169203
170204void SplashScreen::clearMessage ()
171205{
206+ OpenGLContextPresever contextPreserver;
172207 Q_ASSERT (instance);
173208 instance->clearMessage ();
174209}
@@ -215,6 +250,7 @@ SplashScreen::SplashScreenWidget::SplashScreenWidget(const double sizeRatio)
215250
216251void SplashScreen::SplashScreenWidget::paintEvent (QPaintEvent* event)
217252{
253+ OpenGLContextPresever contextPreserver;
218254 QSplashScreen::paintEvent (event);
219255
220256 QPainter p (this );
0 commit comments