Moved DrawBackground to lcGLWidget.

This commit is contained in:
Leonardo Zide 2020-11-26 12:07:41 -08:00
parent ef2220ffdc
commit 9e12b480ce
9 changed files with 122 additions and 122 deletions

116
common/lc_glwidget.cpp Normal file
View file

@ -0,0 +1,116 @@
#include "lc_global.h"
#include "lc_glwidget.h"
#include "lc_application.h"
void lcGLWidget::MakeCurrent()
{
mWidget->makeCurrent();
}
void lcGLWidget::Redraw()
{
mWidget->update();
}
void lcGLWidget::SetCursor(lcCursor CursorType)
{
if (mCursor == CursorType)
return;
struct lcCursorInfo
{
int x, y;
const char* Name;
};
const lcCursorInfo Cursors[] =
{
{ 0, 0, "" }, // lcCursor::Default
{ 8, 3, ":/resources/cursor_insert" }, // lcCursor::Brick
{ 15, 15, ":/resources/cursor_light" }, // lcCursor::Light
{ 7, 10, ":/resources/cursor_spotlight" }, // lcCursor::Spotlight
{ 15, 9, ":/resources/cursor_camera" }, // lcCursor::Camera
{ 0, 2, ":/resources/cursor_select" }, // lcCursor::Select
{ 0, 2, ":/resources/cursor_select_add" }, // lcCursor::SelectAdd
{ 0, 2, ":/resources/cursor_select_remove" }, // lcCursor::SelectRemove
{ 15, 15, ":/resources/cursor_move" }, // lcCursor::Move
{ 15, 15, ":/resources/cursor_rotate" }, // lcCursor::Rotate
{ 15, 15, ":/resources/cursor_rotatex" }, // lcCursor::RotateX
{ 15, 15, ":/resources/cursor_rotatey" }, // lcCursor::RotateY
{ 0, 10, ":/resources/cursor_delete" }, // lcCursor::Delete
{ 14, 14, ":/resources/cursor_paint" }, // lcCursor::Paint
{ 1, 13, ":/resources/cursor_color_picker" }, // lcCursor::ColorPicker
{ 15, 15, ":/resources/cursor_zoom" }, // lcCursor::Zoom
{ 9, 9, ":/resources/cursor_zoom_region" }, // lcCursor::ZoomRegion
{ 15, 15, ":/resources/cursor_pan" }, // lcCursor::Pan
{ 15, 15, ":/resources/cursor_roll" }, // lcCursor::Roll
{ 15, 15, ":/resources/cursor_rotate_view" }, // lcCursor::RotateView
};
static_assert(LC_ARRAY_COUNT(Cursors) == static_cast<int>(lcCursor::Count), "Array size mismatch");
QGLWidget* widget = (QGLWidget*)mWidget;
if (CursorType > lcCursor::Default && CursorType < lcCursor::Count)
{
const lcCursorInfo& Cursor = Cursors[static_cast<int>(CursorType)];
widget->setCursor(QCursor(QPixmap(Cursor.Name), Cursor.x, Cursor.y));
mCursor = CursorType;
}
else
{
widget->unsetCursor();
mCursor = lcCursor::Default;
}
}
void lcGLWidget::DrawBackground() const
{
const lcPreferences& Preferences = lcGetPreferences();
if (!Preferences.mBackgroundGradient)
{
lcVector3 BackgroundColor = lcVector3FromColor(Preferences.mBackgroundSolidColor);
glClearColor(BackgroundColor[0], BackgroundColor[1], BackgroundColor[2], 0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
return;
}
lcContext* Context = mContext;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Context->SetDepthWrite(false);
glDisable(GL_DEPTH_TEST);
float ViewWidth = (float)mWidth;
float ViewHeight = (float)mHeight;
Context->SetWorldMatrix(lcMatrix44Identity());
Context->SetViewMatrix(lcMatrix44Translation(lcVector3(0.375, 0.375, 0.0)));
Context->SetProjectionMatrix(lcMatrix44Ortho(0.0f, ViewWidth, 0.0f, ViewHeight, -1.0f, 1.0f));
Context->SetSmoothShading(true);
const lcVector3 Color1 = lcVector3FromColor(Preferences.mBackgroundGradientColorTop);
const lcVector3 Color2 = lcVector3FromColor(Preferences.mBackgroundGradientColorBottom);
float Verts[] =
{
ViewWidth, ViewHeight, Color1[0], Color1[1], Color1[2], 1.0f,
0.0f, ViewHeight, Color1[0], Color1[1], Color1[2], 1.0f,
0.0f, 0.0f, Color2[0], Color2[1], Color2[2], 1.0f,
ViewWidth, 0.0f, Color2[0], Color2[1], Color2[2], 1.0f
};
Context->SetMaterial(lcMaterialType::UnlitVertexColor);
Context->SetVertexBufferPointer(Verts);
Context->SetVertexFormat(0, 2, 0, 0, 4, false);
Context->DrawPrimitives(GL_TRIANGLE_FAN, 0, 4);
Context->SetSmoothShading(false);
glEnable(GL_DEPTH_TEST);
Context->SetDepthWrite(true);
}

View file

@ -75,6 +75,7 @@ public:
void MakeCurrent(); void MakeCurrent();
void Redraw(); void Redraw();
void SetCursor(lcCursor Cursor); void SetCursor(lcCursor Cursor);
void DrawBackground() const;
virtual void OnDraw() { } virtual void OnDraw() { }
virtual void OnInitialUpdate() { } virtual void OnInitialUpdate() { }
@ -100,7 +101,7 @@ public:
int mWidth; int mWidth;
int mHeight; int mHeight;
lcCursor mCursor; lcCursor mCursor;
void* mWidget; QGLWidget* mWidget;
lcContext* mContext; lcContext* mContext;
bool mDeleteContext; bool mDeleteContext;
}; };

