Skip to content

Commit

Permalink
MythPainterWindow: Set the Wayland opaque region on each resizeEvent
Browse files Browse the repository at this point in the history
- this should *help* with Wayland opacity issues but is not a complete
cure. Best case scenario; it also improves performance (as the
compositor knows it only needs to render the MythTV main window and
nothing else)

Refs #210 #216 #218
  • Loading branch information
mark-kendall committed Nov 17, 2020
1 parent 22e9d67 commit 1d7da6d
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 2 deletions.
25 changes: 25 additions & 0 deletions mythtv/libs/libmythui/mythpainterwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@
#include "vulkan/mythpaintervulkan.h"
#endif

#ifdef USING_WAYLANDEXTRAS
#include <QGuiApplication>
#include "platforms/mythwaylandextras.h"
#endif

#define MYTH_PAINTER_QT QString("Qt")

using TryPainter = bool(*)(MythMainWindow*, MythPainterWindow*&, MythPainter*&, bool&);
Expand Down Expand Up @@ -132,6 +137,17 @@ void MythPainterWindow::DestroyPainters(MythPainterWindow *&PaintWin, MythPainte
MythPainterWindow::MythPainterWindow(MythMainWindow *MainWin)
: QWidget(MainWin)
{
#ifdef USING_WAYLANDEXTRAS
if (qGuiApp->platformName().toLower().contains("wayland"))
m_waylandDev = new MythWaylandDevice(MainWin);
#endif
}

MythPainterWindow::~MythPainterWindow()
{
#ifdef USING_WAYLANDEXTRAS
delete m_waylandDev;
#endif
}

MythRender* MythPainterWindow::GetRenderDevice()
Expand All @@ -143,3 +159,12 @@ bool MythPainterWindow::RenderIsShared()
{
return m_render && m_render->IsShared();
}

void MythPainterWindow::resizeEvent(QResizeEvent* /*ResizeEvent*/)
{
#ifdef USING_WAYLANDEXTRAS
if (m_waylandDev)
m_waylandDev->SetOpaqueRegion(rect());
#endif
}

14 changes: 12 additions & 2 deletions mythtv/libs/libmythui/mythpainterwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,17 @@
#include "mythuiexp.h"
#include "mythrender_base.h"

#ifdef USING_WAYLANDEXTRAS
class MythWaylandDevice;
#endif

class MythMainWindow;
class MythPainter;

class MythPainterWindow : public QWidget
{
Q_OBJECT

public:
static MUI_PUBLIC QString GetDefaultPainter();
static MUI_PUBLIC QStringList GetPainters();
Expand All @@ -24,15 +30,19 @@ class MythPainterWindow : public QWidget

MythRender* GetRenderDevice();
bool RenderIsShared ();
void resizeEvent (QResizeEvent* /*ResizeEvent*/) override;

protected:
explicit MythPainterWindow(MythMainWindow* MainWin);
~MythPainterWindow() override = default;
~MythPainterWindow() override;

MythRender* m_render { nullptr };

private:
Q_DISABLE_COPY(MythPainterWindow)
#ifdef USING_WAYLANDEXTRAS
MythWaylandDevice* m_waylandDev { nullptr };
#endif
};

#endif // MYTHPAINTERWINDOW_H
#endif
1 change: 1 addition & 0 deletions mythtv/libs/libmythui/vulkan/mythpainterwindowvulkan.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,4 +89,5 @@ void MythPainterWindowVulkan::resizeEvent(QResizeEvent* ResizeEvent)
{
if (m_wrapper)
m_wrapper->resize(ResizeEvent->size());
MythPainterWindow::resizeEvent(ResizeEvent);
}

0 comments on commit 1d7da6d

Please sign in to comment.