Example #1
0
void PaintedSlider::paintEvent(WPaintDevice *paintDevice)
{
  if (slider_->tickPosition()) {
    WPainter painter(paintDevice);

    int w, h;

    if (slider_->orientation() == Horizontal) {
      w = (int)width().toPixels();
      h = (int)height().toPixels();
    } else {
      w = (int)height().toPixels();
      h = (int)width().toPixels();

      painter.translate(0, w);
      painter.rotate(-90);
    }

    int tickInterval = slider_->tickInterval();
    int r = range();

    if (tickInterval == 0)
      tickInterval = r / 2;

    double tickStep = ((double)w - (HANDLE_WIDTH - 10)) / (r / tickInterval);

    if (tickStep <= 0)
      return;

    WPen pen;
    pen.setColor(WColor(0xd7, 0xd7, 0xd7));
    pen.setCapStyle(FlatCap);
    pen.setWidth(1);
    painter.setPen(pen);

    int y1 = h / 4;
    int y2 = h / 2 - 4;
    int y3 = h / 2 + 4;
    int y4 = h - h/4;

    for (unsigned i = 0; ; ++i) {
      int x = (HANDLE_WIDTH - 10)/2 + (int) (i * tickStep);

      if (x > w - (HANDLE_WIDTH - 10)/2)
	break;

      if (slider_->tickPosition() & WSlider::TicksAbove)
	painter.drawLine(x + 0.5, y1, x + 0.5, y2);
      if (slider_->tickPosition() & WSlider::TicksBelow)
	painter.drawLine(x + 0.5, y3, x + 0.5, y4);
    }
  }
}