[prev in list] [next in list] [prev in thread] [next in thread]
List: pykde
Subject: [PyKDE] [Qt4] visual appearance of plastique style on mouse over
From: Hans-Peter Jansen <hpj () urpla ! net>
Date: 2006-11-11 12:45:05
Message-ID: 200611111345.06409.hpj () urpla ! net
[Download RAW message or body]
Hi,
while I caught the flu, I bothered with Qt4 a bit for the first time (being
addicted to _Py_Qt3 since ages).
Building an rpm for SuSE 9.3 went pretty smooth, and playing around with
qtdemo in the build dir was very appealing, up to the point where I
recognized the appearance of buttons/combos and the like on mouse over for
the first time.. Well, I may use a palette, where this is especially
disturbing, but repainting the buttons top and bottom lines with the
highlight color just looks butt ugly here.
Since I still had some spare time, I looked into the source, quickly found
the offending part, and started to play. The result is attached. Let me
know your opinions, and let's hope, that Trolltech adds something similar
to the next version..
BTW, compared with the rest of my KDE 3.5.5 desktop in plastik style, I also
noted, that all but the button color wasn't imported correctly from my
environment..
BTW2: the appearance of QProgressBars is also unfortunate, if the highlight
color doesn't contrast strongly with the background.
Here's my palette:
Palette\active=#000000, #f8d991, #ffffff, #fbecc8, #7c6c48, #a59161,
#000000, #ffffff, #000000, #ffffff, #ffe8ae, #000000, #ffdd76, #000000,
#0000ff, #ff00ff, #e8e8e8
[just replace in .config/Trolltech.conf]
Kind regards,
Pete
["qplastiquestyle-hover-fix.diff" (text/x-diff)]
--- src/gui/styles/qplastiquestyle.cpp.orig 2006-10-20 12:23:41.000000000 +0200
+++ src/gui/styles/qplastiquestyle.cpp 2006-11-11 12:59:33.578162970 +0100
@@ -402,6 +402,25 @@ static const char * const qt_titlebar_co
" ",
" "};
+// shamelessly stolen from kdelibs/kstyles/plastik/misc.cpp
+QColor alphaBlendColors(const QColor &bgColor, const QColor &fgColor, const int a)
+{
+ // normal button...
+ QRgb rgb = bgColor.rgb();
+ QRgb rgb_b = fgColor.rgb();
+ int alpha = a;
+ if(alpha>255) alpha = 255;
+ if(alpha<0) alpha = 0;
+ int inv_alpha = 255 - alpha;
+
+ QColor result = QColor( qRgb(qRed(rgb_b)*inv_alpha/255 + qRed(rgb)*alpha/255,
+ qGreen(rgb_b)*inv_alpha/255 + qGreen(rgb)*alpha/255,
+ qBlue(rgb_b)*inv_alpha/255 + qBlue(rgb)*alpha/255) );
+
+ return result;
+}
+
+
#define BEGIN_PLASTIQUE_PIXMAPCACHE(a) \
QRect rect = button->rect; \
QPixmap cache; \
@@ -1518,9 +1537,18 @@ void QPlastiqueStyle::drawPrimitive(Prim
}
// Main fill
- p->fillRect(fillRect,
- qMapBrushToRect(sunken ? sunkenButtonGradientBrush
- : buttonGradientBrush, rect));
+ if (hover && !sunken) {
+ QColor hoverColor = alphaBlendColors(option->palette.button(),
+ option->palette.highlight(), 230);
+ QBrush buttonHoverBrush = qMapBrushToRect(hoverColor, rect);
+ QLinearGradient buttonHoverGradient(rect.topLeft(), rect.bottomLeft());
+ buttonHoverGradient.setColorAt(0.0, buttonHoverBrush.color().light(104));
+ buttonHoverGradient.setColorAt(1.0, buttonHoverBrush.color().dark(110));
+ buttonGradientBrush = QBrush(buttonHoverGradient);
+ p->fillRect(fillRect, qMapBrushToRect(buttonGradientBrush, rect));
+ } else p->fillRect(fillRect,
+ qMapBrushToRect(sunken ? sunkenButtonGradientBrush
+ : buttonGradientBrush, rect));
// Top line
p->setPen(QPen(qBrushLight(qMapBrushToRect(sunken ? sunkenButtonGradientBrush
@@ -1549,28 +1577,31 @@ void QPlastiqueStyle::drawPrimitive(Prim
// Hovering
if (hover && !sunken) {
QBrush hover = qMapBrushToRect(option->palette.highlight(), rect);
- QBrush hoverOuter = hover;
- qBrushSetAlphaF(&hoverOuter, 0.7);
-
+ qBrushSetAlphaF(&hover, 0.7);
p->setPen(QPen(hover, 0));
- p->drawLine(rect.left() + 2, rect.top(), rect.right() - 2, rect.top());
- p->drawLine(rect.left() + 2, rect.bottom(), rect.right() - 2, rect.bottom());
+ p->drawLine(rect.left() + 2, rect.top() + 1, rect.right() - 2, rect.top() + 1);
+ p->drawLine(rect.left() + 2, rect.bottom() - 1, rect.right() - 2, rect.bottom() - 1);
- p->setPen(QPen(hoverOuter, 0));
- p->drawLine(rect.left() + 1, rect.top() + 1, rect.right() - 1, rect.top() + 1);
- p->drawLine(rect.left() + 1, rect.bottom() - 1, rect.right() - 1, rect.bottom() - 1);
+ p->drawLine(rect.left() + 1, rect.top() + 2, rect.left() + 1, rect.bottom() - 2);
+ p->drawLine(rect.right() - 1, rect.top() + 2, rect.right() - 1, rect.bottom() - 2);
QBrush hoverInner = hover;
- qBrushSetAlphaF(&hoverInner, 0.45);
+ qBrushSetAlphaF(&hoverInner, 0.5);
p->setPen(QPen(hoverInner, 0));
- p->drawLine(rect.left() + 1, rect.top() + 2, rect.right() - 1, rect.top() + 2);
- p->drawLine(rect.left() + 1, rect.bottom() - 2, rect.right() - 1, rect.bottom() - 2);
+ p->drawLine(rect.left() + 2, rect.top() + 2, rect.right() - 2, rect.top() + 2);
+ p->drawLine(rect.left() + 2, rect.bottom() - 2, rect.right() - 2, rect.bottom() - 2);
- QBrush hoverSide = hover;
- qBrushSetAlphaF(&hoverSide, 0.075);
- p->setPen(QPen(hoverSide, 0));
- p->drawLine(rect.left() + 1, rect.top() + 2, rect.left() + 1, rect.bottom() - 2);
- p->drawLine(rect.right() - 1, rect.top() + 2, rect.right() - 1, rect.bottom() - 2);
+ p->drawLine(rect.left() + 2, rect.top() + 2, rect.left() + 2, rect.bottom() - 2);
+ p->drawLine(rect.right() - 2, rect.top() + 2, rect.right() - 2, rect.bottom() - 2);
+
+ QBrush hoverInnerst = hover;
+ qBrushSetAlphaF(&hoverInnerst, 0.35);
+ p->setPen(QPen(hoverInnerst, 0));
+ p->drawLine(rect.left() + 3, rect.top() + 3, rect.right() - 3, rect.top() + 3);
+ p->drawLine(rect.left() + 3, rect.bottom() - 3, rect.right() - 3, rect.bottom() - 3);
+
+ p->drawLine(rect.left() + 3, rect.top() + 3, rect.left() + 3, rect.bottom() - 3);
+ p->drawLine(rect.right() - 3, rect.top() + 3, rect.right() - 3, rect.bottom() - 3);
}
p->setPen(oldPen);
["qprogress.png" (image/png)]
_______________________________________________
PyKDE mailing list PyKDE@mats.imk.fraunhofer.de
http://mats.imk.fraunhofer.de/mailman/listinfo/pykde
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic