# HG changeset patch # User Hasan Yavuz Ă–ZDERYA # Date 2015-08-15 15:24:42 # Node ID 2e6f48de66b4d3a18cabfd202a0a620645d9d4c2 # Parent 86a3be168e9388c9dc51108b6258878293e2043c cache bounding rectangle diff --git a/framebuffer.cpp b/framebuffer.cpp --- a/framebuffer.cpp +++ b/framebuffer.cpp @@ -24,6 +24,8 @@ FrameBuffer::FrameBuffer(size_t size) _size = size; data = new double[_size](); headIndex = 0; + + _boundingRect.setCoords(0, 0, size, 0); } FrameBuffer::~FrameBuffer() @@ -60,6 +62,9 @@ void FrameBuffer::resize(size_t size) data = newData; headIndex = 0; _size = size; + + // update the bounding rectangle + _boundingRect.setRight(_size); } void FrameBuffer::addSamples(double* samples, size_t size) @@ -107,6 +112,23 @@ void FrameBuffer::addSamples(double* sam } headIndex = 0; } + + // update bounding rectangle + double minValue = 0; + double maxValue = 0; + for (size_t i = 0; i < _size; i++) + { + if (data[i] > maxValue) + { + maxValue = data[i]; + } + else if (data[i] < minValue) + { + minValue = data[i]; + } + } + _boundingRect.setTop(minValue); + _boundingRect.setBottom(maxValue); } void FrameBuffer::clear() @@ -126,7 +148,7 @@ QPointF FrameBuffer::sample(size_t i) co QRectF FrameBuffer::boundingRect() const { - return qwtBoundingRect(*this); + return _boundingRect; } double FrameBuffer::_sample(size_t i) const diff --git a/framebuffer.h b/framebuffer.h --- a/framebuffer.h +++ b/framebuffer.h @@ -44,6 +44,8 @@ private: double* data; size_t headIndex; // indicates the actual `0` index of the ring buffer + QRectF _boundingRect; + double _sample(size_t i) const; };