author | sandman <sandman> | 2002-11-01 18:13:18 (UTC) |
---|---|---|
committer | sandman <sandman> | 2002-11-01 18:13:18 (UTC) |
commit | 2259e3ab9f2e06a4ee4dbd633c17221a47fdb7ba (patch) (side-by-side diff) | |
tree | f3e6bb8ee6c0d8f2671a63c240d1145e710da82d /core/settings/light-and-power/calibration.cpp | |
parent | 7b7b760ca3886d5b6562a88b5c2ef8e610b73eb8 (diff) | |
download | opie-2259e3ab9f2e06a4ee4dbd633c17221a47fdb7ba.zip opie-2259e3ab9f2e06a4ee4dbd633c17221a47fdb7ba.tar.gz opie-2259e3ab9f2e06a4ee4dbd633c17221a47fdb7ba.tar.bz2 |
- Completly reworked the backlight "preview":
every slider/control that relates to backlight levels, is now switching the
lcd to this level for 2 seconds - after that the backlight switches back to
the standard level (or light sensor control)
- Many bugfixes and usability improvements in light sensor calibration
Diffstat (limited to 'core/settings/light-and-power/calibration.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | core/settings/light-and-power/calibration.cpp | 109 |
1 files changed, 89 insertions, 20 deletions
diff --git a/core/settings/light-and-power/calibration.cpp b/core/settings/light-and-power/calibration.cpp index 6a3360f..aed2bc8 100644 --- a/core/settings/light-and-power/calibration.cpp +++ b/core/settings/light-and-power/calibration.cpp @@ -29,12 +29,15 @@ #include <qpainter.h> #include <qpalette.h> +#include <qpixmap.h> -#define BRD 2 +#define BRD 3 Calibration::Calibration ( QWidget *parent, const char *name, WFlags fl ) - : QWidget ( parent, name, fl ) + : QWidget ( parent, name, fl | WRepaintNoErase ) { + setBackgroundMode ( NoBackground ); + m_scale = QSize ( 256, 256 ); m_steps = 5; m_dragged = -1; @@ -121,20 +124,28 @@ void Calibration::checkPoints ( ) int dx = m_scale. width ( ); int dy = m_scale. height ( ); + if ( m_p [1]. x ( ) < 0 ) + m_p [1]. setX ( 0 ); if ( m_p [1]. x ( ) >= dx ) m_p [1]. setX ( dx - 1 ); + if ( m_p [0]. x ( ) < 0 ) + m_p [0]. setX ( 0 ); if ( m_p [0]. x ( ) > m_p [1]. x ( )) m_p [0]. setX ( m_p [1]. x ( )); + if ( m_p [1]. y ( ) < 0 ) + m_p [1]. setY ( 0 ); if ( m_p [1]. y ( ) >= dy ) m_p [1]. setY ( dy - 1 ); + if ( m_p [0]. y ( ) < 0 ) + m_p [0]. setY ( 0 ); if ( m_p [0]. y ( ) > m_p [1]. y ( )) m_p [0]. setY ( m_p [1]. y ( )); } -#define SCALEX(x) (BRD+x*(width()- 2*BRD)/m_scale.width()) -#define SCALEY(y) (BRD+y*(height()-2*BRD)/m_scale.height()) +#define SCALEX(x) (BRD+(x)*(width()- 2*BRD)/m_scale.width()) +#define SCALEY(y) (BRD+(y)*(height()-2*BRD)/m_scale.height()) static QRect around ( int x, int y ) @@ -155,8 +166,8 @@ void Calibration::mousePressEvent ( QMouseEvent *e ) x [i] = SCALEX( m_p [i]. x ( )); y [i] = SCALEY( m_p [i]. y ( )); - if (( QABS( e-> x ( ) - x [i] ) <= BRD ) && - ( QABS( e-> y ( ) - y [i] ) <= BRD )) { + if (( QABS( e-> x ( ) - x [i] ) <= 2 * BRD ) && + ( QABS( e-> y ( ) - y [i] ) <= 2 * BRD )) { m_dragged = i; break; } @@ -169,7 +180,7 @@ void Calibration::mousePressEvent ( QMouseEvent *e ) r |= around ( x [olddragged], y [olddragged] ); if ( m_dragged >= 0 ) r |= around ( x [m_dragged], y [m_dragged] ); - repaint ( r ); + repaint ( r, false ); } } @@ -184,10 +195,18 @@ void Calibration::mouseMoveEvent ( QMouseEvent *e ) n [m_dragged]. setY (( e-> y ( ) - BRD ) * m_scale. height ( ) / ( height ( ) - 2 * BRD )); n [1 - m_dragged] = m_p [1 - m_dragged]; - if (( n [0]. x ( ) > n [1]. x ( )) || ( n [m_dragged]. x ( ) < 0 ) || ( n [m_dragged]. x ( ) >= m_scale. width ( ))) - n [m_dragged]. setX ( m_p [m_dragged]. x ( )); - if (( n [0]. y ( ) > n [1]. y ( )) || ( n [m_dragged]. y ( ) < 0 ) || ( n [m_dragged]. y ( ) >= m_scale. height ( ))) - n [m_dragged]. setY ( m_p [m_dragged]. y ( )); + if ( n [m_dragged]. x ( ) < 0 ) + n [m_dragged]. setX ( 0 ); + if ( n [m_dragged]. x ( ) >= m_scale. width ( )) + n [m_dragged]. setX ( m_scale. width ( ) - 1 ); + if ( n [0]. x ( ) > n [1]. x ( )) + n [m_dragged]. setX ( n [1 - m_dragged]. x ( )); + if ( n [m_dragged]. y ( ) < 0 ) + n [m_dragged]. setY ( 0 ); + if ( n [m_dragged]. y ( ) >= m_scale. height ( )) + n [m_dragged]. setY ( m_scale. height ( ) - 1 ); + if ( n [0]. y ( ) > n [1]. y ( )) + n [m_dragged]. setY ( n [1 - m_dragged]. y ( )); QRect r; int ox [2], oy [2], nx [2], ny [2]; @@ -206,10 +225,14 @@ void Calibration::mouseMoveEvent ( QMouseEvent *e ) if ( i == 0 ) { r |= QRect ( 0, ny [0], nx [0] - 0 + 1, 1 ); r |= QRect ( 0, oy [0], ox [0] - 0 + 1, 1 ); + + emit startPointChanged ( startPoint ( )); } else if ( i == 1 ) { r |= QRect ( nx [1], ny [1], width ( ) - nx [1], 1 ); r |= QRect ( ox [1], oy [1], width ( ) - ox [1], 1 ); + + emit endPointChanged ( endPoint ( )); } } } @@ -217,7 +240,7 @@ void Calibration::mouseMoveEvent ( QMouseEvent *e ) r |= QRect ( nx [0], ny [0], nx [1] - nx [0] + 1, ny [1] - ny [0] + 1 ); r |= QRect ( ox [0], oy [0], ox [1] - ox [0] + 1, oy [1] - oy [0] + 1 ); - repaint ( r ); + repaint ( r, false ); } } @@ -233,13 +256,14 @@ void Calibration::mouseReleaseEvent ( QMouseEvent *e ) int y = SCALEY( m_p [m_dragged]. y ( )); m_dragged = -1; - repaint ( around ( x, y )); + repaint ( around ( x, y ), false ); } -void Calibration::paintEvent ( QPaintEvent * ) +void Calibration::paintEvent ( QPaintEvent *pe ) { - QPainter p ( this ); - QColorGroup g = colorGroup ( ); + QPixmap pix ( size ( )); + QPainter p ( &pix, this ); + QRect cr = pe-> rect ( ); int x0 = SCALEX( m_p [0]. x ( )); int y0 = SCALEY( m_p [0]. y ( )); @@ -249,15 +273,48 @@ void Calibration::paintEvent ( QPaintEvent * ) int dx = x1 - x0; int dy = y1 - y0; + // restrict steps to real x and y resolution + int st = QMIN( QMIN( m_steps, ( dx + 1 )), ( dy + 1 )); + + QString stepstr = tr( "%1 Steps" ). arg ( st ); + QRect tr = p. boundingRect ( BRD, BRD, width ( ) - 2*BRD, height() - 2*BRD, AlignTop | AlignRight, stepstr ); + tr. setLeft ( tr. left ( ) - 20 ); + if ( p. hasClipping ( )) + p. setClipRegion ( p. clipRegion ( ) | QRegion ( tr )); + + QColorGroup g = colorGroup ( ); + + p. fillRect ( cr, g. base ( )); + p. fillRect ( tr, g. base ( )); + int ex = x0, ey = y0; + p. setPen ( g. mid ( )); + + int gx0 = SCALEX( 0 ); + int gy0 = SCALEY( 0 ); + int gx1 = SCALEX( m_scale. width ( ) - 1 ); + int gy1 = SCALEY( m_scale. height ( ) - 1 ); + + int xdiv = QMIN( 4, m_scale. width ( )); + int ydiv = QMIN( 4, m_scale. height ( )); + + xdiv = ( gx1 - gx0 + 1 ) / xdiv; + ydiv = ( gy1 - gy0 + 1 ) / ydiv; + + for ( int i = gx0 + xdiv; i <= ( gx1 - xdiv ); i += xdiv ) + p. drawLine ( i, gy0, i, gy1 ); + + for ( int i = gy0 + ydiv; i <= ( gy1 - ydiv ); i += ydiv ) + p. drawLine ( gx0, i, gx1, i ); + p. setPen ( g. highlight ( )); p. drawLine ( BRD, ey, ex, ey ); - for ( int i = 1; i < m_steps; i++ ) { - int fx = x0 + dx * i / m_steps; - int fy = y0 + dy * i / ( m_steps - 1 ); + for ( int i = 1; i < st; i++ ) { + int fx = x0 + dx * i / st; + int fy = y0 + dy * i / ( st - 1 ); p. drawLine ( ex, ey, fx, ey ); p. drawLine ( fx, ey, fx, fy ); @@ -265,13 +322,25 @@ void Calibration::paintEvent ( QPaintEvent * ) ex = fx; ey = fy; } + if ( st == 1 ) { + p. drawLine ( ex, ey, ex, y1 ); + ey = y1; + } p. drawLine ( ex, ey, width ( ) - 1 - BRD, ey ); + p. fillRect ( around ( x0, y0 ), m_dragged == 0 ? g. highlightedText ( ) : g. text ( )); + p. drawRect ( around ( x0, y0 )); p. fillRect ( around ( x1, y1 ), m_dragged == 1 ? g. highlightedText ( ) : g. text ( )); + p. drawRect ( around ( x1, y1 )); p. setPen ( g. text ( )); - p. drawText ( QRect ( BRD, BRD, width ( ) - 2*BRD, height() - 2*BRD ), AlignTop | AlignRight, tr( "%1 Steps" ). arg ( m_steps )); + p. drawText ( tr, AlignTop | AlignRight, stepstr ); + + p. end ( ); + bitBlt ( this, cr. topLeft ( ), &pix, cr ); + if ( !cr. contains ( tr )) + bitBlt ( this, tr. topLeft ( ), &pix, tr ); } |