15#include "thumbnailasideconfig.h"
17#include <KGlobalAccel>
18#include <KLocalizedString>
29 QAction *a =
new QAction(
this);
30 a->setObjectName(QStringLiteral(
"ToggleCurrentThumbnail"));
31 a->setText(i18n(
"Toggle Thumbnail for Current Window"));
32 KGlobalAccel::self()->setDefaultShortcut(a, QList<QKeySequence>() << (Qt::META | Qt::CTRL | Qt::Key_T));
33 KGlobalAccel::self()->setShortcut(a, QList<QKeySequence>() << (Qt::META | Qt::CTRL | Qt::Key_T));
34 connect(a, &QAction::triggered,
this, &ThumbnailAsideEffect::toggleCurrentThumbnail);
42 slotWindowAdded(window);
50 ThumbnailAsideConfig::self()->read();
51 maxwidth = ThumbnailAsideConfig::maxWidth();
52 spacing = ThumbnailAsideConfig::spacing();
53 opacity = ThumbnailAsideConfig::opacity() / 100.0;
54 screen = ThumbnailAsideConfig::screen();
63 for (
const Data &d : std::as_const(windows)) {
64 if (painted.intersects(d.rect)) {
80void ThumbnailAsideEffect::slotWindowDamaged(
EffectWindow *w)
82 for (
const Data &d : std::as_const(windows)) {
89void ThumbnailAsideEffect::slotWindowFrameGeometryChanged(EffectWindow *w,
const QRectF &old)
91 for (
const Data &d : std::as_const(windows)) {
93 if (w->size() == old.size()) {
103void ThumbnailAsideEffect::slotWindowAdded(EffectWindow *w)
109void ThumbnailAsideEffect::slotWindowClosed(EffectWindow *w)
114void ThumbnailAsideEffect::toggleCurrentThumbnail()
117 if (active ==
nullptr) {
120 if (windows.contains(active)) {
121 removeThumbnail(active);
123 addThumbnail(active);
127void ThumbnailAsideEffect::addThumbnail(EffectWindow *w)
132 d.index = windows.count();
137void ThumbnailAsideEffect::removeThumbnail(EffectWindow *w)
139 if (!windows.contains(w)) {
143 int index = windows[w].index;
145 for (QHash<EffectWindow *, Data>::Iterator it = windows.begin();
149 if (d.index > index) {
156void ThumbnailAsideEffect::arrange()
158 if (windows.size() == 0) {
162 QList<int> pos(windows.size());
164 for (
const Data &d : std::as_const(windows)) {
165 height += d.window->height();
166 mwidth = std::max(mwidth, d.window->width());
167 pos[d.index] = d.window->height();
170 if (!effectiveScreen) {
174 double scale = area.height() / double(height);
175 scale = std::min(scale, maxwidth /
double(mwidth));
180 pos[i] = int(pos[i] * scale);
184 for (QHash<EffectWindow *, Data>::Iterator it = windows.begin();
188 int width = int(d.window->width() * scale);
189 d.rect = QRect(area.right() - width, area.bottom() - pos[d.index], width,
int(d.window->height() * scale));
194void ThumbnailAsideEffect::repaintAll()
196 for (
const Data &d : std::as_const(windows)) {
208#include "moc_thumbnailaside.cpp"
Representation of a window used by/for Effect classes.
void windowDamaged(KWin::EffectWindow *w)
void windowFrameGeometryChanged(KWin::EffectWindow *window, const QRectF &oldGeometry)
void drawWindow(const RenderTarget &renderTarget, const RenderViewport &viewport, EffectWindow *w, int mask, const QRegion ®ion, WindowPaintData &data)
void screenLockingChanged(bool locked)
void windowClosed(KWin::EffectWindow *w)
void paintScreen(const RenderTarget &renderTarget, const RenderViewport &viewport, int mask, const QRegion ®ion, Output *screen)
QList< EffectWindow * > stackingOrder
Q_SCRIPTABLE void addRepaint(const QRectF &r)
bool isScreenLocked() const
Output * findScreen(const QString &name) const
void paintWindow(const RenderTarget &renderTarget, const RenderViewport &viewport, EffectWindow *w, int mask, const QRegion ®ion, WindowPaintData &data)
KWin::VirtualDesktop * currentDesktop
KWin::EffectWindow * activeWindow
QRectF clientArea(clientAreaOption, const Output *screen, const VirtualDesktop *desktop) const
KSharedConfigPtr config() const
KWin::Output * activeScreen
void windowAdded(KWin::EffectWindow *w)
QMatrix4x4 projectionMatrix() const
void paintScreen(const RenderTarget &renderTarget, const RenderViewport &viewport, int mask, const QRegion ®ion, Output *screen) override
bool isActive() const override
void reconfigure(ReconfigureFlags) override
void paintWindow(const RenderTarget &renderTarget, const RenderViewport &viewport, EffectWindow *w, int mask, QRegion region, WindowPaintData &data) override
static void setPositionTransformations(WindowPaintData &data, QRect ®ion, EffectWindow *w, const QRect &r, Qt::AspectRatioMode aspect)
qreal multiplyOpacity(qreal factor)
@ PAINT_WINDOW_TRANSFORMED
@ PAINT_WINDOW_TRANSLUCENT