From a9ee8fa48ca4896a4398daa447a5d4401376ec33 Mon Sep 17 00:00:00 2001 From: Paolo Cignoni cignoni Date: Thu, 24 Apr 2008 09:39:20 +0000 Subject: [PATCH] made some resident stuff recomputed at real time --- src/fgt/edit_quality/common/util.h | 38 ++++------ src/fgt/edit_quality/eqhandle.cpp | 10 +-- src/fgt/edit_quality/eqhandle.h | 4 +- src/fgt/edit_quality/qualitymapperdialog.cpp | 52 ++++++------- src/fgt/edit_quality/qualitymapperdialog.h | 8 +- src/fgt/edit_quality/qualitymapperdialog.ui | 80 +++++--------------- src/fgt/edit_quality/tfhandle.cpp | 8 +- 7 files changed, 77 insertions(+), 123 deletions(-) diff --git a/src/fgt/edit_quality/common/util.h b/src/fgt/edit_quality/common/util.h index 9c5a86cac..dcf080232 100644 --- a/src/fgt/edit_quality/common/util.h +++ b/src/fgt/edit_quality/common/util.h @@ -32,8 +32,8 @@ FIRST RELEASE #include "const_types.h" - #include +#include //these functions return a relative-absolute value conversion respectively in float and int (rounded to closer integer value) float relative2AbsoluteValf(float relative_val, float max_val); @@ -50,45 +50,37 @@ float relative2QualityValf(float relative_val, float min_q, float max_q, float e //It stores info about borders, size and so on... struct CHART_INFO { - float leftBorder; - float rightBorder; - float upperBorder; - float lowerBorder; - float chartWidth; - float chartHeight; + QGraphicsView *qgv; + inline float leftBorder() { return qgv->width() - CANVAS_BORDER_DISTANCE; } + inline float rightBorder() { return CANVAS_BORDER_DISTANCE; } + inline float upperBorder() { return CANVAS_BORDER_DISTANCE; } + inline float lowerBorder() { return qgv->height() - CANVAS_BORDER_DISTANCE; } + inline float chartWidth() { return rightBorder() - leftBorder(); } + inline float chartHeight() { return lowerBorder() - upperBorder(); } int numOfItems; int yScaleStep; + inline float dX() {return chartWidth() / (float)numOfItems; } + inline float dY() {return chartHeight() / (float)numOfItems; } + float minX; float maxX; float minY; float maxY; - float dX; - float dY; - CHART_INFO( int view_width=0, int view_height=0, float min_X=0.0f, float max_X=0.0f, float min_Y=0.0f, float max_Y=0.0f ) + CHART_INFO(QGraphicsView *_qgv,float min_X=0.0f, float max_X=0.0f, float min_Y=0.0f, float max_Y=0.0f ) { - this->updateChartInfo(view_width, view_height, min_X, max_X, min_Y, max_Y); + qgv=_qgv; + this->updateChartInfo( min_X, max_X, min_Y, max_Y); } - void updateChartInfo( int view_width=0, int view_height=0, float min_X=0.0f, float max_X=0.0f, float min_Y=0.0f, float max_Y=0.0f ) + void updateChartInfo( float min_X=0.0f, float max_X=0.0f, float min_Y=0.0f, float max_Y=0.0f ) { - assert(numOfItems != 0); - - leftBorder = CANVAS_BORDER_DISTANCE; - rightBorder = view_width - CANVAS_BORDER_DISTANCE; - upperBorder = CANVAS_BORDER_DISTANCE; - lowerBorder = view_height - CANVAS_BORDER_DISTANCE; - chartWidth = rightBorder - leftBorder; - chartHeight = lowerBorder - upperBorder; numOfItems = NUMBER_OF_HISTOGRAM_BARS; yScaleStep = Y_SCALE_STEP; minX = min_X; maxX = max_X; minY = min_Y; maxY = max_Y; - - dX = chartWidth / (float)numOfItems; - dY = chartHeight / (float)numOfItems; } }; diff --git a/src/fgt/edit_quality/eqhandle.cpp b/src/fgt/edit_quality/eqhandle.cpp index 6ab5e4b7b..e4645c3f3 100644 --- a/src/fgt/edit_quality/eqhandle.cpp +++ b/src/fgt/edit_quality/eqhandle.cpp @@ -36,7 +36,7 @@ EqHandle::EqHandle(CHART_INFO *environment_info, QColor color, QPointF position, { setSize(size); _type = type; - _barHeight = environment_info->chartHeight; + _barHeight = environment_info->chartHeight(); _handlesPointer = handles; _midHandlePercentilePosition = midHandlePercentilePosition; @@ -213,14 +213,14 @@ void EqHandle::setXBySpinBoxValueChanged(double spinBoxValue) _handlesPointer[MID_HANDLE]->_spinBoxPointer->setMinimum(spinBoxValue); // if left handle is "inside" histogram - if ( newHandleX >= _chartInfo->leftBorder ) + if ( newHandleX >= _chartInfo->leftBorder() ) { setPos(newHandleX, pos().y()); emit insideHistogram(this,true); // for redrawing equalizerHistogram bars, if needed } else { - setPos(_chartInfo->leftBorder, pos().y()); + setPos(_chartInfo->leftBorder(), pos().y()); emit insideHistogram(this,false); } @@ -237,14 +237,14 @@ void EqHandle::setXBySpinBoxValueChanged(double spinBoxValue) _handlesPointer[MID_HANDLE]->_spinBoxPointer->setMaximum(spinBoxValue); // if right handle is "inside" histogram - if ( newHandleX <= _chartInfo->rightBorder ) + if ( newHandleX <= _chartInfo->rightBorder() ) { setPos(newHandleX, pos().y()); emit insideHistogram(this,true); // invalidates equalizerHistogram scene } else { - setPos(_chartInfo->rightBorder, pos().y()); + setPos(_chartInfo->rightBorder(), pos().y()); emit insideHistogram(this,false); } diff --git a/src/fgt/edit_quality/eqhandle.h b/src/fgt/edit_quality/eqhandle.h index c58c44358..e54c889ad 100644 --- a/src/fgt/edit_quality/eqhandle.h +++ b/src/fgt/edit_quality/eqhandle.h @@ -83,7 +83,7 @@ private: // computes quality from handle absolute position qreal positionToQuality(qreal newHandleX) { - qreal percentagePos = (newHandleX-_chartInfo->leftBorder) / _chartInfo->chartWidth; + qreal percentagePos = (newHandleX-_chartInfo->leftBorder()) / _chartInfo->chartWidth(); // assert( (percentagePos>=-1.0f) && (percentagePos<=2.0f) ); float maxX = (_handlesPointer[RIGHT_HANDLE]->_spinBoxPointer->value() > _chartInfo->maxX)?_handlesPointer[RIGHT_HANDLE]->_spinBoxPointer->value():_chartInfo->maxX; float minX = (_handlesPointer[LEFT_HANDLE]->_spinBoxPointer->value() < _chartInfo->minX)?_handlesPointer[LEFT_HANDLE]->_spinBoxPointer->value() :_chartInfo->minX; @@ -94,7 +94,7 @@ private: qreal qualityToPosition(float quality, float minQ, float maxQ) { qreal percentageValue = (quality - minQ) / (maxQ - minQ); - return percentageValue * _chartInfo->chartWidth + _chartInfo->leftBorder; + return percentageValue * _chartInfo->chartWidth() + _chartInfo->leftBorder(); }; signals: diff --git a/src/fgt/edit_quality/qualitymapperdialog.cpp b/src/fgt/edit_quality/qualitymapperdialog.cpp index ffe227927..773f1b481 100644 --- a/src/fgt/edit_quality/qualitymapperdialog.cpp +++ b/src/fgt/edit_quality/qualitymapperdialog.cpp @@ -282,14 +282,14 @@ void QualityMapperDialog::drawChartBasics(QGraphicsScene& scene, CHART_INFO *cha //drawing axis //x axis - current_item = scene.addLine( chart_info->leftBorder, chart_info->lowerBorder, chart_info->rightBorder, chart_info->lowerBorder, p ); + current_item = scene.addLine( chart_info->leftBorder(), chart_info->lowerBorder(), chart_info->rightBorder(), chart_info->lowerBorder(), p ); current_item->setZValue( 0 ); if (chart_info == _transferFunction_info) _transferFunctionLines << current_item; else _equalizerHistogramBars << current_item; //y axis - current_item = scene.addLine( chart_info->leftBorder, chart_info->upperBorder, chart_info->leftBorder, chart_info->lowerBorder, p ); + current_item = scene.addLine( chart_info->leftBorder(), chart_info->upperBorder(), chart_info->leftBorder(), chart_info->lowerBorder(), p ); current_item->setZValue( 0 ); if (chart_info == _transferFunction_info) _transferFunctionLines << current_item; @@ -316,13 +316,13 @@ bool QualityMapperDialog::initEqualizerHistogram() //DRAWING HANDLES QDoubleSpinBox* spinboxes[] = { ui.minSpinBox, ui.midSpinBox, ui.maxSpinBox }; - qreal xStart = _histogram_info->leftBorder; + qreal xStart = _histogram_info->leftBorder(); qreal xPos = 0.0f; - qreal yPos = _histogram_info->lowerBorder; + qreal yPos = _histogram_info->lowerBorder(); _equalizerMidHandlePercentilePosition = 0.5f; for (int i=0; ichartWidth/2.0f*i; + xPos = xStart + _histogram_info->chartWidth()/2.0f*i; _equalizerHandles[i] = new EqHandle(_histogram_info, Qt::black, QPointF(xPos, yPos), (EQUALIZER_HANDLE_TYPE)i, _equalizerHandles, &_equalizerMidHandlePercentilePosition, spinboxes[i], 1, 5); @@ -387,7 +387,7 @@ bool QualityMapperDialog::initEqualizerHistogram() void QualityMapperDialog::initEqualizerSpinboxes() { - double singleStep = (_histogram_info->maxX - _histogram_info->minX) / _histogram_info->chartWidth; + double singleStep = (_histogram_info->maxX - _histogram_info->minX) / _histogram_info->chartWidth(); int decimals = 0; if (singleStep > std::numeric_limits::epsilon()) { @@ -436,12 +436,12 @@ bool QualityMapperDialog::drawEqualizerHistogram(bool leftHandleIsInsideHistogra return false; } //building histogram chart informations - _histogram_info = new CHART_INFO( ui.equalizerGraphicsView->width(), ui.equalizerGraphicsView->height(), _equalizer_histogram->MinV(), _equalizer_histogram->MaxV(), 0, computeEqualizerMaxY(_equalizer_histogram, _equalizer_histogram->MinV(), _equalizer_histogram->MaxV()) ); + _histogram_info = new CHART_INFO( ui.equalizerGraphicsView, _equalizer_histogram->MinV(), _equalizer_histogram->MaxV(), 0, computeEqualizerMaxY(_equalizer_histogram, _equalizer_histogram->MinV(), _equalizer_histogram->MaxV()) ); } else { //added by MAL 23/04/08 - _transferFunction_info->updateChartInfo( ui.equalizerGraphicsView->width(), ui.equalizerGraphicsView->height(), _equalizer_histogram->MinV(), _equalizer_histogram->MaxV(), 0, computeEqualizerMaxY(_equalizer_histogram, _equalizer_histogram->MinV(), _equalizer_histogram->MaxV()) ); + _transferFunction_info->updateChartInfo(_equalizer_histogram->MinV(), _equalizer_histogram->MaxV(), 0, computeEqualizerMaxY(_equalizer_histogram, _equalizer_histogram->MinV(), _equalizer_histogram->MaxV()) ); // if histogram doesn't need to be redrawn, return if ( (leftHandleIsInsideHistogram && _leftHandleWasInsideHistogram) && (rightHandleIsInsideHistogram && _rightHandleWasInsideHistogram) ) @@ -496,7 +496,7 @@ int QualityMapperDialog::computeEqualizerMaxY (Histogramf *h, float minX, float void QualityMapperDialog::drawHistogramBars (QGraphicsScene& destinationScene, CHART_INFO *chartInfo, float minVal, float maxVal, QColor color) { float barHeight = 0.0f; //initializing height of the histogram bars - float barWidth = chartInfo->chartWidth / (float)(NUMBER_OF_HISTOGRAM_BARS); //processing width of the histogram bars + float barWidth = chartInfo->chartWidth() / (float)(NUMBER_OF_HISTOGRAM_BARS); //processing width of the histogram bars // exp is such that: _equalizerMidHandlePercentilePosition^exp = 0.5 float exp = log10(0.5f) / log10((float)_equalizerMidHandlePercentilePosition); @@ -511,22 +511,22 @@ void QualityMapperDialog::drawHistogramBars (QGraphicsScene& destinationScene, C for (int i = 0; i < NUMBER_OF_HISTOGRAM_BARS; i++) { // Setting barHeight proportional to max height - barHeight = (float)(chartInfo->chartHeight * _equalizer_histogram->BinCount( minVal+i*barRange, barRange) ) / (float)chartInfo->maxY; + barHeight = (float)(chartInfo->chartHeight() * _equalizer_histogram->BinCount( minVal+i*barRange, barRange) ) / (float)chartInfo->maxY; - startBarPt.setY( (float)chartInfo->lowerBorder - barHeight ); + startBarPt.setY( (float)chartInfo->lowerBorder() - barHeight ); //drawing histogram bar if ( &destinationScene == &_transferFunctionScene ) { // Histogram bars positions are calculted applying an exponential function: relIndex^exp - startBarPt.setX( chartInfo->leftBorder + relative2AbsoluteValf(pow( absolute2RelativeValf(i,NUMBER_OF_HISTOGRAM_BARS ), exp ), chartInfo->chartWidth) ); - current_item = destinationScene.addLine(startBarPt.x(), startBarPt.y(), startBarPt.x(), (float)chartInfo->lowerBorder, drawingPen); + startBarPt.setX( chartInfo->leftBorder() + relative2AbsoluteValf(pow( absolute2RelativeValf(i,NUMBER_OF_HISTOGRAM_BARS ), exp ), chartInfo->chartWidth()) ); + current_item = destinationScene.addLine(startBarPt.x(), startBarPt.y(), startBarPt.x(), (float)chartInfo->lowerBorder(), drawingPen); _transferFunctionBg << current_item; } else // ( &destinationScene == &_equalizerHistogramScene ) { // histogram bars are added all at same distance - startBarPt.setX( chartInfo->leftBorder + ( barWidth * (i) ) ); + startBarPt.setX( chartInfo->leftBorder() + ( barWidth * (i) ) ); current_item = destinationScene.addRect(startBarPt.x(), startBarPt.y(), barWidth, barHeight, drawingPen, drawingBrush); _equalizerHistogramBars << current_item; } @@ -574,7 +574,7 @@ void QualityMapperDialog::initTF() //building transfer function chart informations (if necessary) if ( _transferFunction_info == 0 ) - _transferFunction_info = new CHART_INFO( ui.transferFunctionView->width(), ui.transferFunctionView->height(), /*_transferFunction->size(),*/ 0.0f, 1.0f, 0.0f, 1.0f ); + _transferFunction_info = new CHART_INFO( ui.transferFunctionView, /*_transferFunction->size(),*/ 0.0f, 1.0f, 0.0f, 1.0f ); //removing and deleting any old TF graphics item (TF lines and handles) this->clearItems( REMOVE_TF_ALL | DELETE_REMOVED_ITEMS ); @@ -598,7 +598,7 @@ void QualityMapperDialog::initTF() { val = _transferFunction->getChannel(c)[i]; this->addTfHandle( c, - QPointF(_transferFunction_info->leftBorder + relative2AbsoluteValf( val->x, (float)_transferFunction_info->chartWidth ), _transferFunction_info->lowerBorder - relative2AbsoluteValf( val->y, (float)_transferFunction_info->chartHeight )), + QPointF(_transferFunction_info->leftBorder() + relative2AbsoluteValf( val->x, (float)_transferFunction_info->chartWidth() ), _transferFunction_info->lowerBorder() - relative2AbsoluteValf( val->y, (float)_transferFunction_info->chartHeight() )), val, zValue ); } @@ -666,10 +666,10 @@ void QualityMapperDialog::drawTransferFunction() //building transfer function chart informations if ( _transferFunction_info == 0 ) - _transferFunction_info = new CHART_INFO( ui.transferFunctionView->width(), ui.transferFunctionView->height(), /* _transferFunction->size(),*/ 0.0f, 1.0f, 0.0f, 1.0f ); + _transferFunction_info = new CHART_INFO( ui.transferFunctionView, /* _transferFunction->size(),*/ 0.0f, 1.0f, 0.0f, 1.0f ); else // added by MAL 23/04/08 - _transferFunction_info->updateChartInfo( ui.transferFunctionView->width(), ui.transferFunctionView->height(), /* _transferFunction->size(),*/ 0.0f, 1.0f, 0.0f, 1.0f ); + _transferFunction_info->updateChartInfo( /* _transferFunction->size(),*/ 0.0f, 1.0f, 0.0f, 1.0f ); //is necessary, initialize TF if ( !_isTransferFunctionInitialized ) @@ -1026,7 +1026,7 @@ void QualityMapperDialog::manageBorderTfHandles(TFHandle *handle) newKey = new TF_KEY(0.0f, handle->getRelativeY()); _transferFunction->getChannel(handle->getChannel()).addKey(newKey); this->addTfHandle( handle->getChannel(), - QPointF(_transferFunction_info->leftBorder + relative2AbsoluteValf( 0.0f, (float)_transferFunction_info->chartWidth ), _transferFunction_info->lowerBorder - relative2AbsoluteValf( handle->getRelativeY(), (float)_transferFunction_info->chartHeight )), + QPointF(_transferFunction_info->leftBorder() + relative2AbsoluteValf( 0.0f, (float)_transferFunction_info->chartWidth() ), _transferFunction_info->lowerBorder() - relative2AbsoluteValf( handle->getRelativeY(), (float)_transferFunction_info->chartHeight() )), newKey, ((handle->getChannel() + 1)*2.0f) + 1 ); } @@ -1044,7 +1044,7 @@ void QualityMapperDialog::manageBorderTfHandles(TFHandle *handle) newKey = new TF_KEY(1.0f, handle->getRelativeY()); _transferFunction->getChannel(handle->getChannel()).addKey(newKey); this->addTfHandle( handle->getChannel(), - QPointF(_transferFunction_info->leftBorder + relative2AbsoluteValf( 1.0f, (float)_transferFunction_info->chartWidth ), _transferFunction_info->lowerBorder - relative2AbsoluteValf( handle->getRelativeY(), (float)_transferFunction_info->chartHeight )), + QPointF(_transferFunction_info->leftBorder() + relative2AbsoluteValf( 1.0f, (float)_transferFunction_info->chartWidth() ), _transferFunction_info->lowerBorder() - relative2AbsoluteValf( handle->getRelativeY(), (float)_transferFunction_info->chartHeight() )), newKey, ((handle->getChannel() + 1)*2.0f) + 1); } @@ -1129,7 +1129,7 @@ void QualityMapperDialog::on_xSpinBox_valueChanged(double newX) if (_currentTfHandle) { //updating handle position in the scene - _currentTfHandle->setPos(_transferFunction_info->leftBorder+relative2AbsoluteValf(newX,_transferFunction_info->chartWidth), _currentTfHandle->scenePos().y()); + _currentTfHandle->setPos(_transferFunction_info->leftBorder()+relative2AbsoluteValf(newX,_transferFunction_info->chartWidth()), _currentTfHandle->scenePos().y()); //updating the Tf Handle position at logical level (update of joined TF_KEY) _currentTfHandle->updateTfHandlesState(_currentTfHandle->scenePos()); this->manageBorderTfHandles(_currentTfHandle); @@ -1152,7 +1152,7 @@ void QualityMapperDialog::on_ySpinBox_valueChanged(double newY) if (_currentTfHandle) { //updating handle position in the scene - _currentTfHandle->setPos(_currentTfHandle->scenePos().x(), _transferFunction_info->chartHeight+_transferFunction_info->upperBorder-relative2AbsoluteValf(newY,_transferFunction_info->chartHeight)); + _currentTfHandle->setPos(_currentTfHandle->scenePos().x(), _transferFunction_info->chartHeight()+_transferFunction_info->upperBorder()-relative2AbsoluteValf(newY,_transferFunction_info->chartHeight())); //updating the Tf Handle position at logical level (update of joined TF_KEY) _currentTfHandle->updateTfHandlesState(_currentTfHandle->scenePos()); //restoring the correct order for TfHandles (they're drawn in the same order as they're stored) @@ -1277,10 +1277,10 @@ void QualityMapperDialog::on_TF_view_doubleClicked(QPointF pos) //let's use the more ahead channel in TF channelCode = _transferFunction->getFirstPlaneChanel(); - float xPos = pos.x() - _transferFunction_info->leftBorder; - float yPos = pos.y() - _transferFunction_info->upperBorder; - TF_KEY *val = new TF_KEY(absolute2RelativeValf(xPos, _transferFunction_info->chartWidth), - absolute2RelativeValf(yPos, _transferFunction_info->chartHeight)); + float xPos = pos.x() - _transferFunction_info->leftBorder(); + float yPos = pos.y() - _transferFunction_info->upperBorder(); + TF_KEY *val = new TF_KEY(absolute2RelativeValf(xPos, _transferFunction_info->chartWidth()), + absolute2RelativeValf(yPos, _transferFunction_info->chartHeight())); _transferFunction->getChannel(channelCode).addKey(val); TFHandle *newHandle = this->addTfHandle(channelCode, pos, val, ((channelCode + 1)*2.0f) + 1 ); diff --git a/src/fgt/edit_quality/qualitymapperdialog.h b/src/fgt/edit_quality/qualitymapperdialog.h index ef9bcbbcd..95e9b745c 100644 --- a/src/fgt/edit_quality/qualitymapperdialog.h +++ b/src/fgt/edit_quality/qualitymapperdialog.h @@ -80,10 +80,10 @@ public: { assert(environmentInfo); //setting graphics - _boundingRect.setX(_environmentInfo->leftBorder); - _boundingRect.setY(_environmentInfo->upperBorder); - _boundingRect.setWidth(_environmentInfo->chartWidth); - _boundingRect.setHeight(_environmentInfo->chartHeight); + _boundingRect.setX(_environmentInfo->leftBorder()); + _boundingRect.setY(_environmentInfo->upperBorder()); + _boundingRect.setWidth(_environmentInfo->chartWidth()); + _boundingRect.setHeight(_environmentInfo->chartHeight()); } ~TFDoubleClickCatcher(){_environmentInfo = 0;} // Overriding QGraphicsItem methods diff --git a/src/fgt/edit_quality/qualitymapperdialog.ui b/src/fgt/edit_quality/qualitymapperdialog.ui index 8919287d4..a097812e9 100644 --- a/src/fgt/edit_quality/qualitymapperdialog.ui +++ b/src/fgt/edit_quality/qualitymapperdialog.ui @@ -5,8 +5,8 @@ 0 0 - 504 - 704 + 644 + 674 @@ -36,12 +36,6 @@ - - - 0 - 0 - - Transfer Function @@ -50,24 +44,6 @@ - - - 2 - 0 - - - - - 100 - 20 - - - - - 800 - 16777215 - - true @@ -89,19 +65,13 @@ - 2 + 0 0 - 100 - 20 - - - - - 512 + 0 20 @@ -353,18 +323,6 @@ - - - 100 - 100 - - - - - 16777215 - 2000 - - true @@ -386,6 +344,9 @@ QGraphicsView::NoDrag + + QGraphicsView::SmartViewportUpdate + @@ -520,19 +481,7 @@ Gamma Correction - - - 5 - - - 5 - - - 5 - - - 5 - + @@ -552,6 +501,19 @@ + + + + Qt::Horizontal + + + + 40 + 20 + + + + diff --git a/src/fgt/edit_quality/tfhandle.cpp b/src/fgt/edit_quality/tfhandle.cpp index 8c9f7fbda..8a1a5a6f4 100644 --- a/src/fgt/edit_quality/tfhandle.cpp +++ b/src/fgt/edit_quality/tfhandle.cpp @@ -88,8 +88,8 @@ void TFHandle::mouseMoveEvent(QGraphicsSceneMouseEvent *event) newPos.setY(newPos.y()-(_size/2.0f)); //the handle can be moved only INSIDE the TF scene - if (( newPos.x() >= _chartInfo->leftBorder ) && ( newPos.x() <= _chartInfo->rightBorder ) && - ( newPos.y() >= _chartInfo->upperBorder ) && ( newPos.y() <= _chartInfo->lowerBorder )) + if (( newPos.x() >= _chartInfo->leftBorder() ) && ( newPos.x() <= _chartInfo->rightBorder() ) && + ( newPos.y() >= _chartInfo->upperBorder() ) && ( newPos.y() <= _chartInfo->lowerBorder() )) { //updating new position in the scene this->setPos(newPos); @@ -106,8 +106,8 @@ void TFHandle::updateTfHandlesState(QPointF newPos) { assert(_tf != 0); //updating the position at logical state - _myKey->x = absolute2RelativeValf( newPos.x()-_chartInfo->leftBorder, _chartInfo->chartWidth ); - _myKey->y = 1.0f-absolute2RelativeValf( newPos.y()-_chartInfo->upperBorder, _chartInfo->chartHeight ); + _myKey->x = absolute2RelativeValf( newPos.x()-_chartInfo->leftBorder(), _chartInfo->chartWidth() ); + _myKey->y = 1.0f-absolute2RelativeValf( newPos.y()-_chartInfo->upperBorder(), _chartInfo->chartHeight() ); //key changed... restoring correct order (*_tf)[this->getChannel()].updateKeysOrder();