-rw-r--r-- | noncore/tools/clock/analogclock.cpp | 98 | ||||
-rw-r--r-- | noncore/tools/clock/analogclock.h | 1 |
2 files changed, 47 insertions, 52 deletions
diff --git a/noncore/tools/clock/analogclock.cpp b/noncore/tools/clock/analogclock.cpp index c5f0155..7f8ca67 100644 --- a/noncore/tools/clock/analogclock.cpp +++ b/noncore/tools/clock/analogclock.cpp | |||
@@ -41,13 +41,6 @@ QSizePolicy AnalogClock::sizePolicy() const | |||
41 | 41 | ||
42 | void AnalogClock::drawContents( QPainter *p ) | 42 | void AnalogClock::drawContents( QPainter *p ) |
43 | { | 43 | { |
44 | #if !defined(NO_DEBUG) | ||
45 | static bool first = true; | ||
46 | if ( first ) { | ||
47 | //QTOPIA_PROFILE("first paint event"); | ||
48 | first = false; | ||
49 | } | ||
50 | #endif | ||
51 | 44 | ||
52 | QRect r = contentsRect(); | 45 | QRect r = contentsRect(); |
53 | 46 | ||
@@ -56,71 +49,73 @@ void AnalogClock::drawContents( QPainter *p ) | |||
56 | r.setHeight( r.width() ); | 49 | r.setHeight( r.width() ); |
57 | } | 50 | } |
58 | 51 | ||
59 | QPoint center( r.x() + r.width() / 2, r.y() + r.height() / 2 ); | ||
60 | |||
61 | const int w_tick = r.width()/300+1; | ||
62 | const int w_sec = r.width()/400+1; | ||
63 | const int w_hour = r.width()/80+1; | ||
64 | |||
65 | QPoint l1( r.x() + r.width() / 2, r.y() + 2 ); | 52 | QPoint l1( r.x() + r.width() / 2, r.y() + 2 ); |
66 | QPoint l2( r.x() + r.width() / 2, r.y() + 8 ); | 53 | QPoint l2( r.x() + r.width() / 2, r.y() + 8 ); |
54 | QPoint center( r.x() + r.width() / 2, r.y() + r.height() / 2 ); | ||
67 | 55 | ||
68 | QPoint h1( r.x() + r.width() / 2, r.y() + r.height() / 4 ); | 56 | QBrush bgBrush = colorGroup().brush( QColorGroup::Background ); |
69 | QPoint h2( r.x() + r.width() / 2, r.y() + r.height() / 2 ); | ||
70 | |||
71 | QPoint m1( r.x() + r.width() / 2, r.y() + r.height() / 9 ); | ||
72 | QPoint m2( r.x() + r.width() / 2, r.y() + r.height() / 2 ); | ||
73 | |||
74 | QPoint s1( r.x() + r.width() / 2, r.y() + 8 ); | ||
75 | QPoint s2( r.x() + r.width() / 2, r.y() + r.height() / 2 ); | ||
76 | 57 | ||
77 | QColor color( clear ? backgroundColor() : black ); | 58 | // if ( clear ){ |
78 | QTime time = clear ? prevTime : currTime; | 59 | p->fillRect ( r, bgBrush ); |
79 | 60 | ||
80 | if ( clear && prevTime.secsTo(currTime) > 1 ) { | ||
81 | p->eraseRect( rect() ); | ||
82 | return; | ||
83 | } | ||
84 | 61 | ||
85 | if ( !clear ) { | ||
86 | // draw ticks | 62 | // draw ticks |
87 | p->setPen( QPen( color, w_tick ) ); | 63 | p->setPen( QPen( colorGroup ( ). color ( QColorGroup::Text ), 1 ) ); |
88 | for ( int i = 0; i < 12; i++ ) | 64 | for ( int i = 0; i < 12; i++ ) |
89 | p->drawLine( rotate( center, l1, i * 30 ), rotate( center, l2, i * 30 ) ); | 65 | p->drawLine( rotate( center, l1, i * 30 ), rotate( center, l2, i * 30 ) ); |
66 | // }else { | ||
67 | // p->setBrush( bgBrush ); | ||
68 | // drawPointers ( p, r, colorGroup ( ). color ( QColorGroup::Background ), prevTime, &currTime ); | ||
69 | // } | ||
70 | |||
71 | QColor col = colorGroup().color( QColorGroup::Text ); | ||
72 | p->setBrush( col ); | ||
73 | drawPointers ( p, r, col, currTime ); | ||
74 | |||
75 | |||
76 | prevTime = currTime; | ||
90 | } | 77 | } |
91 | 78 | ||
92 | if ( !clear || prevTime.minute() != currTime.minute() || | 79 | void AnalogClock::drawPointers ( QPainter *p, const QRect &r, const QColor &c, const QTime &t, const QTime *t2 ) |
93 | prevTime.hour() != currTime.hour() ) { | 80 | { |
81 | QPoint center = r. center ( ); | ||
82 | |||
83 | |||
84 | QPoint h1( center. x ( ), r. y ( ) + r. height ( ) / 4 ); | ||
85 | QPoint h2( center. x ( ), center. y ( ) ); | ||
86 | |||
87 | QPoint m1( center. x ( ), r.y() + r.height() / 8 ); | ||
88 | QPoint m2( center. x ( ), center. y ( ) ); | ||
89 | |||
90 | QPoint s1( center. x ( ), r. y ( ) + 8 ); | ||
91 | QPoint s2( center. x ( ), center. y ( ) ); | ||
92 | |||
93 | |||
94 | if ( !t2 || ( t. minute ( ) != t2-> minute ( ) || t. hour ( ) != t2-> hour ( ))) { | ||
94 | // draw hour pointer | 95 | // draw hour pointer |
95 | h1 = rotate( center, h1, 30 * ( time.hour() % 12 ) + time.minute() / 2 ); | 96 | h1 = rotate( center, h1, 30 * ( t.hour() % 12 ) + t.minute() / 2 ); |
96 | h2 = rotate( center, h2, 30 * ( time.hour() % 12 ) + time.minute() / 2 ); | 97 | h2 = rotate( center, h2, 30 * ( t.hour() % 12 ) + t.minute() / 2 ); |
97 | p->setPen( color ); | 98 | p-> setPen ( QPen ( c, 3 )); |
98 | p->setBrush( color ); | ||
99 | drawHand( p, h1, h2 ); | 99 | drawHand( p, h1, h2 ); |
100 | } | 100 | } |
101 | 101 | ||
102 | if ( !clear || prevTime.minute() != currTime.minute() ) { | 102 | if ( !t2 || ( t. minute ( ) != t2-> minute ( ))) { |
103 | // draw minute pointer | 103 | // draw minute pointer |
104 | m1 = rotate( center, m1, time.minute() * 6 ); | 104 | m1 = rotate( center, m1, t.minute() * 6 ); |
105 | m2 = rotate( center, m2, time.minute() * 6 ); | 105 | m2 = rotate( center, m2, t.minute() * 6 ); |
106 | p->setPen( color ); | 106 | p-> setPen ( QPen ( c, 2 )); |
107 | p->setBrush( color ); | ||
108 | drawHand( p, m1, m2 ); | 107 | drawHand( p, m1, m2 ); |
109 | } | 108 | } |
110 | 109 | ||
110 | if ( !t2 || ( t. second ( ) != t2-> second ( ))) { | ||
111 | // draw second pointer | 111 | // draw second pointer |
112 | s1 = rotate( center, s1, time.second() * 6 ); | 112 | s1 = rotate( center, s1, t.second() * 6 ); |
113 | s2 = rotate( center, s2, time.second() * 6 ); | 113 | s2 = rotate( center, s2, t.second() * 6 ); |
114 | p->setPen( QPen( color, w_sec ) ); | 114 | p-> setPen ( QPen ( c, 1 )); |
115 | p->drawLine( s1, s2 ); | 115 | p->drawLine( s1, s2 ); |
116 | |||
117 | // cap | ||
118 | p->setBrush(color); | ||
119 | p->drawEllipse( center.x()-w_hour/2, center.y()-w_hour/2, w_hour, w_hour ); | ||
120 | |||
121 | if ( !clear ) | ||
122 | prevTime = currTime; | ||
123 | } | 116 | } |
117 | } | ||
118 | |||
124 | 119 | ||
125 | // Dijkstra's bisection algorithm to find the square root as an integer. | 120 | // Dijkstra's bisection algorithm to find the square root as an integer. |
126 | 121 | ||
@@ -186,10 +181,9 @@ void AnalogClock::drawHand( QPainter *p, QPoint p1, QPoint p2 ) | |||
186 | void AnalogClock::display( const QTime& t ) | 181 | void AnalogClock::display( const QTime& t ) |
187 | { | 182 | { |
188 | currTime = t; | 183 | currTime = t; |
189 | clear = true; | ||
190 | repaint( false ); | ||
191 | clear = false; | 184 | clear = false; |
192 | repaint( false ); | 185 | repaint( false ); |
186 | clear = true; | ||
193 | } | 187 | } |
194 | 188 | ||
195 | QPoint AnalogClock::rotate( QPoint c, QPoint p, int a ) | 189 | QPoint AnalogClock::rotate( QPoint c, QPoint p, int a ) |
diff --git a/noncore/tools/clock/analogclock.h b/noncore/tools/clock/analogclock.h index 3aa035e..5f30d68 100644 --- a/noncore/tools/clock/analogclock.h +++ b/noncore/tools/clock/analogclock.h | |||
@@ -36,6 +36,7 @@ public: | |||
36 | protected: | 36 | protected: |
37 | void drawContents( QPainter *p ); | 37 | void drawContents( QPainter *p ); |
38 | void drawHand( QPainter *p, QPoint, QPoint ); | 38 | void drawHand( QPainter *p, QPoint, QPoint ); |
39 | void drawPointers ( QPainter *p, const QRect &r, const QColor &c, const QTime &t, const QTime *t2 = 0); | ||
39 | 40 | ||
40 | private: | 41 | private: |
41 | QPoint rotate( QPoint center, QPoint p, int angle ); | 42 | QPoint rotate( QPoint center, QPoint p, int angle ); |