made some resident stuff recomputed at real time

This commit is contained in:
Paolo Cignoni cignoni 2008-04-24 09:39:20 +00:00
parent 928b841ea6
commit a9ee8fa48c
7 changed files with 77 additions and 123 deletions

View File

@ -32,8 +32,8 @@ FIRST RELEASE
#include "const_types.h"
#include <cassert>
#include<QGraphicsView>
//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;
}
};

View File

@ -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);
}

View File

@ -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:

View File

@ -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; i<NUMBER_OF_EQHANDLES; i++)
{
xPos = xStart + _histogram_info->chartWidth/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<float>::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 );

View File

@ -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

View File

@ -5,8 +5,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>504</width>
<height>704</height>
<width>644</width>
<height>674</height>
</rect>
</property>
<property name="font" >
@ -36,12 +36,6 @@
<layout class="QVBoxLayout" >
<item>
<widget class="QGroupBox" name="transferFunctionGroupBox" >
<property name="sizePolicy" >
<sizepolicy vsizetype="MinimumExpanding" hsizetype="MinimumExpanding" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title" >
<string>Transfer Function</string>
</property>
@ -50,24 +44,6 @@
<layout class="QVBoxLayout" >
<item>
<widget class="QGraphicsView" name="transferFunctionView" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Expanding" hsizetype="MinimumExpanding" >
<horstretch>2</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize" >
<size>
<width>100</width>
<height>20</height>
</size>
</property>
<property name="maximumSize" >
<size>
<width>800</width>
<height>16777215</height>
</size>
</property>
<property name="autoFillBackground" >
<bool>true</bool>
</property>
@ -89,19 +65,13 @@
<widget class="QLabel" name="colorbandLabel" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Preferred" hsizetype="Ignored" >
<horstretch>2</horstretch>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize" >
<size>
<width>100</width>
<height>20</height>
</size>
</property>
<property name="maximumSize" >
<size>
<width>512</width>
<width>0</width>
<height>20</height>
</size>
</property>
@ -353,18 +323,6 @@
<layout class="QVBoxLayout" >
<item>
<widget class="QGraphicsView" name="equalizerGraphicsView" >
<property name="minimumSize" >
<size>
<width>100</width>
<height>100</height>
</size>
</property>
<property name="maximumSize" >
<size>
<width>16777215</width>
<height>2000</height>
</size>
</property>
<property name="autoFillBackground" >
<bool>true</bool>
</property>
@ -386,6 +344,9 @@
<property name="dragMode" >
<enum>QGraphicsView::NoDrag</enum>
</property>
<property name="viewportUpdateMode" >
<enum>QGraphicsView::SmartViewportUpdate</enum>
</property>
</widget>
</item>
<item>
@ -520,19 +481,7 @@
<property name="title" >
<string>Gamma Correction</string>
</property>
<layout class="QVBoxLayout" >
<property name="leftMargin" >
<number>5</number>
</property>
<property name="topMargin" >
<number>5</number>
</property>
<property name="rightMargin" >
<number>5</number>
</property>
<property name="bottomMargin" >
<number>5</number>
</property>
<layout class="QHBoxLayout" >
<item>
<widget class="QLabel" name="gammaCorrectionLabel" >
<property name="minimumSize" >
@ -552,6 +501,19 @@
</property>
</widget>
</item>
<item>
<spacer>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" >
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>

View File

@ -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();