100 lines
2.2 KiB
C++
100 lines
2.2 KiB
C++
|
#include "ZoomManager.h"
|
|||
|
|
|||
|
#include "ZoomWidget.h"
|
|||
|
#include "utils/ImageUtils.h"
|
|||
|
|
|||
|
ZoomWidget::ZoomWidget(std::string name,
|
|||
|
float w,
|
|||
|
float h,
|
|||
|
std::string fileName,
|
|||
|
std::string message,
|
|||
|
osgWidget::Widget::Layer layer,
|
|||
|
ZoomManager *pZoomManager)
|
|||
|
:osgWidget::Widget(name, w, h)
|
|||
|
{
|
|||
|
//osg::Image *image = ImageUtils::readImage(fileName);
|
|||
|
setImage(fileName, true, true);
|
|||
|
setTexCoord(0.0f, 0.0f, osgWidget::Widget::LOWER_LEFT);
|
|||
|
setTexCoord(1.0f, 0.0f, osgWidget::Widget::LOWER_RIGHT);
|
|||
|
setTexCoord(1.0f, 1.0f, osgWidget::Widget::UPPER_RIGHT);
|
|||
|
setTexCoord(0.0f, 1.0f, osgWidget::Widget::UPPER_LEFT);
|
|||
|
setLayer(layer);
|
|||
|
setEventMask(osgWidget::EVENT_MOUSE_PUSH | osgWidget::EVENT_MOUSE_RELEASE | osgWidget::EVENT_MOUSE_DRAG);
|
|||
|
setColor(1, 1, 1, 0);
|
|||
|
|
|||
|
|
|||
|
_pointX = _pointY = 0.0;
|
|||
|
_order = message;
|
|||
|
_pZoomManager = pZoomManager;
|
|||
|
}
|
|||
|
|
|||
|
ZoomWidget::~ZoomWidget(void)
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
bool ZoomWidget::mousePush(double x, double y, const osgWidget::WindowManager* wm)
|
|||
|
{
|
|||
|
_pZoomManager->state = ZoomManager::MOUSE_PUSH;
|
|||
|
_pointY = y;
|
|||
|
_pointX = x;
|
|||
|
if ("lessen" == _order)
|
|||
|
{
|
|||
|
_pZoomManager->zoom = -43;
|
|||
|
}
|
|||
|
else if ("enlargement" == _order)
|
|||
|
{
|
|||
|
_pZoomManager->zoom = 43;
|
|||
|
}
|
|||
|
setColor(1, 1, 1, 1);
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
bool ZoomWidget::mouseRelease(double x, double y, const osgWidget::WindowManager* wm)
|
|||
|
{
|
|||
|
_pZoomManager->state = ZoomManager::MOUSE_RELEASE;
|
|||
|
|
|||
|
if ("bar" == _order)
|
|||
|
{
|
|||
|
setOrigin(0, 67);
|
|||
|
getParent()->getByName("bar_")->setOrigin(0, 66);
|
|||
|
getParent()->resize();
|
|||
|
}
|
|||
|
_pZoomManager->zoom = 0.0;
|
|||
|
setColor(1, 1, 1, 0);
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
bool ZoomWidget::mouseDrag(double x, double y, const osgWidget::WindowManager* wm)
|
|||
|
{
|
|||
|
if (_order == "bar")
|
|||
|
{
|
|||
|
_pointX += x;
|
|||
|
_pointY += y;
|
|||
|
|
|||
|
while (_pZoomManager->zoom > 43)
|
|||
|
_pZoomManager->zoom = 43;
|
|||
|
while (_pZoomManager->zoom < -43)
|
|||
|
_pZoomManager->zoom = -43;
|
|||
|
|
|||
|
if (y > 43 - _pZoomManager->zoom)
|
|||
|
{
|
|||
|
y = 43 - _pZoomManager->zoom;
|
|||
|
}
|
|||
|
if (y < -43 - _pZoomManager->zoom)
|
|||
|
{
|
|||
|
y = -43 - _pZoomManager->zoom;
|
|||
|
}
|
|||
|
|
|||
|
if (_pZoomManager->zoom >= -43 && _pZoomManager->zoom <= 43)
|
|||
|
{
|
|||
|
addOrigin(0, y);
|
|||
|
getParent()->getByName("bar_")->addOrigin(0, y);
|
|||
|
_pZoomManager->zoom += y;
|
|||
|
}
|
|||
|
else {
|
|||
|
_pZoomManager->zoom += y;
|
|||
|
}
|
|||
|
getParent()->resize();
|
|||
|
}
|
|||
|
return true;
|
|||
|
}
|