diff options
Diffstat (limited to 'opensuse/core/tdelibs/kickoff-drop-shadow.diff')
-rw-r--r-- | opensuse/core/tdelibs/kickoff-drop-shadow.diff | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/opensuse/core/tdelibs/kickoff-drop-shadow.diff b/opensuse/core/tdelibs/kickoff-drop-shadow.diff new file mode 100644 index 000000000..e4c7befc2 --- /dev/null +++ b/opensuse/core/tdelibs/kickoff-drop-shadow.diff @@ -0,0 +1,177 @@ +Index: kdefx/kstyle.cpp +=================================================================== +--- kdefx/kstyle.cpp.orig ++++ kdefx/kstyle.cpp +@@ -31,6 +31,7 @@ + + #include <qapplication.h> + #include <qbitmap.h> ++#include <qmetaobject.h> + #include <qcleanuphandler.h> + #include <qmap.h> + #include <qimage.h> +@@ -79,7 +80,7 @@ namespace + QWidget* w1; + QWidget* w2; + }; +- typedef QMap<const QPopupMenu*,ShadowElements> ShadowMap; ++ typedef QMap<const QWidget*,ShadowElements> ShadowMap; + static ShadowMap *_shadowMap = 0; + QSingleCleanupHandler<ShadowMap> cleanupShadowMap; + ShadowMap &shadowMap() { +@@ -113,8 +114,13 @@ namespace + + const double shadow_strip[4] = + { 0.565, 0.675, 0.835, 0.945 }; +-} + ++ static bool useDropShadow(QWidget* w) ++ { ++ return w && w->metaObject() && ++ w->metaObject()->findProperty("KStyleMenuDropShadow") != -1; ++ } ++} + + namespace + { +@@ -128,12 +134,12 @@ class TransparencyHandler : public QObje + + protected: + void blendToColor(const QColor &col); +- void blendToPixmap(const QColorGroup &cg, const QPopupMenu* p); ++ void blendToPixmap(const QColorGroup &cg, const QWidget* p); + #ifdef HAVE_XRENDER +- void XRenderBlendToPixmap(const QPopupMenu* p); ++ void XRenderBlendToPixmap(const QWidget* p); + #endif +- void createShadowWindows(const QPopupMenu* p); +- void removeShadowWindows(const QPopupMenu* p); ++ void createShadowWindows(const QWidget* p); ++ void removeShadowWindows(const QWidget* p); + void rightShadow(QImage& dst); + void bottomShadow(QImage& dst); + private: +@@ -256,8 +262,16 @@ void KStyle::polish( QWidget* widget ) + widget->installEventFilter(this); + } + } +-} ++ if (widget->isTopLevel()) ++ { ++ if (!d->menuHandler && useDropShadow(widget)) ++ d->menuHandler = new TransparencyHandler(this, Disabled, 1.0, false); + ++ if (d->menuHandler && useDropShadow(widget)) ++ widget->installEventFilter(d->menuHandler); ++ } ++} ++ + + void KStyle::unPolish( QWidget* widget ) + { +@@ -267,8 +281,10 @@ void KStyle::unPolish( QWidget* widget ) + QFrame::Shape shape = frame->frameShape(); + if (shape == QFrame::ToolBarPanel || shape == QFrame::MenuBarPanel) + widget->removeEventFilter(this); +- } ++ } + } ++ if (widget->isTopLevel() && d->menuHandler && useDropShadow(widget)) ++ widget->removeEventFilter(d->menuHandler); + } + + +@@ -1997,7 +2013,7 @@ void TransparencyHandler::bottomShadow(Q + } + + // Create a shadow of thickness 4. +-void TransparencyHandler::createShadowWindows(const QPopupMenu* p) ++void TransparencyHandler::createShadowWindows(const QWidget* p) + { + #ifdef Q_WS_X11 + int x2 = p->x()+p->width(); +@@ -2044,7 +2060,7 @@ void TransparencyHandler::createShadowWi + #endif + } + +-void TransparencyHandler::removeShadowWindows(const QPopupMenu* p) ++void TransparencyHandler::removeShadowWindows(const QWidget* p) + { + #ifdef Q_WS_X11 + ShadowMap::iterator it = shadowMap().find(p); +@@ -2070,7 +2086,7 @@ bool TransparencyHandler::eventFilter( Q + // Copyright (C) 2000 Daniel M. Duley <mosfet@kde.org> + + // Added 'fake' menu shadows <04-Jul-2002> -- Karol +- QPopupMenu* p = (QPopupMenu*)object; ++ QWidget* p = (QWidget*)object; + QEvent::Type et = event->type(); + + if (et == QEvent::Show) +@@ -2109,13 +2125,23 @@ bool TransparencyHandler::eventFilter( Q + // * shadows after duplicate show events. + // * TODO : determine real cause for duplicate events + // * till 20021005 +- if (dropShadow && p->width() > 16 && p->height() > 16 && !shadowMap().contains( p )) ++ if ((dropShadow || useDropShadow(p)) ++ && p->width() > 16 && p->height() > 16 && !shadowMap().contains( p )) + createShadowWindows(p); + } ++ else if (et == QEvent::Resize && p->isShown() && p->isTopLevel()) ++ { ++ // Handle drop shadow ++ if (dropShadow || useDropShadow(p)) ++ { ++ removeShadowWindows(p); ++ createShadowWindows(p); ++ } ++ } + else if (et == QEvent::Hide) + { + // Handle drop shadow +- if (dropShadow) ++ if (dropShadow || useDropShadow(p)) + removeShadowWindows(p); + + // Handle translucency +@@ -2140,7 +2166,7 @@ void TransparencyHandler::blendToColor(c + } + + +-void TransparencyHandler::blendToPixmap(const QColorGroup &cg, const QPopupMenu* p) ++void TransparencyHandler::blendToPixmap(const QColorGroup &cg, const QWidget* p) + { + if (opacity < 0.0 || opacity > 1.0) + return; +@@ -2153,7 +2179,10 @@ void TransparencyHandler::blendToPixmap( + return; + + // Allow styles to define the blend pixmap - allows for some interesting effects. +- kstyle->renderMenuBlendPixmap( blendPix, cg, p ); ++ if (::qt_cast<QPopupMenu*>(p)) ++ kstyle->renderMenuBlendPixmap( blendPix, cg, ::qt_cast<QPopupMenu*>(p) ); ++ else ++ blendPix.fill(cg.button()); // Just tint as the default behavior + + QImage blendImg = blendPix.convertToImage(); + QImage backImg = pix.convertToImage(); +@@ -2166,13 +2195,17 @@ void TransparencyHandler::blendToPixmap( + // Here we go, use XRender in all its glory. + // NOTE: This is actually a bit slower than the above routines + // on non-accelerated displays. -- Karol. +-void TransparencyHandler::XRenderBlendToPixmap(const QPopupMenu* p) ++void TransparencyHandler::XRenderBlendToPixmap(const QWidget* p) + { + KPixmap renderPix; + renderPix.resize( pix.width(), pix.height() ); + + // Allow styles to define the blend pixmap - allows for some interesting effects. +- kstyle->renderMenuBlendPixmap( renderPix, p->colorGroup(), p ); ++ if (::qt_cast<QPopupMenu*>(p)) ++ kstyle->renderMenuBlendPixmap( renderPix, p->colorGroup(), ++ ::qt_cast<QPopupMenu*>(p) ); ++ else ++ renderPix.fill(p->colorGroup().button()); // Just tint as the default behavior + + Display* dpy = qt_xdisplay(); + Pixmap alphaPixmap; |