[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