From e234973ab449bfcc6414c34a597122bd1cf0a168 Mon Sep 17 00:00:00 2001 From: Enrico Turri <enricoturri@seznam.cz> Date: Tue, 31 Jul 2018 14:20:16 +0200 Subject: [PATCH] Warning texture use square power of two image and bigger font size --- xs/src/slic3r/GUI/GLCanvas3D.cpp | 132 ++++++++++++++++++++++++------- xs/src/slic3r/GUI/GLCanvas3D.hpp | 16 ++++ 2 files changed, 120 insertions(+), 28 deletions(-) diff --git a/xs/src/slic3r/GUI/GLCanvas3D.cpp b/xs/src/slic3r/GUI/GLCanvas3D.cpp index 736f6431d..f60fead3d 100644 --- a/xs/src/slic3r/GUI/GLCanvas3D.cpp +++ b/xs/src/slic3r/GUI/GLCanvas3D.cpp @@ -1467,6 +1467,25 @@ float GLCanvas3D::Gizmos::_get_total_overlay_height() const const unsigned char GLCanvas3D::WarningTexture::Background_Color[3] = { 9, 91, 134 }; const unsigned char GLCanvas3D::WarningTexture::Opacity = 255; +//############################################################################################################################################ +GLCanvas3D::WarningTexture::WarningTexture() + : GUI::GLTexture() + , m_original_width(0) + , m_original_height(0) +{ +} + +int GLCanvas3D::WarningTexture::get_original_width() const +{ + return m_original_width; +} + +int GLCanvas3D::WarningTexture::get_original_height() const +{ + return m_original_height; +} +//############################################################################################################################################ + bool GLCanvas3D::WarningTexture::generate(const std::string& msg) { reset(); @@ -1476,13 +1495,30 @@ bool GLCanvas3D::WarningTexture::generate(const std::string& msg) wxMemoryDC memDC; // select default font - memDC.SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); +//############################################################################################################################################ + wxFont font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); + font.MakeLarger(); + memDC.SetFont(font); + +// memDC.SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); +//############################################################################################################################################ // calculates texture size wxCoord w, h; memDC.GetTextExtent(msg, &w, &h); - m_width = (int)w; - m_height = (int)h; + +//############################################################################################################################################ + int pow_of_two_size = next_highest_power_of_2((int)std::max(w, h)); +//############################################################################################################################################ + +//############################################################################################################################################ + m_original_width = (int)w; + m_original_height = (int)h; + m_width = pow_of_two_size; + m_height = pow_of_two_size; +// m_width = (int)w; +// m_height = (int)h; +//############################################################################################################################################ // generates bitmap wxBitmap bitmap(m_width, m_height); @@ -1534,6 +1570,42 @@ bool GLCanvas3D::WarningTexture::generate(const std::string& msg) return true; } +//############################################################################################################################################ +void GLCanvas3D::WarningTexture::render(const GLCanvas3D& canvas) const +{ + if ((m_id > 0) && (m_original_width > 0) && (m_original_height > 0)) + { + ::glDisable(GL_DEPTH_TEST); + ::glPushMatrix(); + ::glLoadIdentity(); + + const Size& cnv_size = canvas.get_canvas_size(); + float zoom = canvas.get_camera_zoom(); + float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f; + float left = (-0.5f * (float)m_original_width) * inv_zoom; + float top = (-0.5f * (float)cnv_size.get_height() + (float)m_original_height + 2.0f) * inv_zoom; + float right = left + (float)m_original_width * inv_zoom; + float bottom = top - (float)m_original_height * inv_zoom; + + float uv_left = 0.0f; + float uv_top = 0.0f; + float uv_right = (float)m_original_width / (float)m_width; + float uv_bottom = (float)m_original_height / (float)m_height; + + GLTexture::Quad_UVs uvs; + uvs.left_top = { uv_left, uv_top }; + uvs.left_bottom = { uv_left, uv_bottom }; + uvs.right_bottom = { uv_right, uv_bottom }; + uvs.right_top = { uv_right, uv_top }; + + GLTexture::render_sub_texture(m_id, left, right, bottom, top, uvs); + + ::glPopMatrix(); + ::glEnable(GL_DEPTH_TEST); + } +} +//############################################################################################################################################ + const unsigned char GLCanvas3D::LegendTexture::Squares_Border_Color[3] = { 64, 64, 64 }; const unsigned char GLCanvas3D::LegendTexture::Background_Color[3] = { 9, 91, 134 }; const unsigned char GLCanvas3D::LegendTexture::Opacity = 255; @@ -3879,32 +3951,36 @@ void GLCanvas3D::_render_warning_texture() const if (!m_warning_texture_enabled) return; - // If the warning texture has not been loaded into the GPU, do it now. - unsigned int tex_id = m_warning_texture.get_id(); - if (tex_id > 0) - { - int w = m_warning_texture.get_width(); - int h = m_warning_texture.get_height(); - if ((w > 0) && (h > 0)) - { - ::glDisable(GL_DEPTH_TEST); - ::glPushMatrix(); - ::glLoadIdentity(); +//############################################################################################################################################ + m_warning_texture.render(*this); - const Size& cnv_size = get_canvas_size(); - float zoom = get_camera_zoom(); - float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f; - float l = (-0.5f * (float)w) * inv_zoom; - float t = (-0.5f * (float)cnv_size.get_height() + (float)h) * inv_zoom; - float r = l + (float)w * inv_zoom; - float b = t - (float)h * inv_zoom; - - GLTexture::render_texture(tex_id, l, r, b, t); - - ::glPopMatrix(); - ::glEnable(GL_DEPTH_TEST); - } - } +// // If the warning texture has not been loaded into the GPU, do it now. +// unsigned int tex_id = m_warning_texture.get_id(); +// if (tex_id > 0) +// { +// int w = m_warning_texture.get_width(); +// int h = m_warning_texture.get_height(); +// if ((w > 0) && (h > 0)) +// { +// ::glDisable(GL_DEPTH_TEST); +// ::glPushMatrix(); +// ::glLoadIdentity(); +// +// const Size& cnv_size = get_canvas_size(); +// float zoom = get_camera_zoom(); +// float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f; +// float l = (-0.5f * (float)w) * inv_zoom; +// float t = (-0.5f * (float)cnv_size.get_height() + (float)h) * inv_zoom; +// float r = l + (float)w * inv_zoom; +// float b = t - (float)h * inv_zoom; +// +// GLTexture::render_texture(tex_id, l, r, b, t); +// +// ::glPopMatrix(); +// ::glEnable(GL_DEPTH_TEST); +// } +// } +//############################################################################################################################################ } void GLCanvas3D::_render_legend_texture() const diff --git a/xs/src/slic3r/GUI/GLCanvas3D.hpp b/xs/src/slic3r/GUI/GLCanvas3D.hpp index b026acd13..51aaca107 100644 --- a/xs/src/slic3r/GUI/GLCanvas3D.hpp +++ b/xs/src/slic3r/GUI/GLCanvas3D.hpp @@ -402,8 +402,24 @@ public: static const unsigned char Background_Color[3]; static const unsigned char Opacity; +//############################################################################################################################################ + int m_original_width; + int m_original_height; +//############################################################################################################################################ + public: +//############################################################################################################################################ + WarningTexture(); + + int get_original_width() const; + int get_original_height() const; +//############################################################################################################################################ + bool generate(const std::string& msg); + +//############################################################################################################################################ + void render(const GLCanvas3D& canvas) const; +//############################################################################################################################################ }; class LegendTexture : public GUI::GLTexture