DYTSrouce/src/scene/ui/ZoomWidget.cpp

100 lines
2.2 KiB
C++
Raw Normal View History

2025-01-12 17:35:51 +00:00
#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;
}