void CContourSliderManager::OnMouseMove( UINT nFlags, CPoint point)
{
Base::OnMouseMove(nFlags, point);
bool xChange = false;
bool yChange = false;
int tempXPos = m_xPos;
int tempYPos = m_yPos;
int tempHeight = m_height;
int tempWidth = m_width;
m_nOperation = OperationNone;
CWin* pWin;
CBody* pBody = FindFirstBody();
if ( pBody == NULL )
return;
pWin = pBody->GetWndInfo();
// kde nastala udalost
CDblPoint currPoint = PtToGL(*pWin, point, false);
/*POSITION pos = FindBodyHeadPosition(currPoint, FIND_MESH_ELEMENT);
if ( !pos )
return;*/
// kde nastala udalost OnMouseLDown
CDblPoint startPoint = PtToGL(*pWin, m_mouseStart, false);
CBodyMesh *pBodyMesh = (CBodyMesh*) FindBody(pBody->GetID());
tag_BODYSIZE TrBody = pBodyMesh->GetTrBodySize();
// indexy dlazdice, ve ktere nastala udalost
CPoint tilePoint;
tilePoint.x = currPoint.x / m_tileSizeX / pWin->GetSx() + m_sizeX / 2;
tilePoint.y = currPoint.y / m_tileSizeY / pWin->GetSy() + m_sizeY / 2;
if (!m_resizing)
{
//MOVING////////////////////////
if( tilePoint.x > m_xPos + 0.5 &&
tilePoint.x < m_xPos + m_width - 0.5 &&
tilePoint.y > m_yPos + 0.5 &&
tilePoint.y < m_yPos+m_height - 0.5)
{
m_nOperation = OperationMove;
}
//HORIZONTAL RESIZING
else
if( ((tilePoint.x <= m_xPos + 0.5 &&
tilePoint.x >= m_xPos - 0.5) ||
(tilePoint.x <= m_xPos + m_width + 0.5 &&
tilePoint.x >= m_xPos + m_width - 0.5)) &&
(tilePoint.y >= m_yPos + 0.5 &&
tilePoint.y <= m_yPos+m_height - 0.5))
{
if(tilePoint.x <= m_xPos + 0.5)
leftOrUp = true;
else
leftOrUp = false;
m_nOperation = OperationResizeHorizontal;
}
//VERTICAL RESIZING
/*else
if (((tilePoint.y <= m_yPos + 0.5 &&
tilePoint.y >= m_yPos - 0.5) ||
(tilePoint.y <= m_yPos + m_height + 0.5 &&
tilePoint.y >= m_yPos + m_height - 0.5)) &&
(tilePoint.x >= m_xPos + 0.5 &&
tilePoint.x <= m_xPos + m_width - 0.5))
{
if(tilePoint.y <=m_yPos+0.5)
leftOrUp = true;
else
leftOrUp = false;
m_nOperation = OperationResizeVertical;
}
//DIAGONAL RESIZING-TOP LEFT
else
if (tilePoint.y <= m_yPos + m_height + 0.5 &&
tilePoint.y >= m_yPos + m_height - 0.5 &&
tilePoint.x <= m_xPos + 0.5 &&
tilePoint.x >= m_xPos - 0.5)
{
leftOrUp = true;
m_nOperation = OperationResizeDiagonal;
}
//DIAGONAL RESIZING - BOOTOM RIGHT
else
if (tilePoint.y <= m_yPos + 0.5 &&
tilePoint.y >= m_yPos - 0.5 &&
tilePoint.x <= m_xPos + m_width + 0.5 &&
tilePoint.x >= m_xPos + m_width - 0.5)
{
leftOrUp = false;
m_nOperation = OperationResizeDiagonal;
}
//DIAGONAL RESIZING - TOP RIGHT
else
if (tilePoint.y <= m_yPos + m_height + 0.5 &&
tilePoint.y >= m_yPos + m_height - 0.5 &&
tilePoint.x <= m_xPos + m_width + 0.5 &&
tilePoint.x >= m_xPos + m_width - 0.5)
{
leftOrUp = false;
m_nOperation = OperationResizeDiagonalOther;
}
//DIAGONAL RESIZING - BOTTOM LEFT
else
if (tilePoint.y <= m_yPos + 0.5 &&
tilePoint.y >= m_yPos - 0.5 &&
tilePoint.x <= m_xPos + 0.5 &&
tilePoint.x >= m_xPos - 0.5)
{
leftOrUp = true;
m_nOperation = OperationResizeDiagonalOther;
}*/
}
if (m_mouseDown)
{
m_xPos += (currPoint.x - startPoint.x) / m_tileSizeX / pWin->GetSx();
m_yPos += (currPoint.y - startPoint.y) / m_tileSizeY / pWin->GetSy();
Invalidate();
}
else
if (m_resizingHorizontal)
{
if(leftOrUp)
{
m_xPos += (currPoint.x - startPoint.x) / m_tileSizeX / pWin->GetSx();
m_width -= (currPoint.x - startPoint.x) / m_tileSizeX / pWin->GetSx();
}
else
{
m_width += (currPoint.x - startPoint.x) / m_tileSizeX / pWin->GetSx();
}
Invalidate();
}
else
if (m_resizingVertical)
{
if(leftOrUp)
{
m_yPos += (currPoint.y - startPoint.y) / m_tileSizeY / pWin->GetSy();
m_height -= (currPoint.y - startPoint.y) / m_tileSizeY / pWin->GetSy();
}
else
{
m_height += (currPoint.y - startPoint.y)/m_tileSizeY/pWin->GetSy();
}
Invalidate();
}
else
if (m_resizingDiagonal)//TOP LEFT TO BOOTOM RIGHT
{
if (leftOrUp)
{
m_height += (currPoint.y - startPoint.y)/m_tileSizeY/pWin->GetSy();
m_xPos += (currPoint.x - startPoint.x)/m_tileSizeX/pWin->GetSx();
m_width -= (currPoint.x - startPoint.x)/m_tileSizeX/pWin->GetSx();
}
else
{
m_yPos += (currPoint.y - startPoint.y)/m_tileSizeY/pWin->GetSy();
m_height -= (currPoint.y - startPoint.y)/m_tileSizeY/pWin->GetSy();
m_width += (currPoint.x - startPoint.x)/m_tileSizeX/pWin->GetSx();
}
Invalidate();
}
else
if (m_resizingDiagonalOther)//TOP RIGHT TO BOOTM LEFT
{
if (leftOrUp)
{
m_yPos += (currPoint.y - startPoint.y)/m_tileSizeY/pWin->GetSy();
m_height -= (currPoint.y - startPoint.y)/m_tileSizeY/pWin->GetSy();
m_xPos += (currPoint.x - startPoint.x)/m_tileSizeX/pWin->GetSx();
m_width -= (currPoint.x - startPoint.x)/m_tileSizeX/pWin->GetSx();
}
else
{
m_width += (currPoint.x - startPoint.x)/m_tileSizeX/pWin->GetSx();
m_height += (currPoint.y - startPoint.y)/m_tileSizeY/pWin->GetSy();
}
//m_mouseStart = point;
Invalidate();
}
if (m_width < m_minWidth)
{
m_width = tempWidth;
m_xPos = tempXPos;
}
else
{
m_mouseStart.x = point.x;
}
if (m_height < m_minHeight)
{
m_height = tempHeight;
m_yPos = tempYPos;
}
else
{
m_mouseStart.y = point.y;
}
if (tilePoint.x < 0 || m_xPos <0)
{
m_xPos=0;
m_width = tempWidth;
xChange = true;
}
else
if (tilePoint.x > m_sizeX ||m_xPos > m_sizeX - m_width)
{
m_width = tempWidth;
m_xPos = m_sizeX-m_width;
xChange = true;
}
if(tilePoint.y < 0 || m_yPos<0)
{
m_yPos=0;
m_height = tempHeight;
yChange = true;
}
else
if (tilePoint.y > m_sizeY || m_yPos > m_sizeY - m_height)
{
m_height = tempHeight;
m_yPos = m_sizeY-m_height;
yChange = true;
}
if (!xChange)
m_mouseStart.x = point.x;
if (!yChange)
m_mouseStart.y = point.y;
}