#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; }