[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/workspace/libs/plasma/widgets
From:       Marco Martin <notmart () gmail ! com>
Date:       2008-09-04 16:20:50
Message-ID: 1220545250.239567.28576.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 857080 by mart:

draw the slider with plasma theme svgs


 M  +64 -2     slider.cpp  
 M  +3 -0      slider.h  


--- trunk/KDE/kdebase/workspace/libs/plasma/widgets/slider.cpp \
#857079:857080 @@ -21,11 +21,12 @@
 
 #include <QSlider>
 #include <QPainter>
+#include <QStyleOptionSlider>
 
 #include <KMimeType>
 
 #include "theme.h"
-#include "svg.h"
+#include "panelsvg.h"
 
 namespace Plasma
 {
@@ -40,12 +41,15 @@
     ~SliderPrivate()
     {
     }
+
+    Plasma::PanelSvg *background;
+    Plasma::PanelSvg *handle;
 };
 
 
 Slider::Slider(QGraphicsWidget *parent)
     : QGraphicsProxyWidget(parent),
-      d(0)
+      d(new SliderPrivate)
 {
     QSlider *native = new QSlider;
 
@@ -54,6 +58,14 @@
 
     setWidget(native);
     native->setAttribute(Qt::WA_NoSystemBackground);
+
+    d->background = new Plasma::PanelSvg(this);
+    d->background->setImagePath("widgets/frame");
+    d->background->setElementPrefix("sunken");
+
+    d->handle = new Plasma::PanelSvg(this);
+    d->handle->setImagePath("widgets/button");
+    d->handle->setElementPrefix("normal");
 }
 
 Slider::~Slider()
@@ -61,6 +73,55 @@
     delete d;
 }
 
+void Slider::paint(QPainter *painter,
+                       const QStyleOptionGraphicsItem *option,
+                       QWidget *widget)
+{
+    if (!styleSheet().isNull()) {
+        QGraphicsProxyWidget::paint(painter, option, widget);
+        return;
+    }
+
+    QSlider *slider = nativeWidget();
+    QStyle *style = slider->style();
+    QStyleOptionSlider sliderOpt;
+    sliderOpt.initFrom(slider);
+
+    //init the other stuff in the slider, taken from initStyleOption()
+    sliderOpt.subControls = QStyle::SC_None;
+    sliderOpt.activeSubControls = QStyle::SC_None;
+    sliderOpt.orientation = slider->orientation();
+    sliderOpt.maximum = slider->maximum();
+    sliderOpt.minimum = slider->minimum();
+    sliderOpt.tickPosition = \
(QSlider::TickPosition)slider->tickPosition(); +    sliderOpt.tickInterval \
= slider->tickInterval(); +    sliderOpt.upsideDown = \
(slider->orientation() == Qt::Horizontal) ? +                     \
(slider->invertedAppearance() != (sliderOpt.direction == Qt::RightToLeft)) \
+                     : (!slider->invertedAppearance()); +    \
sliderOpt.direction = Qt::LeftToRight; // we use the upsideDown option \
instead +    sliderOpt.sliderPosition = slider->sliderPosition();
+    sliderOpt.sliderValue = slider->value();
+    sliderOpt.singleStep = slider->singleStep();
+    sliderOpt.pageStep = slider->pageStep();
+    if (slider->orientation() == Qt::Horizontal)
+        sliderOpt.state |= QStyle::State_Horizontal;
+
+    QRect backgroundRect = style->subControlRect(QStyle::CC_Slider, \
&sliderOpt, QStyle::SC_SliderGroove, slider); +    \
d->background->resizePanel(backgroundRect.size()); +    \
d->background->paintPanel(painter, backgroundRect.topLeft()); +
+    //Thickmarks
+    if (sliderOpt.tickPosition != QSlider::NoTicks) {
+        sliderOpt.subControls = QStyle::SC_SliderTickmarks;
+        sliderOpt.palette.setColor(QPalette::WindowText, \
Plasma::Theme::defaultTheme()->color(Theme::TextColor)); +        \
style->drawComplexControl(QStyle::CC_Slider, &sliderOpt, painter, slider); \
+    } +
+    QRect handleRect = style->subControlRect(QStyle::CC_Slider, \
&sliderOpt, QStyle::SC_SliderHandle, slider); +    \
d->handle->resizePanel(handleRect.size()); +    \
d->handle->paintPanel(painter, handleRect.topLeft()); +}
+
 void Slider::setMaximum(int max)
 {
     static_cast<QSlider*>(widget())->setMaximum(max);
@@ -121,6 +182,7 @@
     return static_cast<QSlider*>(widget());
 }
 
+
 } // namespace Plasma
 
 #include <slider.moc>
--- trunk/KDE/kdebase/workspace/libs/plasma/widgets/slider.h #857079:857080
@@ -90,6 +90,9 @@
      */
     QSlider* nativeWidget() const;
 
+protected:
+    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, \
QWidget *widget); +
 public Q_SLOTS:
     /**
      * Sets the maximum value the slider can take.


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic