Newer
Older
/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
* Qwt Widget Library
* Copyright (C) 1997 Josef Wilgen
* Copyright (C) 2002 Uwe Rathmann
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the Qwt License, Version 1.0
*****************************************************************************/
#include "qwt_picker.h"
#include "qwt_picker_machine.h"
#include "qwt_painter.h"
#include "qwt_math.h"
#include "qwt_widget_overlay.h"
#include <qapplication.h>
#include <qevent.h>
#include <qpainter.h>
#include <qframe.h>
#include <qcursor.h>
#include <qbitmap.h>
#include <qpointer.h>
#include <qpaintengine.h>
static inline QRegion qwtMaskRegion( const QRect &r, int penWidth )
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
const int pw = qMax( penWidth, 1 );
const int pw2 = penWidth / 2;
int x1 = r.left() - pw2;
int x2 = r.right() + 1 + pw2 + ( pw % 2 );
int y1 = r.top() - pw2;
int y2 = r.bottom() + 1 + pw2 + ( pw % 2 );
QRegion region;
region += QRect( x1, y1, x2 - x1, pw );
region += QRect( x1, y1, pw, y2 - y1 );
region += QRect( x1, y2 - pw, x2 - x1, pw );
region += QRect( x2 - pw, y1, pw, y2 - y1 );
return region;
}
static inline QRegion qwtMaskRegion( const QLine &l, int penWidth )
{
const int pw = qMax( penWidth, 1 );
const int pw2 = penWidth / 2;
QRegion region;
if ( l.x1() == l.x2() )
{
region += QRect( l.x1() - pw2, l.y1(),
pw, l.y2() ).normalized();
}
else if ( l.y1() == l.y2() )
{
region += QRect( l.x1(), l.y1() - pw2,
l.x2(), pw ).normalized();
}
class QwtPickerRubberband: public QwtWidgetOverlay
{
public:
QwtPickerRubberband( QwtPicker *, QWidget * );
virtual void drawOverlay( QPainter * ) const;
virtual QRegion maskHint() const;
class QwtPickerTracker: public QwtWidgetOverlay
{
public:
QwtPickerTracker( QwtPicker *, QWidget * );
protected:
virtual void drawOverlay( QPainter * ) const;
virtual QRegion maskHint() const;
QwtPicker *d_picker;
};
PrivateData():
enabled( false ),
stateMachine( NULL ),
resizeMode( QwtPicker::Stretch ),
rubberBand( QwtPicker::NoRubberBand ),
trackerMode( QwtPicker::AlwaysOff ),
isActive( false ),
trackerPosition( -1, -1 ),
mouseTracking( false ),
openGL( false )
{
}
bool enabled;
QwtPickerMachine *stateMachine;
QwtPicker::ResizeMode resizeMode;
QwtPicker::RubberBand rubberBand;
QPen rubberBandPen;
QwtPicker::DisplayMode trackerMode;
QPen trackerPen;
QFont trackerFont;
bool isActive;
QPoint trackerPosition;
bool mouseTracking; // used to save previous value
QPointer< QwtPickerRubberband > rubberBandOverlay;
QPointer< QwtPickerTracker> trackerOverlay;
bool openGL;
QwtPickerRubberband::QwtPickerRubberband(
QwtPicker *picker, QWidget *parent ):
QwtWidgetOverlay( parent ),
d_picker( picker )
void QwtPickerRubberband::drawOverlay( QPainter *painter ) const
{
painter->setPen( d_picker->rubberBandPen() );
d_picker->drawRubberBand( painter );
QwtPickerTracker::QwtPickerTracker(
QwtPicker *picker, QWidget *parent ):
QwtWidgetOverlay( parent ),
d_picker( picker )
QRegion QwtPickerTracker::maskHint() const
{
return d_picker->trackerRect( font() );
}
void QwtPickerTracker::drawOverlay( QPainter *painter ) const
{
painter->setPen( d_picker->trackerPen() );
d_picker->drawTracker( painter );
Creates an picker that is enabled, but without a state machine.
rubber band and tracker are disabled.
QwtPicker::QwtPicker( QWidget *parent ):
QObject( parent )
\param trackerMode Tracker mode
\param parent Parent widget, that will be observed
*/
QwtPicker::QwtPicker( RubberBand rubberBand,
DisplayMode trackerMode, QWidget *parent ):
QObject( parent )
Loading
Loading full blame...