DYTSrouce/src/scene/ui/CompositeWidget.cpp
2025-01-13 08:36:26 +08:00

117 lines
2.3 KiB
C++

#include "CompositeWidget.h"
#include "utils/ImageUtils.h"
#include "CompositeWidgetManager.h"
#include "common/SpdLogger.h"
CompositeWidget::CompositeWidget(std::string name,
float w,
float h,
std::string fileName,
std::string message,
osgWidget::Widget::Layer layer,
CompositeWidgetManager *wm) :osgWidget::Widget(name, w, h)
{
//osg::Image *image = ImageUtils::readImage(fileName);
LOG_INFO("setimage, {}", 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);
if (message == "background" || message == "light")
{
setColor(1, 1, 1, 0);
}
else
{
setColor(1, 1, 1, 0);
}
_PointerX = 0.0;
_PointerY = 0.0;
order = message;
_wm = wm;
}
CompositeWidget::~CompositeWidget(void)
{
}
bool CompositeWidget::mousePush(double x, double y, const osgWidget::WindowManager* wm)
{
if (order == "center")
{
if (_wm->_bAllow)
{
if (_wm->_center == true)
{
_wm->_center = false;
setColor(1, 1, 1, 0);
}
else
{
_wm->_center = true;
setColor(1, 1, 1, 0);
}
}
}
else
{
if (order == "N")
{
_wm->_N = true;
}
else
{
_wm->_state = CompositeWidgetManager::MOUSE_PUSH;
}
setColor(1, 1, 1, 0);
}
_PointerX = x;
_PointerY = y;
_wm->_local_x = _PointerX - _wm->_center_x;
_wm->_local_y = _PointerY - _wm->_center_y;
return false;
}
bool CompositeWidget::mouseDrag(double x, double y, const osgWidget::WindowManager* wm)
{
if (order == "N")
{
_wm->_state = CompositeWidgetManager::MOUSE_DRAG;
_wm->_N = false;
if (_wm->_autoHome == true)
return false;
_PointerX += x;
_PointerY += y;
_wm->_local_x = _PointerX - _wm->_center_x;
_wm->_local_y = _PointerY - _wm->_center_y;
}
return true;
}
bool CompositeWidget::mouseRelease(double x, double y, const osgWidget::WindowManager* wm)
{
_wm->_state = CompositeWidgetManager::MOUSE_RELEASE;
if (getName() != "center")
{
if (getName() != "backGround1")
{
setColor(1, 1, 1, 0);
}
}
if (order == "N")
{
getParent()->resize();
}
return false;
}