View file

@ -1257,57 +1257,6 @@ void lcModel::AddSubModelRenderMeshes(lcScene& Scene, const lcMatrix44& WorldMat
Piece->AddSubModelRenderMeshes(Scene, WorldMatrix, DefaultColorIndex, RenderMeshState, ParentActive); Piece->AddSubModelRenderMeshes(Scene, WorldMatrix, DefaultColorIndex, RenderMeshState, ParentActive);
} }
void lcModel::DrawBackground(lcGLWidget* Widget)
{
const lcPreferences& Preferences = lcGetPreferences();
if (!Preferences.mBackgroundGradient)
{
lcVector3 BackgroundColor = lcVector3FromColor(Preferences.mBackgroundSolidColor);
glClearColor(BackgroundColor[0], BackgroundColor[1], BackgroundColor[2], 0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
return;
}
lcContext* Context = Widget->mContext;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Context->SetDepthWrite(false);
glDisable(GL_DEPTH_TEST);
float ViewWidth = (float)Widget->mWidth;
float ViewHeight = (float)Widget->mHeight;
Context->SetWorldMatrix(lcMatrix44Identity());
Context->SetViewMatrix(lcMatrix44Translation(lcVector3(0.375, 0.375, 0.0)));
Context->SetProjectionMatrix(lcMatrix44Ortho(0.0f, ViewWidth, 0.0f, ViewHeight, -1.0f, 1.0f));
Context->SetSmoothShading(true);
const lcVector3 Color1 = lcVector3FromColor(Preferences.mBackgroundGradientColorTop);
const lcVector3 Color2 = lcVector3FromColor(Preferences.mBackgroundGradientColorBottom);
float Verts[] =
{
ViewWidth, ViewHeight, Color1[0], Color1[1], Color1[2], 1.0f,
0.0f, ViewHeight, Color1[0], Color1[1], Color1[2], 1.0f,
0.0f, 0.0f, Color2[0], Color2[1], Color2[2], 1.0f,
ViewWidth, 0.0f, Color2[0], Color2[1], Color2[2], 1.0f
};
Context->SetMaterial(lcMaterialType::UnlitVertexColor);
Context->SetVertexBufferPointer(Verts);
Context->SetVertexFormat(0, 2, 0, 0, 4, false);
Context->DrawPrimitives(GL_TRIANGLE_FAN, 0, 4);
Context->SetSmoothShading(false);
glEnable(GL_DEPTH_TEST);
Context->SetDepthWrite(true);
}
QImage lcModel::GetStepImage(bool Zoom, int Width, int Height, lcStep Step) QImage lcModel::GetStepImage(bool Zoom, int Width, int Height, lcStep Step)
{ {
View* ActiveView = gMainWindow->GetActiveView(); View* ActiveView = gMainWindow->GetActiveView();

View file

@ -236,7 +236,6 @@ public:
void GetScene(lcScene& Scene, lcCamera* ViewCamera, bool AllowHighlight, bool AllowFade) const; void GetScene(lcScene& Scene, lcCamera* ViewCamera, bool AllowHighlight, bool AllowFade) const;
void AddSubModelRenderMeshes(lcScene& Scene, const lcMatrix44& WorldMatrix, int DefaultColorIndex, lcRenderMeshState RenderMeshState, bool ParentActive) const; void AddSubModelRenderMeshes(lcScene& Scene, const lcMatrix44& WorldMatrix, int DefaultColorIndex, lcRenderMeshState RenderMeshState, bool ParentActive) const;
void DrawBackground(lcGLWidget* Widget);
QImage GetStepImage(bool Zoom, int Width, int Height, lcStep Step); QImage GetStepImage(bool Zoom, int Width, int Height, lcStep Step);
QImage GetPartsListImage(int MaxWidth, lcStep Step) const; QImage GetPartsListImage(int MaxWidth, lcStep Step) const;
void SaveStepImages(const QString& BaseName, bool AddStepSuffix, bool Zoom, int Width, int Height, lcStep Start, lcStep End); void SaveStepImages(const QString& BaseName, bool AddStepSuffix, bool Zoom, int Width, int Height, lcStep Start, lcStep End);

View file

@ -495,7 +495,7 @@ void lcPreviewWidget::OnDraw()
mContext->SetViewport(0, 0, mWidth, mHeight); mContext->SetViewport(0, 0, mWidth, mHeight);
mModel->DrawBackground(this); DrawBackground();
mContext->SetProjectionMatrix(GetProjectionMatrix()); mContext->SetProjectionMatrix(GetProjectionMatrix());

View file

@ -326,7 +326,7 @@ void MinifigWizard::OnDraw()
const float Aspect = (float)mWidth/(float)mHeight; const float Aspect = (float)mWidth/(float)mHeight;
mContext->SetViewport(0, 0, mWidth, mHeight); mContext->SetViewport(0, 0, mWidth, mHeight);
lcGetActiveModel()->DrawBackground(this); DrawBackground();
lcVector3 Min(FLT_MAX, FLT_MAX, FLT_MAX), Max(-FLT_MAX, -FLT_MAX, -FLT_MAX); lcVector3 Min(FLT_MAX, FLT_MAX, FLT_MAX), Max(-FLT_MAX, -FLT_MAX, -FLT_MAX);

View file

@ -864,7 +864,7 @@ void View::OnDraw()
mContext->SetDefaultState(); mContext->SetDefaultState();
mContext->SetViewport(0, 0, mWidth, mHeight); mContext->SetViewport(0, 0, mWidth, mHeight);
mModel->DrawBackground(this); DrawBackground();
int CurrentTileWidth, CurrentTileHeight; int CurrentTileWidth, CurrentTileHeight;

View file

@ -187,6 +187,7 @@ SOURCES += common/view.cpp \
common/lc_context.cpp \ common/lc_context.cpp \
common/lc_file.cpp \ common/lc_file.cpp \
common/lc_glextensions.cpp \ common/lc_glextensions.cpp \
common/lc_glwidget.cpp \
common/lc_http.cpp \ common/lc_http.cpp \
common/lc_library.cpp \ common/lc_library.cpp \
common/lc_lxf.cpp \ common/lc_lxf.cpp \

View file

@ -19,72 +19,6 @@
static QList<QGLWidget*> gWidgetList; static QList<QGLWidget*> gWidgetList;
void lcGLWidget::MakeCurrent()
{
QGLWidget* Widget = (QGLWidget*)mWidget;
Widget->makeCurrent();
}
void lcGLWidget::Redraw()
{
lcQGLWidget* Widget = (lcQGLWidget*)mWidget;
Widget->update();
}
void lcGLWidget::SetCursor(lcCursor CursorType)
{
if (mCursor == CursorType)
return;
struct lcCursorInfo
{
int x, y;
const char* Name;
};
const lcCursorInfo Cursors[] =
{
{ 0, 0, "" }, // lcCursor::Default
{ 8, 3, ":/resources/cursor_insert" }, // lcCursor::Brick
{ 15, 15, ":/resources/cursor_light" }, // lcCursor::Light
{ 7, 10, ":/resources/cursor_spotlight" }, // lcCursor::Spotlight
{ 15, 9, ":/resources/cursor_camera" }, // lcCursor::Camera
{ 0, 2, ":/resources/cursor_select" }, // lcCursor::Select
{ 0, 2, ":/resources/cursor_select_add" }, // lcCursor::SelectAdd
{ 0, 2, ":/resources/cursor_select_remove" }, // lcCursor::SelectRemove
{ 15, 15, ":/resources/cursor_move" }, // lcCursor::Move
{ 15, 15, ":/resources/cursor_rotate" }, // lcCursor::Rotate
{ 15, 15, ":/resources/cursor_rotatex" }, // lcCursor::RotateX
{ 15, 15, ":/resources/cursor_rotatey" }, // lcCursor::RotateY
{ 0, 10, ":/resources/cursor_delete" }, // lcCursor::Delete
{ 14, 14, ":/resources/cursor_paint" }, // lcCursor::Paint
{ 1, 13, ":/resources/cursor_color_picker" }, // lcCursor::ColorPicker
{ 15, 15, ":/resources/cursor_zoom" }, // lcCursor::Zoom
{ 9, 9, ":/resources/cursor_zoom_region" }, // lcCursor::ZoomRegion
{ 15, 15, ":/resources/cursor_pan" }, // lcCursor::Pan
{ 15, 15, ":/resources/cursor_roll" }, // lcCursor::Roll
{ 15, 15, ":/resources/cursor_rotate_view" }, // lcCursor::RotateView
};
static_assert(LC_ARRAY_COUNT(Cursors) == static_cast<int>(lcCursor::Count), "Array size mismatch");
QGLWidget* widget = (QGLWidget*)mWidget;
if (CursorType != lcCursor::Default && CursorType < lcCursor::Count)
{
const lcCursorInfo& Cursor = Cursors[static_cast<int>(CursorType)];
widget->setCursor(QCursor(QPixmap(Cursor.Name), Cursor.x, Cursor.y));
mCursor = CursorType;
}
else
{
widget->unsetCursor();
mCursor = lcCursor::Default;
}
}
lcQGLWidget::lcQGLWidget(QWidget* Parent, lcGLWidget* Owner) lcQGLWidget::lcQGLWidget(QWidget* Parent, lcGLWidget* Owner)
: QGLWidget(Parent, gWidgetList.isEmpty() ? nullptr : gWidgetList.first()) : QGLWidget(Parent, gWidgetList.isEmpty() ? nullptr : gWidgetList.first())
{ {