1 /***************************************************************************
2 * Copyright (C) 2007 by Jean-Baptiste Mardelle (jb@kdenlive.org) *
4 * This program is free software; you can redistribute it and/or modify *
5 * it under the terms of the GNU General Public License as published by *
6 * the Free Software Foundation; either version 2 of the License, or *
7 * (at your option) any later version. *
9 * This program is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU General Public License for more details. *
14 * You should have received a copy of the GNU General Public License *
15 * along with this program; if not, write to the *
16 * Free Software Foundation, Inc., *
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
18 ***************************************************************************/
21 #include <QMouseEvent>
22 #include <QStylePainter>
26 #define LITTLE_MARK_X2 8
27 #define LITTLE_MARK_X1 5
28 #define MIDDLE_MARK_X1 3
29 #define MIDDLE_MARK_X2 8
33 #include "smallruler.h"
36 SmallRuler::SmallRuler(QWidget *parent)
39 setShowBigMarks(false);
40 setShowTinyMarks(false);
42 setRulerMetricStyle(KRuler::Custom);
46 void SmallRuler::setPixelPerMark(double rate) {
47 kDebug() << " RULER SET RATE: " << rate;
49 setLittleMarkDistance(25);
50 setMediumMarkDistance(5 * 25);
51 } else if (rate > 0.09) {
52 setLittleMarkDistance(5 * 25);
53 setMediumMarkDistance(30 * 25);
55 setLittleMarkDistance(30 * 25);
56 setMediumMarkDistance(60 * 25);
59 KRuler::setPixelPerMark(rate);
63 void SmallRuler::mousePressEvent(QMouseEvent * event) {
65 //slotNewValue( pos );
66 emit seekRenderer(pos);
71 void SmallRuler::mouseMoveEvent(QMouseEvent * event) {
73 //slotNewValue( pos );
74 emit seekRenderer(pos);
78 void SmallRuler::slotNewValue(int _value) {
79 m_cursorPosition = (int)(_value / pixelPerMark());
80 KRuler::slotNewValue(_value);
84 void SmallRuler::paintEvent(QPaintEvent *e) {
85 // debug ("KRuler::drawContents, %s",(horizontal==dir)?"horizontal":"vertical");
87 QStylePainter p(this);
88 p.fillRect(e->rect(), QBrush(QColor(Qt::white)));
91 int value = this->value(),
95 + offset() - endOffset();
97 //ioffsetval = value-offset;
98 // pixelpm = (int)ppm;
99 // left = clip.left(),
100 // right = clip.right();
102 offsetmin = (double)(minval - offset()),
103 offsetmax = (double)(maxval - offset()),
104 fontOffset = (((double)minval) > offsetmin) ? (double)minval : offsetmin;
107 QFont font = p.font();
108 font.setPointSize(LABEL_SIZE);
111 if (showLittleMarks()) {
112 // draw the little marks
113 fend = pixelPerMark() * littleMarkDistance();
114 if (fend > 2) for (f = offsetmin; f < offsetmax; f += fend) {
115 p.drawLine((int)f, LITTLE_MARK_X1, (int)f, LITTLE_MARK_X2);
118 if (showMediumMarks()) {
120 fend = pixelPerMark() * mediumMarkDistance();
121 if (fend > 2) for (f = offsetmin; f < offsetmax; f += fend) {
122 p.drawLine((int)f, MIDDLE_MARK_X1, (int)f, MIDDLE_MARK_X2);
128 if (d->dir == Qt::Horizontal) {
129 p.drawLine(minval-d->offset, END_MARK_X1, minval-d->offset, END_MARK_X2);
130 p.drawLine(maxval-d->offset, END_MARK_X1, maxval-d->offset, END_MARK_X2);
133 p.drawLine(END_MARK_X1, minval-d->offset, END_MARK_X2, minval-d->offset);
134 p.drawLine(END_MARK_X1, maxval-d->offset, END_MARK_X2, maxval-d->offset);
141 pa.setPoints(3, value - 6, 0, value + 6, 0, value/*+0*/, 8);
142 p.setBrush(QBrush(Qt::yellow));
148 #include "smallruler.moc"