Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
  • abdsaber000/vlc
  • falbrechtskirchinger/vlc
  • b.sullender/vlc
  • hulxv/vlc
  • zyad-ayad/vlc
408 results
Show changes
Commits on Source (5)
Showing
with 335 additions and 48 deletions
......@@ -3944,6 +3944,16 @@ dnl
EXTEND_HELP_STRING([Interface plugins:])
dnl
dnl KF6WindowSystem
dnl
PKG_CHECK_MODULES([KF6WINDOWSYSTEM], [KF6WindowSystem >= 6.0.0], [
have_kf6windowsystem="yes"
], [
have_kf6windowsystem="no"
])
AM_CONDITIONAL([HAVE_KF6WINDOWSYSTEM], [test "${have_kf6windowsystem}" = "yes"])
dnl
dnl QT
dnl
......
......@@ -188,6 +188,7 @@ libqt_plugin_la_SOURCES = \
maininterface/videosurface.hpp \
maininterface/video_window_handler.cpp \
maininterface/video_window_handler.hpp \
maininterface/windoweffects_module.hpp \
medialibrary/medialib.cpp \
medialibrary/medialib.hpp \
medialibrary/mlalbum.cpp \
......@@ -528,7 +529,9 @@ libqt_plugin_la_SOURCES += \
maininterface/mainctx_win32.hpp \
maininterface/compositor_win7.cpp \
maininterface/compositor_win7.hpp \
style/windowsthemeprovider.cpp
style/windowsthemeprovider.cpp \
maininterface/win32windoweffects_module.cpp \
maininterface/win32windoweffects_module.hpp
nodist_libqt_plugin_la_SOURCES += maininterface/mainctx_win32.moc.cpp \
maininterface/compositor_win7.moc.cpp
......@@ -614,6 +617,22 @@ endif
endif
endif
if !HAVE_WIN32
if HAVE_KF6WINDOWSYSTEM
libqt_plugin_la_CPPFLAGS += -DQT_HAS_KWINDOWSYSTEM_PLUGIN
libqt_kwindowsystem_plugin_la_CXXFLAGS = $(AM_CXXFLAGS) $(KF6WINDOWSYSTEM_CFLAGS)
libqt_kwindowsystem_plugin_la_LIBADD = $(KF6WINDOWSYSTEM_LIBS)
libqt_kwindowsystem_plugin_la_SOURCES = \
maininterface/kwindowsystem_module.cpp
if ENABLE_QT
gui_LTLIBRARIES += libqt_kwindowsystem_plugin.la
endif
endif
endif
# User interface compilation
uic_verbose = $(uic_verbose_$(V))
......
......@@ -40,7 +40,11 @@
# include "compositor_x11.hpp"
#endif
#include "maininterface/windoweffects_module.hpp"
#include <vlc_window.h>
#include <vlc_modules.h>
using namespace vlc;
......@@ -184,7 +188,12 @@ CompositorVideo::CompositorVideo(qt_intf_t *p_intf, QObject* parent)
CompositorVideo::~CompositorVideo()
{
if (m_windowEffectsModule)
{
if (m_windowEffectsModule->p_module)
module_unneed(m_windowEffectsModule, m_windowEffectsModule->p_module);
vlc_object_delete(m_windowEffectsModule);
}
}
void CompositorVideo::commonSetupVoutWindow(vlc_window_t* p_wnd, VoutDestroyCb destroyCb)
......@@ -250,6 +259,7 @@ void CompositorVideo::commonWindowDisable()
bool CompositorVideo::commonGUICreateImpl(QWindow* window, CompositorVideo::Flags flags)
{
assert(m_mainCtx);
assert(window);
m_videoSurfaceProvider = std::make_unique<VideoSurfaceProvider>();
m_mainCtx->setVideoSurfaceProvider(m_videoSurfaceProvider.get());
......@@ -261,6 +271,10 @@ bool CompositorVideo::commonGUICreateImpl(QWindow* window, CompositorVideo::Flag
connect(m_videoSurfaceProvider.get(), &VideoSurfaceProvider::surfaceSizeChanged,
this, &CompositorVideo::onSurfaceSizeChanged);
}
if (flags & CompositorVideo::HAS_ACRYLIC)
{
setBlurBehind(window, true);
}
m_videoWindowHandler = std::make_unique<VideoWindowHandler>(m_intf);
m_videoWindowHandler->setWindow( window );
......@@ -269,7 +283,7 @@ bool CompositorVideo::commonGUICreateImpl(QWindow* window, CompositorVideo::Flag
#else
m_interfaceWindowHandler = std::make_unique<InterfaceWindowHandler>(m_intf, m_mainCtx, window);
#endif
m_mainCtx->setHasAcrylicSurface(flags & CompositorVideo::HAS_ACRYLIC);
m_mainCtx->setHasAcrylicSurface(m_blurBehind);
m_mainCtx->setWindowSuportExtendedFrame(flags & CompositorVideo::HAS_EXTENDED_FRAME);
#ifdef _WIN32
......@@ -320,3 +334,39 @@ void CompositorVideo::commonIntfDestroy()
m_videoSurfaceProvider.reset();
unloadGUI();
}
bool CompositorVideo::setBlurBehind(QWindow *window, const bool enable)
{
assert(window);
assert(m_intf);
if (m_failedToLoadWindowEffectsModule)
return false;
if (!m_windowEffectsModule)
{
m_windowEffectsModule = vlc_object_create<WindowEffectsModule>(m_intf);
if (!m_windowEffectsModule) // do not set m_failedToLoadWindowEffectsModule here
return false;
}
if (!m_windowEffectsModule->p_module)
{
m_windowEffectsModule->p_module = module_need(m_windowEffectsModule, "qtwindoweffects", nullptr, false);
if (!m_windowEffectsModule->p_module)
{
msg_Info(m_intf, "A module providing window effects capability could not be instantiated. Background blur effect will not be available.");
m_failedToLoadWindowEffectsModule = true;
vlc_object_delete(m_windowEffectsModule);
m_windowEffectsModule = nullptr;
return false;
}
}
if (!m_windowEffectsModule->isEffectAvailable(WindowEffectsModule::BlurBehind))
return false;
m_windowEffectsModule->setBlurBehind(window, enable);
m_blurBehind = enable;
return true;
}
......@@ -48,6 +48,7 @@ class QWindow;
class QQuickItem;
class QQuickView;
class QQuickWindow;
struct WindowEffectsModule;
namespace vlc {
......@@ -126,6 +127,8 @@ protected:
void commonWindowEnable();
void commonWindowDisable();
bool setBlurBehind(QWindow* window, bool enable = true);
protected:
bool commonGUICreate(QWindow* window, QmlUISurface* , CompositorVideo::Flags flags);
bool commonGUICreate(QWindow* window, QQuickView* , CompositorVideo::Flags flags);
......@@ -154,6 +157,10 @@ protected:
#ifdef _WIN32
std::unique_ptr<WinTaskbarWidget> m_taskbarWidget;
#endif
bool m_blurBehind = false;
WindowEffectsModule* m_windowEffectsModule = nullptr;
bool m_failedToLoadWindowEffectsModule = false;
};
Q_DECLARE_OPERATORS_FOR_FLAGS(CompositorVideo::Flags)
......
......@@ -34,8 +34,6 @@
#warning "QSystemLibrary private header is required for DirectComposition compositor."
#endif
#include <QOperatingSystemVersion>
#include <QtGui/qpa/qplatformnativeinterface.h>
#include <QtCore/private/qsystemlibrary_p.h>
......@@ -62,8 +60,6 @@
#include "compositor_dcomp_acrylicsurface.hpp"
#include "maininterface/interface_window_handler.hpp"
#include <dwmapi.h>
namespace vlc {
int CompositorDirectComposition::windowEnable(const vlc_window_cfg_t *)
......@@ -201,7 +197,7 @@ void CompositorDirectComposition::setup()
m_dcompDevice->Commit();
if (!m_nativeAcrylicAvailable)
if (!m_blurBehind)
{
try
{
......@@ -258,31 +254,11 @@ bool CompositorDirectComposition::makeMainInterface(MainCtx* mainCtx)
eventLoop.quit();
}, Qt::SingleShotConnection);
CompositorVideo::Flags flags = CompositorVideo::CAN_SHOW_PIP;
// If Windows 11 Build 22621, enable acrylic effect:
m_nativeAcrylicAvailable = QOperatingSystemVersion::current()
>= QOperatingSystemVersion(QOperatingSystemVersion::Windows, 11, 0, 22621);
if (m_nativeAcrylicAvailable)
{
flags |= CompositorVideo::HAS_ACRYLIC;
}
const bool ret = commonGUICreate(quickViewPtr, quickViewPtr, flags);
CompositorVideo::Flags flags = CompositorVideo::CAN_SHOW_PIP | CompositorVideo::HAS_ACRYLIC;
m_quickView->create();
if (m_nativeAcrylicAvailable)
{
enum BackdropType
{
DWMSBT_TRANSIENTWINDOW = 3
} backdropType = DWMSBT_TRANSIENTWINDOW;
DwmSetWindowAttribute(reinterpret_cast<HWND>(m_quickView->winId()),
38 /* DWMWA_SYSTEMBACKDROP_TYPE */,
&backdropType,
sizeof(backdropType));
}
const bool ret = commonGUICreate(quickViewPtr, quickViewPtr, flags);
m_quickView->show();
......
......@@ -87,8 +87,6 @@ private:
Microsoft::WRL::ComPtr<IDCompositionVisual> m_videoVisual;
IDCompositionVisual *m_uiVisual = nullptr;
bool m_nativeAcrylicAvailable = false;
QPointer<class CompositorDCompositionAcrylicSurface> m_acrylicSurface;
};
......
......@@ -119,7 +119,7 @@ bool CompositorWayland::makeMainInterface(MainCtx* mainCtx)
m_waylandImpl->setupInterface(m_waylandImpl, interfaceSurface, dprForWindow(m_qmlView.get()));
return commonGUICreate(m_qmlView.get(), m_qmlView.get(),
CompositorVideo::CAN_SHOW_PIP);
CompositorVideo::CAN_SHOW_PIP | CompositorVideo::HAS_ACRYLIC);
}
QWindow* CompositorWayland::interfaceMainWindow() const
......
......@@ -207,14 +207,15 @@ bool CompositorX11::makeMainInterface(MainCtx* mainCtx)
m_qmlView->winId();
m_qmlView->show();
CompositorVideo::Flags flags = CompositorVideo::CAN_SHOW_PIP;
if (m_renderWindow->hasAcrylic())
flags |= CompositorVideo::HAS_ACRYLIC;
CompositorVideo::Flags flags = CompositorVideo::CAN_SHOW_PIP | HAS_ACRYLIC;
if (m_renderWindow->supportExtendedFrame())
flags |= CompositorVideo::HAS_EXTENDED_FRAME;
if (!commonGUICreate(m_renderWindow.get(), m_qmlView.get(), flags))
return false;
if (m_blurBehind)
m_renderWindow->m_hasAcrylic = true;
m_renderWindow->setInterfaceWindow(m_qmlView.get());
m_renderWindow->setVideoWindow(m_videoWidget->windowHandle());
......
......@@ -42,8 +42,6 @@
#include "qt.hpp"
#include "mainctx.hpp"
//blur behind for KDE
#define _KDE_NET_WM_BLUR_BEHIND_REGION_NAME "_KDE_NET_WM_BLUR_BEHIND_REGION"
#define _GTK_FRAME_EXTENTS "_GTK_FRAME_EXTENTS"
using namespace vlc;
......@@ -397,16 +395,6 @@ bool CompositorX11RenderWindow::init()
return true;
}
//check if KDE "acrylic" effect is available
xcb_atom_t blurBehindAtom = getInternAtom(qtConn, _KDE_NET_WM_BLUR_BEHIND_REGION_NAME);
if (blurBehindAtom != XCB_ATOM_NONE)
{
uint32_t val = 0;
xcb_change_property(qtConn, XCB_PROP_MODE_REPLACE, m_wid,
blurBehindAtom, XCB_ATOM_CARDINAL, 32, 1, &val);
m_hasAcrylic = true;
}
//_GTK_FRAME_EXTENTS should be available at least on Gnome/KDE/FXCE/Enlightement
xcb_atom_t gtkExtendFrame = getInternAtom(qtConn, _GTK_FRAME_EXTENTS);
if (gtkExtendFrame != XCB_ATOM_NONE && wmNetSupport(qtConn, rootWindow, gtkExtendFrame))
......
......@@ -151,6 +151,8 @@ public:
class CompositorX11RenderWindow : public DummyRenderWindow, public AccessibleRenderWindow
{
friend class CompositorX11;
Q_OBJECT
public:
explicit CompositorX11RenderWindow(qt_intf_t* p_intf, xcb_connection_t* conn, bool useCSD, QWindow* parent = nullptr);
......
/*****************************************************************************
* Copyright (C) 2024 VLC authors and VideoLAN
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* ( at your option ) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#include "windoweffects_module.hpp"
#include <QRegion>
#include <vlc_plugin.h>
#include <KWindowEffects>
static bool isEffectAvailable(const WindowEffectsModule::Effect effect)
{
KWindowEffects::Effect kWindowEffect;
switch (effect)
{
case WindowEffectsModule::BlurBehind:
kWindowEffect = KWindowEffects::BlurBehind;
break;
default:
return false;
};
return KWindowEffects::isEffectAvailable(kWindowEffect);
}
static void setBlurBehind(QWindow* const window, const bool enable = true)
{
KWindowEffects::enableBlurBehind(window, enable, QRegion());
}
static int Open(vlc_object_t* const p_this)
{
assert(p_this);
// If none of the effects are available,
// it probably means that KWindowEffects
// does not support the environment.
// In that case, simply fail here,
// so that another potentially compatible
// module can be loaded instead:
if (!isEffectAvailable(WindowEffectsModule::BlurBehind))
return VLC_EGENERIC;
const auto obj = reinterpret_cast<WindowEffectsModule*>(p_this);
obj->setBlurBehind = setBlurBehind;
obj->isEffectAvailable = isEffectAvailable;
return VLC_SUCCESS;
}
vlc_module_begin()
add_shortcut("QtKWindowSystem")
set_description("Provides window effects through KWindowSystem.")
set_capability("qtwindoweffects", 10)
set_callback(Open)
vlc_module_end()
/*****************************************************************************
* Copyright (C) 2024 VLC authors and VideoLAN
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* ( at your option ) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#include "win32windoweffects_module.hpp"
#include "windoweffects_module.hpp"
#include <QOperatingSystemVersion>
#include <QWindow>
#include <cassert>
#include <dwmapi.h>
static bool isEffectAvailable(const WindowEffectsModule::Effect effect)
{
// Version check is done on module open, no need to re-do it here.
switch (effect)
{
case WindowEffectsModule::BlurBehind:
return true;
default:
return false;
};
}
static void setBlurBehind(QWindow* const window, const bool enable = true)
{
assert(window);
assert(window->winId()); // use QWindow::create() before calling this function
enum BackdropType
{
DWMSBT_NONE = 1,
DWMSBT_TRANSIENTWINDOW = 3
} backdropType = enable ? DWMSBT_TRANSIENTWINDOW : DWMSBT_NONE;
DwmSetWindowAttribute(reinterpret_cast<HWND>(window->winId()),
38 /* DWMWA_SYSTEMBACKDROP_TYPE */,
&backdropType,
sizeof(backdropType));
}
int QtWin32WindowEffectsOpen(vlc_object_t* p_this)
{
assert(p_this);
if (QOperatingSystemVersion::current()
< QOperatingSystemVersion(QOperatingSystemVersion::Windows, 11, 0, 22621))
return VLC_EGENERIC;
const auto obj = reinterpret_cast<WindowEffectsModule*>(p_this);
obj->setBlurBehind = setBlurBehind;
obj->isEffectAvailable = isEffectAvailable;
return VLC_SUCCESS;
}
/*****************************************************************************
* Copyright (C) 2024 VLC authors and VideoLAN
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* ( at your option ) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#ifndef WIN32WINDOWEFFECTS_MODULE_HPP
#define WIN32WINDOWEFFECTS_MODULE_HPP
#include <vlc_common.h>
int QtWin32WindowEffectsOpen(vlc_object_t* p_this);
#endif // WIN32WINDOWEFFECTS_MODULE_HPP
/*****************************************************************************
* Copyright (C) 2024 VLC authors and VideoLAN
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* ( at your option ) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#ifndef WINDOWEFFECTSMODULE_HPP
#define WINDOWEFFECTSMODULE_HPP
#include <vlc_common.h>
class QWindow;
struct WindowEffectsModule
{
enum Effect {
BlurBehind
};
vlc_object_t obj;
module_t *p_module = nullptr;
void *p_sys = nullptr;
bool (*isEffectAvailable)(Effect effect);
void (*setBlurBehind)(QWindow* window, bool enable);
};
#endif // WINDOWEFFECTSMODULE_HPP
......@@ -292,6 +292,7 @@ some_sources = files(
'maininterface/videosurface.hpp',
'maininterface/video_window_handler.cpp',
'maininterface/video_window_handler.hpp',
'maininterface/windoweffects_module.hpp',
'medialibrary/medialib.cpp',
'medialibrary/medialib.hpp',
'medialibrary/mlalbum.cpp',
......@@ -649,6 +650,25 @@ if qt6_dep.found()
endif
endif
if host_system == 'windows'
some_sources += files('maininterface/win32windoweffects_module.cpp',
'maininterface/win32windoweffects_module.hpp')
else
kf6WindowSystem_dep = dependency('KF6WindowSystem',
version: '>=6.0.0',
required: false)
if (kf6WindowSystem_dep.found())
vlc_modules += {
'name' : 'qtwindoweffects',
'sources' : files(
'maininterface/windoweffects_module.hpp',
'maininterface/kwindowsystem_module.cpp',
),
'dependencies' : [kf6WindowSystem_dep, qt6_dep]
}
endif
endif
# TODO support qmlcachegen
vlc_modules += {
......
......@@ -66,6 +66,7 @@ extern "C" char **environ;
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
# include "maininterface/mainctx_win32.hpp"
#include "maininterface/win32windoweffects_module.hpp"
#else
# include "maininterface/mainctx.hpp" /* MainCtx creation */
#endif
......@@ -439,6 +440,12 @@ vlc_module_begin ()
set_callback( WindowsThemeProviderOpen )
set_description( "Qt Windows theme" )
add_shortcut("qt-themeprovider-windows")
add_submodule ()
add_shortcut( "QtWin32WindowEffects" )
set_description( "Provides window effects on Windows." )
set_capability( "qtwindoweffects", 10 )
set_callback( QtWin32WindowEffectsOpen )
#endif
add_submodule()
set_capability("qt theme provider", 1)
......