]> git.sesse.net Git - kdenlive/blob - src/smallruler.cpp
Progress in clip monitor and project switching
[kdenlive] / src / smallruler.cpp
1
2 #include <QMouseEvent>
3 #include <QStylePainter>
4
5 #include <KDebug>
6
7 #define LITTLE_MARK_X2 15
8 #define LITTLE_MARK_X1 13
9 #define MIDDLE_MARK_X1 9
10 #define MIDDLE_MARK_X2 15
11
12 #define LABEL_SIZE 8
13
14 #include "smallruler.h"
15
16
17 SmallRuler::SmallRuler(QWidget *parent)
18     : KRuler(parent)
19 {
20   setShowPointer(true);
21   setShowBigMarks(false);
22   setShowTinyMarks(false);
23   slotNewOffset(0);
24   setRulerMetricStyle(KRuler::Custom);
25   setLengthFixed(true);
26 }
27
28 void SmallRuler::setPixelPerMark ( double rate )
29 {
30   kDebug()<<" RULER SET RATE: "<<rate;
31   if (rate > 0.5) {
32     setLittleMarkDistance(25);
33     setMediumMarkDistance(5 * 25);
34   }
35   else if (rate > 0.09) {
36     setLittleMarkDistance(5 * 25);
37     setMediumMarkDistance(30 * 25);
38   }
39   else {
40     setLittleMarkDistance(30 * 25);
41     setMediumMarkDistance(60 * 25);
42   }
43   
44   KRuler::setPixelPerMark( rate );
45 }
46
47 // virtual 
48 void SmallRuler::mousePressEvent ( QMouseEvent * event )
49 {
50   int pos = event->x();
51   //slotNewValue( pos );
52   emit seekRenderer(pos);
53   kDebug()<<pos;
54 }
55
56 void SmallRuler::slotNewValue ( int _value )
57 {
58   m_cursorPosition = _value / pixelPerMark();
59   KRuler::slotNewValue(_value);
60 }
61
62 // virtual
63 void SmallRuler::paintEvent(QPaintEvent * /*e*/)
64  {
65    //  debug ("KRuler::drawContents, %s",(horizontal==dir)?"horizontal":"vertical");
66  
67    QStylePainter p(this);
68
69  
70    int value  = this->value(),
71      minval = minimum(),
72      maxval;
73      maxval = maximum()
74      + offset() - endOffset();
75
76      //ioffsetval = value-offset;
77      //    pixelpm = (int)ppm;
78    //    left  = clip.left(),
79    //    right = clip.right();
80    double f, fend,
81      offsetmin=(double)(minval-offset()),
82      offsetmax=(double)(maxval-offset()),
83      fontOffset = (((double)minval)>offsetmin)?(double)minval:offsetmin;
84  
85    // draw labels
86    QFont font = p.font();
87    font.setPointSize(LABEL_SIZE);
88    p.setFont( font );
89
90    if (showLittleMarks()) {
91      // draw the little marks
92      fend = pixelPerMark()*littleMarkDistance();
93      if (fend > 2) for ( f=offsetmin; f<offsetmax; f+=fend ) {
94          p.drawLine((int)f, LITTLE_MARK_X1, (int)f, LITTLE_MARK_X2);
95      }
96    }
97    if (showMediumMarks()) {
98      // draw medium marks
99      fend = pixelPerMark()*mediumMarkDistance();
100      if (fend > 2) for ( f=offsetmin; f<offsetmax; f+=fend ) {
101          p.drawLine((int)f, MIDDLE_MARK_X1, (int)f, MIDDLE_MARK_X2);
102      }
103    }
104
105 /*   if (d->showem) {
106      // draw end marks
107      if (d->dir == Qt::Horizontal) {
108        p.drawLine(minval-d->offset, END_MARK_X1, minval-d->offset, END_MARK_X2);
109        p.drawLine(maxval-d->offset, END_MARK_X1, maxval-d->offset, END_MARK_X2);
110      }
111      else {
112        p.drawLine(END_MARK_X1, minval-d->offset, END_MARK_X2, minval-d->offset);
113        p.drawLine(END_MARK_X1, maxval-d->offset, END_MARK_X2, maxval-d->offset);
114      }
115    }*/
116  
117    // draw pointer
118    if (showPointer()) {
119      QPolygon pa(4);
120        pa.setPoints(3, value-6, 9, value+6, 9, value/*+0*/, 16);
121      p.setBrush( QBrush(Qt::yellow) );
122      p.drawPolygon( pa );
123    }
124  
125  }
126
127 #include "smallruler.moc"