| 54 | } |
| 55 | |
| 56 | void MultiGradientSelector::paintEvent(QPaintEvent * /* e */) |
| 57 | { |
| 58 | static QPixmap pixmap = QPixmap(size()); |
| 59 | pixmap.fill(palette().window().color()); |
| 60 | |
| 61 | //calculate gradient area width |
| 62 | if (gradient_area_width_ == 0) |
| 63 | { |
| 64 | gradient_area_width_ = width() - 2 * margin_ - 2; |
| 65 | } |
| 66 | |
| 67 | QPainter painter(&pixmap); |
| 68 | |
| 69 | //gradient field outline |
| 70 | painter.setPen(QColor(0, 0, 0)); |
| 71 | painter.drawRect(margin_, margin_, width() - 2 * margin_, height() - 2 * margin_ - lever_area_height_); |
| 72 | |
| 73 | //draw gradient |
| 74 | for (Int i = 0; i <= gradient_area_width_; ++i) |
| 75 | { |
| 76 | painter.setPen(gradient_.interpolatedColorAt(i, 0, gradient_area_width_)); |
| 77 | painter.drawLine(margin_ + 1 + i, margin_ + 1, margin_ + 1 + i, height() - margin_ - lever_area_height_ - 1); |
| 78 | } |
| 79 | |
| 80 | //levers |
| 81 | painter.setPen(QColor(0, 0, 0)); |
| 82 | for (UInt i = 0; i < (UInt)gradient_.size(); ++i) |
| 83 | { |
| 84 | Int pos = Int(float(gradient_.position(i)) / 100.0 * gradient_area_width_ + margin_ + 1); |
| 85 | painter.drawRect(pos - 4, height() - margin_ - lever_area_height_ + 5, 9, 9); |
| 86 | painter.drawLine(pos - 4, height() - margin_ - lever_area_height_ + 5, pos, height() - margin_ - lever_area_height_); |
| 87 | painter.drawLine(pos, height() - margin_ - lever_area_height_, pos + 4, height() - margin_ - lever_area_height_ + 5); |
| 88 | painter.fillRect(pos - 3, height() - margin_ - lever_area_height_ + 6, 8, 8, gradient_.color(i)); |
| 89 | |
| 90 | //selected lever |
| 91 | if (Int(gradient_.position(i)) == selected_) |
| 92 | { |
| 93 | painter.fillRect(pos - 2, height() - margin_ - lever_area_height_ + 3, 6, 3, QColor(0, 0, 0)); |
| 94 | painter.fillRect(pos - 1, height() - margin_ - lever_area_height_ + 1, 4, 3, QColor(0, 0, 0)); |
| 95 | } |
| 96 | } |
| 97 | |
| 98 | QPainter painter2(this); |
| 99 | painter2.drawPixmap(0, 0, pixmap); |
| 100 | } |
| 101 | |
| 102 | void MultiGradientSelector::mousePressEvent(QMouseEvent * e) |
| 103 | { |