Changeset View
Changeset View
Standalone View
Standalone View
plugins/kdecorations/aurorae/src/aurorae.cpp
Show First 20 Lines • Show All 358 Lines • ▼ Show 20 Line(s) | 348 | [this] { | |||
---|---|---|---|---|---|
359 | } | 359 | } | ||
360 | m_view->setRenderTarget(m_fbo.data()); | 360 | m_view->setRenderTarget(m_fbo.data()); | ||
361 | m_renderControl->polishItems(); | 361 | m_renderControl->polishItems(); | ||
362 | m_renderControl->sync(); | 362 | m_renderControl->sync(); | ||
363 | m_renderControl->render(); | 363 | m_renderControl->render(); | ||
364 | 364 | | |||
365 | m_view->resetOpenGLState(); | 365 | m_view->resetOpenGLState(); | ||
366 | m_buffer = m_fbo->toImage(); | 366 | m_buffer = m_fbo->toImage(); | ||
367 | | ||||
368 | m_contentRect = QRect(QPoint(0, 0), m_buffer.size()); | ||||
369 | if (m_padding && | ||||
370 | (m_padding->left() > 0 || m_padding->top() > 0 || m_padding->right() > 0 || m_padding->bottom() > 0) && | ||||
371 | !client().data()->isMaximized()) { | ||||
372 | m_contentRect = m_contentRect.adjusted(m_padding->left(), m_padding->top(), -m_padding->right(), -m_padding->bottom()); | ||||
373 | } | ||||
374 | updateShadow(); | ||||
375 | | ||||
367 | QOpenGLFramebufferObject::bindDefault(); | 376 | QOpenGLFramebufferObject::bindDefault(); | ||
368 | update(); | 377 | update(); | ||
369 | } | 378 | } | ||
370 | ); | 379 | ); | ||
371 | auto requestUpdate = [this] { | 380 | auto requestUpdate = [this] { | ||
372 | if (m_updateTimer->isActive()) { | 381 | if (m_updateTimer->isActive()) { | ||
373 | return; | 382 | return; | ||
374 | } | 383 | } | ||
▲ Show 20 Lines • Show All 70 Lines • ▼ Show 20 Line(s) | 447 | { | |||
445 | } | 454 | } | ||
446 | setBorders(*b); | 455 | setBorders(*b); | ||
447 | } | 456 | } | ||
448 | 457 | | |||
449 | void Decoration::paint(QPainter *painter, const QRect &repaintRegion) | 458 | void Decoration::paint(QPainter *painter, const QRect &repaintRegion) | ||
450 | { | 459 | { | ||
451 | Q_UNUSED(repaintRegion) | 460 | Q_UNUSED(repaintRegion) | ||
452 | painter->fillRect(rect(), Qt::transparent); | 461 | painter->fillRect(rect(), Qt::transparent); | ||
453 | QRectF r(QPointF(0, 0), m_buffer.size()); | 462 | painter->drawImage(rect(), m_buffer, m_contentRect); | ||
463 | } | ||||
464 | | ||||
465 | void Decoration::updateShadow() | ||||
466 | { | ||||
454 | bool updateShadow = false; | 467 | bool updateShadow = false; | ||
455 | const auto oldShadow = shadow(); | 468 | const auto oldShadow = shadow(); | ||
456 | if (m_padding && | 469 | if (m_padding && | ||
457 | (m_padding->left() > 0 || m_padding->top() > 0 || m_padding->right() > 0 || m_padding->bottom() > 0) && | 470 | (m_padding->left() > 0 || m_padding->top() > 0 || m_padding->right() > 0 || m_padding->bottom() > 0) && | ||
458 | !client().data()->isMaximized()) { | 471 | !client().data()->isMaximized()) { | ||
459 | r = r.adjusted(m_padding->left(), m_padding->top(), -m_padding->right(), -m_padding->bottom()); | | |||
460 | if (oldShadow.isNull()) { | 472 | if (oldShadow.isNull()) { | ||
461 | updateShadow = true; | 473 | updateShadow = true; | ||
462 | } else { | 474 | } else { | ||
463 | // compare padding | 475 | // compare padding | ||
464 | if (oldShadow->padding() != *m_padding) { | 476 | if (oldShadow->padding() != *m_padding) { | ||
465 | updateShadow = true; | 477 | updateShadow = true; | ||
466 | } | 478 | } | ||
467 | } | 479 | } | ||
Show All 18 Lines | |||||
486 | if (updateShadow) { | 498 | if (updateShadow) { | ||
487 | auto s = QSharedPointer<KDecoration2::DecorationShadow>::create(); | 499 | auto s = QSharedPointer<KDecoration2::DecorationShadow>::create(); | ||
488 | s->setShadow(img); | 500 | s->setShadow(img); | ||
489 | s->setPadding(*m_padding); | 501 | s->setPadding(*m_padding); | ||
490 | s->setInnerShadowRect(QRect(m_padding->left(), | 502 | s->setInnerShadowRect(QRect(m_padding->left(), | ||
491 | m_padding->top(), | 503 | m_padding->top(), | ||
492 | m_buffer.width() - m_padding->left() - m_padding->right(), | 504 | m_buffer.width() - m_padding->left() - m_padding->right(), | ||
493 | m_buffer.height() - m_padding->top() - m_padding->bottom())); | 505 | m_buffer.height() - m_padding->top() - m_padding->bottom())); | ||
494 | m_scheduledShadow = s; | 506 | setShadow(s); | ||
495 | } | 507 | } | ||
496 | } else { | 508 | } else { | ||
497 | if (!oldShadow.isNull()) { | 509 | if (!oldShadow.isNull()) { | ||
498 | m_scheduledShadow = QSharedPointer<KDecoration2::DecorationShadow>(); | 510 | setShadow(QSharedPointer<KDecoration2::DecorationShadow>()); | ||
499 | updateShadow = true; | | |||
500 | } | | |||
501 | } | 511 | } | ||
502 | if (updateShadow) { | | |||
503 | QMetaObject::invokeMethod(this, "updateShadow", Qt::QueuedConnection); | | |||
504 | } | 512 | } | ||
505 | painter->drawImage(rect(), m_buffer, r); | | |||
506 | } | 513 | } | ||
507 | 514 | | |||
508 | void Decoration::updateShadow() | | |||
509 | { | | |||
510 | setShadow(m_scheduledShadow); | | |||
511 | } | | |||
512 | 515 | | |||
513 | QMouseEvent Decoration::translatedMouseEvent(QMouseEvent *orig) | 516 | QMouseEvent Decoration::translatedMouseEvent(QMouseEvent *orig) | ||
514 | { | 517 | { | ||
515 | if (!m_padding || client().data()->isMaximized()) { | 518 | if (!m_padding || client().data()->isMaximized()) { | ||
516 | orig->setAccepted(false); | 519 | orig->setAccepted(false); | ||
517 | return *orig; | 520 | return *orig; | ||
518 | } | 521 | } | ||
519 | QMouseEvent event(orig->type(), orig->localPos() + QPointF(m_padding->left(), m_padding->top()), orig->button(), orig->buttons(), orig->modifiers()); | 522 | QMouseEvent event(orig->type(), orig->localPos() + QPointF(m_padding->left(), m_padding->top()), orig->button(), orig->buttons(), orig->modifiers()); | ||
▲ Show 20 Lines • Show All 253 Lines • Show Last 20 Lines |