Fix data type of collection
Fix warnings ../src/libslic3r/Emboss.cpp:135:24: warning: comparison of integer expressions of different signedness: 'int' and 'const unsigned int' [-Wsign-compare] ../src/libslic3r/Emboss.cpp:653:20: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare] ../src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp:2057:12: warning: unused variable 'count_icons' [-Wunused-variable] ../src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp:2058:12: warning: unused variable 'count_states' [-Wunused-variable]
This commit is contained in:
parent
0d724ad646
commit
6fdaee3cfe
8 changed files with 33 additions and 14 deletions
|
@ -130,7 +130,7 @@ std::optional<Emboss::Glyph> Private::get_glyph(
|
||||||
return glyph_item->second;
|
return glyph_item->second;
|
||||||
|
|
||||||
if (!font_info_opt.has_value()) {
|
if (!font_info_opt.has_value()) {
|
||||||
int font_index = font_prop.collection_number.has_value()?
|
unsigned int font_index = font_prop.collection_number.has_value()?
|
||||||
*font_prop.collection_number : 0;
|
*font_prop.collection_number : 0;
|
||||||
if (font_index >= font.count) return {};
|
if (font_index >= font.count) return {};
|
||||||
font_info_opt = Private::load_font_info(font.data->data(), font_index);
|
font_info_opt = Private::load_font_info(font.data->data(), font_index);
|
||||||
|
@ -648,7 +648,7 @@ void Emboss::apply_transformation(const FontProp &font_prop,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Emboss::is_italic(FontFile &font, int font_index)
|
bool Emboss::is_italic(FontFile &font, unsigned int font_index)
|
||||||
{
|
{
|
||||||
if (font_index >= font.count) return false;
|
if (font_index >= font.count) return false;
|
||||||
std::optional<stbtt_fontinfo> font_info_opt = Private::load_font_info(font.data->data(), font_index);
|
std::optional<stbtt_fontinfo> font_info_opt = Private::load_font_info(font.data->data(), font_index);
|
||||||
|
|
|
@ -168,7 +168,7 @@ public:
|
||||||
/// <param name="font">Selector of font</param>
|
/// <param name="font">Selector of font</param>
|
||||||
/// <param name="font_index">Index of font in collection</param>
|
/// <param name="font_index">Index of font in collection</param>
|
||||||
/// <returns>True when the font description contains italic/obligue otherwise False</returns>
|
/// <returns>True when the font description contains italic/obligue otherwise False</returns>
|
||||||
static bool is_italic(FontFile &font, int font_index = 0);
|
static bool is_italic(FontFile &font, unsigned int font_index);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Project 2d point into space
|
/// Project 2d point into space
|
||||||
|
|
|
@ -3365,7 +3365,7 @@ std::optional<TextConfiguration> TextConfigurationSerialization::read(const char
|
||||||
if (std::fabs(angle) > std::numeric_limits<float>::epsilon())
|
if (std::fabs(angle) > std::numeric_limits<float>::epsilon())
|
||||||
fp.angle = angle;
|
fp.angle = angle;
|
||||||
int collection_number = get_attribute_value_int(attributes, num_attributes, COLLECTION_NUMBER_ATTR);
|
int collection_number = get_attribute_value_int(attributes, num_attributes, COLLECTION_NUMBER_ATTR);
|
||||||
if (collection_number > 0) fp.collection_number = collection_number;
|
if (collection_number > 0) fp.collection_number = static_cast<unsigned int>(collection_number);
|
||||||
|
|
||||||
fp.size_in_mm = get_attribute_value_float(attributes, num_attributes, LINE_HEIGHT_ATTR);
|
fp.size_in_mm = get_attribute_value_float(attributes, num_attributes, LINE_HEIGHT_ATTR);
|
||||||
fp.emboss = get_attribute_value_float(attributes, num_attributes, DEPTH_ATTR);
|
fp.emboss = get_attribute_value_float(attributes, num_attributes, DEPTH_ATTR);
|
||||||
|
|
|
@ -45,7 +45,7 @@ struct FontProp
|
||||||
|
|
||||||
// Parameter for True Type Font collections
|
// Parameter for True Type Font collections
|
||||||
// Select index of font in collection
|
// Select index of font in collection
|
||||||
std::optional<int> collection_number;
|
std::optional<unsigned int> collection_number;
|
||||||
|
|
||||||
//enum class Align {
|
//enum class Align {
|
||||||
// left,
|
// left,
|
||||||
|
|
|
@ -1224,8 +1224,9 @@ void GLGizmoEmboss::draw_style_list() {
|
||||||
m_font_manager = FontManager(m_imgui->get_glyph_ranges());
|
m_font_manager = FontManager(m_imgui->get_glyph_ranges());
|
||||||
FontList font_list = create_default_font_list();
|
FontList font_list = create_default_font_list();
|
||||||
m_font_manager.add_fonts(font_list);
|
m_font_manager.add_fonts(font_list);
|
||||||
// TODO: What to do when default fonts are not loadable?
|
// TODO: What to do when NO one default font is loadable?
|
||||||
bool success = m_font_manager.load_first_valid_font();
|
bool success = m_font_manager.load_first_valid_font();
|
||||||
|
assert(success);
|
||||||
select_stored_font_item();
|
select_stored_font_item();
|
||||||
process();
|
process();
|
||||||
}else if (ImGui::IsItemHovered())
|
}else if (ImGui::IsItemHovered())
|
||||||
|
@ -1608,7 +1609,7 @@ void GLGizmoEmboss::draw_advanced()
|
||||||
", unitPerEm=" + std::to_string(font_file->unit_per_em) +
|
", unitPerEm=" + std::to_string(font_file->unit_per_em) +
|
||||||
", cache(" + std::to_string(cache_size) + " glyphs)";
|
", cache(" + std::to_string(cache_size) + " glyphs)";
|
||||||
if (font_file->count > 1) {
|
if (font_file->count > 1) {
|
||||||
int collection = font_prop.collection_number.has_value() ?
|
unsigned int collection = font_prop.collection_number.has_value() ?
|
||||||
*font_prop.collection_number : 0;
|
*font_prop.collection_number : 0;
|
||||||
ff_property += ", collect=" + std::to_string(collection+1) + "/" + std::to_string(font_file->count);
|
ff_property += ", collect=" + std::to_string(collection+1) + "/" + std::to_string(font_file->count);
|
||||||
}
|
}
|
||||||
|
@ -1821,8 +1822,10 @@ bool GLGizmoEmboss::choose_font_by_wxdialog()
|
||||||
}
|
}
|
||||||
|
|
||||||
// fix dynamic creation of italic font
|
// fix dynamic creation of italic font
|
||||||
|
const auto& cn = m_font_manager.get_font_prop().collection_number;
|
||||||
|
unsigned int font_collection = cn.has_value() ? *cn : 0;
|
||||||
if (WxFontUtils::is_italic(wx_font) &&
|
if (WxFontUtils::is_italic(wx_font) &&
|
||||||
!Emboss::is_italic(*m_font_manager.get_font_file())) {
|
!Emboss::is_italic(*m_font_manager.get_font_file(), font_collection)) {
|
||||||
m_font_manager.get_font_item().prop.skew = 0.2;
|
m_font_manager.get_font_item().prop.skew = 0.2;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -2053,9 +2056,6 @@ void GLGizmoEmboss::draw_icon(IconType icon, IconState state)
|
||||||
if ((icons_texture_id == 0) || (tex_width <= 1) || (tex_height <= 1))
|
if ((icons_texture_id == 0) || (tex_width <= 1) || (tex_height <= 1))
|
||||||
return;
|
return;
|
||||||
ImTextureID tex_id = (void *) (intptr_t) (GLuint) icons_texture_id;
|
ImTextureID tex_id = (void *) (intptr_t) (GLuint) icons_texture_id;
|
||||||
|
|
||||||
size_t count_icons = static_cast<size_t>(IconType::_count);
|
|
||||||
size_t count_states = 3; // activable | hovered | disabled
|
|
||||||
int start_x = static_cast<unsigned>(state) * (icon_width + 1) + 1,
|
int start_x = static_cast<unsigned>(state) * (icon_width + 1) + 1,
|
||||||
start_y = static_cast<unsigned>(icon) * (icon_width + 1) + 1;
|
start_y = static_cast<unsigned>(icon) * (icon_width + 1) + 1;
|
||||||
|
|
||||||
|
|
|
@ -50,6 +50,18 @@ bool FontListSerializable::read(const std::map<std::string, std::string>& sectio
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool FontListSerializable::read(const std::map<std::string, std::string>& section, const std::string& key, std::optional<unsigned int>& value){
|
||||||
|
auto item = section.find(key);
|
||||||
|
if (item == section.end()) return false;
|
||||||
|
const std::string &data = item->second;
|
||||||
|
if (data.empty()) return false;
|
||||||
|
int value_ = std::atoi(data.c_str());
|
||||||
|
if (value_ <= 0) return false;
|
||||||
|
|
||||||
|
value = static_cast<unsigned int>(value_);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool FontListSerializable::read(const std::map<std::string, std::string>& section, const std::string& key, std::optional<float>& value){
|
bool FontListSerializable::read(const std::map<std::string, std::string>& section, const std::string& key, std::optional<float>& value){
|
||||||
auto item = section.find(key);
|
auto item = section.find(key);
|
||||||
if (item == section.end()) return false;
|
if (item == section.end()) return false;
|
||||||
|
|
|
@ -39,6 +39,7 @@ private:
|
||||||
// TODO: move to app config like read from section
|
// TODO: move to app config like read from section
|
||||||
static bool read(const std::map<std::string, std::string>& section, const std::string& key, float& value);
|
static bool read(const std::map<std::string, std::string>& section, const std::string& key, float& value);
|
||||||
static bool read(const std::map<std::string, std::string>& section, const std::string& key, std::optional<int>& value);
|
static bool read(const std::map<std::string, std::string>& section, const std::string& key, std::optional<int>& value);
|
||||||
|
static bool read(const std::map<std::string, std::string>& section, const std::string& key, std::optional<unsigned int>& value);
|
||||||
static bool read(const std::map<std::string, std::string>& section, const std::string& key, std::optional<float>& value);
|
static bool read(const std::map<std::string, std::string>& section, const std::string& key, std::optional<float>& value);
|
||||||
};
|
};
|
||||||
} // namespace Slic3r
|
} // namespace Slic3r
|
||||||
|
|
|
@ -104,7 +104,6 @@ std::string get_font_filepath() {
|
||||||
TEST_CASE("Read glyph C shape from font, stb library calls ONLY", "[Emboss]") {
|
TEST_CASE("Read glyph C shape from font, stb library calls ONLY", "[Emboss]") {
|
||||||
std::string font_path = get_font_filepath();
|
std::string font_path = get_font_filepath();
|
||||||
char letter = 'C';
|
char letter = 'C';
|
||||||
float flatness = 2.;
|
|
||||||
|
|
||||||
// Read font file
|
// Read font file
|
||||||
FILE *file = fopen(font_path.c_str(), "rb");
|
FILE *file = fopen(font_path.c_str(), "rb");
|
||||||
|
@ -221,13 +220,16 @@ TEST_CASE("triangle intersection", "[]")
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
namespace fs = std::filesystem;
|
namespace fs = std::filesystem;
|
||||||
TEST_CASE("Italic check", "[]")
|
// Check function Emboss::is_italic that exist some italic and some non-italic font.
|
||||||
|
TEST_CASE("Italic check", "[Emboss]")
|
||||||
{
|
{
|
||||||
std::queue<std::string> dir_paths;
|
std::queue<std::string> dir_paths;
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
dir_paths.push("C:/Windows/Fonts");
|
dir_paths.push("C:/Windows/Fonts");
|
||||||
#elif defined(__linux__)
|
#elif defined(__linux__)
|
||||||
dir_paths.push("/usr/share/fonts");
|
dir_paths.push("/usr/share/fonts");
|
||||||
|
//#elif defined(__APPLE__)
|
||||||
|
// dir_paths.push("//System/Library/Fonts");
|
||||||
#endif
|
#endif
|
||||||
bool exist_italic = false;
|
bool exist_italic = false;
|
||||||
bool exist_non_italic = false;
|
bool exist_non_italic = false;
|
||||||
|
@ -247,10 +249,14 @@ TEST_CASE("Italic check", "[]")
|
||||||
std::string path_str = act_path.u8string();
|
std::string path_str = act_path.u8string();
|
||||||
auto font_opt = Emboss::create_font_file(path_str.c_str());
|
auto font_opt = Emboss::create_font_file(path_str.c_str());
|
||||||
if (font_opt == nullptr) continue;
|
if (font_opt == nullptr) continue;
|
||||||
if (Emboss::is_italic(*font_opt))
|
|
||||||
|
unsigned int collection_number = 0;
|
||||||
|
if (Emboss::is_italic(*font_opt, collection_number))
|
||||||
exist_italic = true;
|
exist_italic = true;
|
||||||
else
|
else
|
||||||
exist_non_italic = true;
|
exist_non_italic = true;
|
||||||
|
|
||||||
|
if (exist_italic && exist_non_italic) break;
|
||||||
//std::cout << ((Emboss::is_italic(*font_opt)) ? "[yes] " : "[no ] ") << entry.path() << std::endl;
|
//std::cout << ((Emboss::is_italic(*font_opt)) ? "[yes] " : "[no ] ") << entry.path() << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue