Qwt User's Guide 6.3.0
Loading...
Searching...
No Matches
qwt_pixel_matrix.h
1/******************************************************************************
2 * Qwt Widget Library
3 * Copyright (C) 1997 Josef Wilgen
4 * Copyright (C) 2002 Uwe Rathmann
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the Qwt License, Version 1.0
8 *****************************************************************************/
9
10#ifndef QWT_PIXEL_MATRIX_H
11#define QWT_PIXEL_MATRIX_H
12
13#include "qwt_global.h"
14
15#include <qbitarray.h>
16#include <qrect.h>
17
24class QWT_EXPORT QwtPixelMatrix : public QBitArray
25{
26 public:
27 explicit QwtPixelMatrix( const QRect& rect );
29
30 void setRect( const QRect& rect );
31 QRect rect() const;
32
33 bool testPixel( int x, int y ) const;
34 bool testAndSetPixel( int x, int y, bool on );
35
36 int index( int x, int y ) const;
37
38 private:
39 QRect m_rect;
40};
41
51inline bool QwtPixelMatrix::testPixel( int x, int y ) const
52{
53 const int idx = index( x, y );
54 return ( idx >= 0 ) ? testBit( idx ) : true;
55}
56
67inline bool QwtPixelMatrix::testAndSetPixel( int x, int y, bool on )
68{
69 const int idx = index( x, y );
70 if ( idx < 0 )
71 return true;
72
73 const bool onBefore = testBit( idx );
74 setBit( idx, on );
75
76 return onBefore;
77}
78
86inline int QwtPixelMatrix::index( int x, int y ) const
87{
88 const int dx = x - m_rect.x();
89 if ( dx < 0 || dx >= m_rect.width() )
90 return -1;
91
92 const int dy = y - m_rect.y();
93 if ( dy < 0 || dy >= m_rect.height() )
94 return -1;
95
96 return dy * m_rect.width() + dx;
97}
98
99#endif
A bit field corresponding to the pixels of a rectangle.
bool testPixel(int x, int y) const
Test if a pixel has been set.
bool testAndSetPixel(int x, int y, bool on)
Set a pixel and test if a pixel has been set before.