feat: Add animated home button to view cube to reset camera
Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
@@ -5,10 +5,12 @@
|
||||
#include <QOpenGLShaderProgram>
|
||||
#include <QOpenGLTexture>
|
||||
#include <QScreen>
|
||||
#include <QSvgRenderer>
|
||||
#include <QVector>
|
||||
|
||||
ViewCube::ViewCube()
|
||||
{
|
||||
m_homeButtonRenderer = new QSvgRenderer(QString(":/icons/rectangle.svg"));
|
||||
for (int i = 0; i < 6; ++i) {
|
||||
m_faceTextures[i] = nullptr;
|
||||
}
|
||||
@@ -20,6 +22,7 @@ ViewCube::~ViewCube()
|
||||
delete m_faceTextures[i];
|
||||
}
|
||||
delete m_textureShaderProgram;
|
||||
delete m_homeButtonRenderer;
|
||||
m_cubeVbo.destroy();
|
||||
m_cubeVao.destroy();
|
||||
m_axesVbo.destroy();
|
||||
@@ -42,10 +45,9 @@ void ViewCube::paintGL(QOpenGLShaderProgram* simpleShader, int simpleShaderColor
|
||||
QRect viewCubeRect(width - viewCubeSize, 0, viewCubeSize, viewCubeSize);
|
||||
QPoint physicalMousePos = mousePos * QGuiApplication::primaryScreen()->devicePixelRatio();
|
||||
|
||||
float opacity = 0.5f;
|
||||
if (viewCubeRect.contains(physicalMousePos)) {
|
||||
opacity = 1.0f;
|
||||
}
|
||||
m_isHovered = viewCubeRect.contains(physicalMousePos);
|
||||
|
||||
float opacity = m_isHovered ? 1.0f : 0.5f;
|
||||
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
@@ -210,3 +212,39 @@ void ViewCube::drawAxes(QOpenGLShaderProgram* simpleShader, int colorLoc, const
|
||||
|
||||
glLineWidth(1.0f);
|
||||
}
|
||||
|
||||
void ViewCube::paint2D(QPainter& painter, int widgetWidth, int widgetHeight)
|
||||
{
|
||||
if (!m_isHovered) {
|
||||
return;
|
||||
}
|
||||
|
||||
int viewCubeSize = 150; // logical pixels
|
||||
int buttonSize = 24;
|
||||
int buttonMargin = 8;
|
||||
|
||||
int viewCubeX = widgetWidth - viewCubeSize;
|
||||
int viewCubeY = 0;
|
||||
|
||||
m_homeButtonRect = QRect(viewCubeX - buttonMargin - buttonSize, viewCubeY, buttonSize, buttonSize);
|
||||
|
||||
if (m_homeButtonRenderer && m_homeButtonRenderer->isValid()) {
|
||||
m_homeButtonRenderer->render(&painter, m_homeButtonRect);
|
||||
}
|
||||
}
|
||||
|
||||
bool ViewCube::handleMousePress(const QPoint& pos, int widgetWidth, int widgetHeight)
|
||||
{
|
||||
if (!m_isHovered) {
|
||||
return false;
|
||||
}
|
||||
|
||||
int viewCubeSize = 150;
|
||||
int buttonSize = 24;
|
||||
int buttonMargin = 8;
|
||||
int viewCubeX = widgetWidth - viewCubeSize;
|
||||
int viewCubeY = 0;
|
||||
QRect homeButtonRect(viewCubeX - buttonMargin - buttonSize, viewCubeY, buttonSize, buttonSize);
|
||||
|
||||
return homeButtonRect.contains(pos);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user