mirror of
https://github.com/Linloir/SceneEditor.git
synced 2025-12-17 07:28:12 +08:00
[UI][ADD] Add API in SceneViewer
- signals - onSelect - onUpdate - onHover - slots - setDragFlag - clearDragFlag - deleteObject
This commit is contained in:
parent
929fa790b1
commit
cad41559b1
@ -280,6 +280,7 @@ void SceneViewer::mouseReleaseEvent(QMouseEvent* event) {
|
||||
else {
|
||||
_selectedObject = _pressedObject;
|
||||
_hideBound = false;
|
||||
emit onSelect(_selectedObject);
|
||||
}
|
||||
|
||||
// Reset pressed object
|
||||
@ -314,6 +315,7 @@ void SceneViewer::mouseMoveEvent(QMouseEvent* event) {
|
||||
_selectedObject->rotate(_camera.up(), delta.x * 0.01f);
|
||||
// Rotate around camera right
|
||||
_selectedObject->rotate(_camera.right(), delta.y * 0.01f);
|
||||
emit onUpdate(_selectedObject);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -332,6 +334,7 @@ void SceneViewer::mouseMoveEvent(QMouseEvent* event) {
|
||||
// Scale object
|
||||
glm::vec2 delta = glm::vec2(event->x() - _lastMousePosition.x(), event->y() - _lastMousePosition.y());
|
||||
_selectedObject->scale(-delta.y * 0.01f);
|
||||
emit onUpdate(_selectedObject);
|
||||
}
|
||||
else {
|
||||
// Set dragged
|
||||
@ -356,6 +359,7 @@ void SceneViewer::mouseMoveEvent(QMouseEvent* event) {
|
||||
}
|
||||
else {
|
||||
moveOperatingObject(ray);
|
||||
emit onUpdate(_selectedObject);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -490,4 +494,29 @@ void SceneViewer::addObject(Model* model) {
|
||||
_operatingObject = newObject;
|
||||
_objects.push_back(newObject);
|
||||
parentWidget()->update();
|
||||
emit onSelect(_selectedObject);
|
||||
}
|
||||
|
||||
void SceneViewer::deleteObject() {
|
||||
if (_selectedObject == nullptr) {
|
||||
return;
|
||||
}
|
||||
makeCurrent();
|
||||
for (auto it = _objects.begin(); it != _objects.end(); ++it) {
|
||||
if (*it == _selectedObject) {
|
||||
_objects.erase(it);
|
||||
break;
|
||||
}
|
||||
}
|
||||
delete _selectedObject;
|
||||
if (_hoveredObject == _selectedObject) {
|
||||
_hoveredObject = nullptr;
|
||||
}
|
||||
if (_pressedObject == _selectedObject) {
|
||||
_pressedObject = nullptr;
|
||||
}
|
||||
_selectedObject = nullptr;
|
||||
_operatingObject = nullptr;
|
||||
emit onSelect(nullptr);
|
||||
parentWidget()->update();
|
||||
}
|
||||
|
||||
@ -86,6 +86,19 @@ protected:
|
||||
virtual void keyPressEvent(QKeyEvent* event) override;
|
||||
virtual void keyReleaseEvent(QKeyEvent* event) override;
|
||||
|
||||
public:
|
||||
void setDragFlag() {
|
||||
_hideBound = true;
|
||||
parentWidget()->update();
|
||||
}
|
||||
void clearDragFlag() {
|
||||
_hideBound = false;
|
||||
if (_selectedObject != nullptr)
|
||||
_selectedObject->updateBoundary();
|
||||
parentWidget()->update();
|
||||
}
|
||||
void deleteObject();
|
||||
|
||||
signals:
|
||||
void onHover(Renderable* object);
|
||||
void onSelect(Renderable* object);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user