mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-16 04:45:58 +08:00
fix style 'save as' operation + 'rename'
This commit is contained in:
parent
569ba0600c
commit
26eb8b02ef
@ -647,13 +647,13 @@ void GLGizmoEmboss::initialize()
|
|||||||
float line_height_with_spacing = ImGui::GetTextLineHeightWithSpacing();
|
float line_height_with_spacing = ImGui::GetTextLineHeightWithSpacing();
|
||||||
float space = line_height_with_spacing - line_height;
|
float space = line_height_with_spacing - line_height;
|
||||||
|
|
||||||
cfg.max_font_name_width = ImGui::CalcTextSize("Maximal font name, extended").x;
|
cfg.max_style_name_width = ImGui::CalcTextSize("Maximal font name, extended").x;
|
||||||
|
|
||||||
cfg.icon_width = std::ceil(line_height);
|
cfg.icon_width = std::ceil(line_height);
|
||||||
// make size pair number
|
// make size pair number
|
||||||
if (cfg.icon_width % 2 != 0) ++cfg.icon_width;
|
if (cfg.icon_width % 2 != 0) ++cfg.icon_width;
|
||||||
|
|
||||||
cfg.delete_pos_x = cfg.max_font_name_width + space;
|
cfg.delete_pos_x = cfg.max_style_name_width + space;
|
||||||
int count_line_of_text = 3;
|
int count_line_of_text = 3;
|
||||||
cfg.text_size = ImVec2(-FLT_MIN, line_height_with_spacing * count_line_of_text);
|
cfg.text_size = ImVec2(-FLT_MIN, line_height_with_spacing * count_line_of_text);
|
||||||
ImVec2 letter_m_size = ImGui::CalcTextSize("M");
|
ImVec2 letter_m_size = ImGui::CalcTextSize("M");
|
||||||
@ -718,9 +718,9 @@ void GLGizmoEmboss::initialize()
|
|||||||
ImVec2(cfg.minimal_window_size.x,
|
ImVec2(cfg.minimal_window_size.x,
|
||||||
cfg.minimal_window_size.y + advance_height);
|
cfg.minimal_window_size.y + advance_height);
|
||||||
|
|
||||||
int max_style_image_width = cfg.max_font_name_width -
|
int max_style_image_width = cfg.max_style_name_width /2 -
|
||||||
2 * style.FramePadding.x;
|
2 * style.FramePadding.x;
|
||||||
int max_style_image_height = 2 * input_height;
|
int max_style_image_height = 1.5 * input_height;
|
||||||
cfg.max_style_image_size = Vec2i(max_style_image_width, max_style_image_height);
|
cfg.max_style_image_size = Vec2i(max_style_image_width, max_style_image_height);
|
||||||
cfg.face_name_size.y() = line_height_with_spacing;
|
cfg.face_name_size.y() = line_height_with_spacing;
|
||||||
|
|
||||||
@ -1322,7 +1322,7 @@ void GLGizmoEmboss::draw_font_list()
|
|||||||
auto& worker = wxGetApp().plater()->get_ui_job_worker();
|
auto& worker = wxGetApp().plater()->get_ui_job_worker();
|
||||||
queue_job(worker, std::move(job));
|
queue_job(worker, std::move(job));
|
||||||
}
|
}
|
||||||
ImGui::SameLine(m_gui_cfg->face_name_offset);
|
ImGui::SameLine(m_gui_cfg->face_name_max_width);
|
||||||
ImVec2 size(m_gui_cfg->face_name_size.x(),
|
ImVec2 size(m_gui_cfg->face_name_size.x(),
|
||||||
m_gui_cfg->face_name_size.y()),
|
m_gui_cfg->face_name_size.y()),
|
||||||
uv0(0.f, index / (float) m_face_names.names.size()),
|
uv0(0.f, index / (float) m_face_names.names.size()),
|
||||||
@ -1460,7 +1460,7 @@ void GLGizmoEmboss::draw_model_type()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLGizmoEmboss::draw_rename_popup() {
|
void GLGizmoEmboss::draw_style_rename_popup() {
|
||||||
std::string& new_name = m_style_manager.get_font_item().name;
|
std::string& new_name = m_style_manager.get_font_item().name;
|
||||||
const std::string &old_name = m_style_manager.get_stored_font_item()->name;
|
const std::string &old_name = m_style_manager.get_stored_font_item()->name;
|
||||||
std::string text_in_popup = GUI::format(_u8L("Rename style(%1%) for embossing text: "), old_name);
|
std::string text_in_popup = GUI::format(_u8L("Rename style(%1%) for embossing text: "), old_name);
|
||||||
@ -1486,12 +1486,7 @@ void GLGizmoEmboss::draw_rename_popup() {
|
|||||||
bool store = false;
|
bool store = false;
|
||||||
ImGuiInputTextFlags flags = ImGuiInputTextFlags_EnterReturnsTrue;
|
ImGuiInputTextFlags flags = ImGuiInputTextFlags_EnterReturnsTrue;
|
||||||
if (ImGui::InputText("##rename style", &new_name, flags) && allow_change) store = true;
|
if (ImGui::InputText("##rename style", &new_name, flags) && allow_change) store = true;
|
||||||
|
|
||||||
static bool rename_in_volumes = true;
|
|
||||||
ImGui::Checkbox(_u8L("Rename style in scene volumes.").c_str(), &rename_in_volumes);
|
|
||||||
|
|
||||||
if (m_imgui->button(_L("ok"), ImVec2(0.f, 0.f), allow_change)) store = true;
|
if (m_imgui->button(_L("ok"), ImVec2(0.f, 0.f), allow_change)) store = true;
|
||||||
|
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (ImGui::Button(_u8L("cancel").c_str())) {
|
if (ImGui::Button(_u8L("cancel").c_str())) {
|
||||||
new_name = old_name;
|
new_name = old_name;
|
||||||
@ -1499,7 +1494,6 @@ void GLGizmoEmboss::draw_rename_popup() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (store) {
|
if (store) {
|
||||||
if (rename_in_volumes) {
|
|
||||||
// rename style in all objects and volumes
|
// rename style in all objects and volumes
|
||||||
for (ModelObject *mo :wxGetApp().plater()->model().objects) {
|
for (ModelObject *mo :wxGetApp().plater()->model().objects) {
|
||||||
for (ModelVolume *mv : mo->volumes) {
|
for (ModelVolume *mv : mo->volumes) {
|
||||||
@ -1509,7 +1503,7 @@ void GLGizmoEmboss::draw_rename_popup() {
|
|||||||
name = new_name;
|
name = new_name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
m_style_manager.rename(new_name);
|
m_style_manager.rename(new_name);
|
||||||
m_style_manager.store_font_list_to_app_config(wxGetApp().app_config);
|
m_style_manager.store_font_list_to_app_config(wxGetApp().app_config);
|
||||||
ImGui::CloseCurrentPopup();
|
ImGui::CloseCurrentPopup();
|
||||||
@ -1530,7 +1524,7 @@ void GLGizmoEmboss::draw_style_rename_button()
|
|||||||
else ImGui::SetTooltip("%s", _u8L("Can't rename temporary style.").c_str());
|
else ImGui::SetTooltip("%s", _u8L("Can't rename temporary style.").c_str());
|
||||||
}
|
}
|
||||||
if (ImGui::BeginPopupModal(popup_id, 0, ImGuiWindowFlags_AlwaysAutoResize)) {
|
if (ImGui::BeginPopupModal(popup_id, 0, ImGuiWindowFlags_AlwaysAutoResize)) {
|
||||||
draw_rename_popup();
|
draw_style_rename_popup();
|
||||||
ImGui::EndPopup();
|
ImGui::EndPopup();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1548,12 +1542,14 @@ void GLGizmoEmboss::draw_style_save_button()
|
|||||||
bool is_style_order_changed = m_style_manager.is_style_order_changed();
|
bool is_style_order_changed = m_style_manager.is_style_order_changed();
|
||||||
bool is_activ_style_changed = m_style_manager.is_activ_style_changed();
|
bool is_activ_style_changed = m_style_manager.is_activ_style_changed();
|
||||||
bool can_save = is_changed || is_style_order_changed || is_activ_style_changed;
|
bool can_save = is_changed || is_style_order_changed || is_activ_style_changed;
|
||||||
|
if (!is_stored_style) can_save = false;
|
||||||
|
|
||||||
if (draw_button(IconType::save, !can_save)) {
|
if (draw_button(IconType::save, !can_save)) {
|
||||||
// save styles to app config
|
// save styles to app config
|
||||||
m_style_manager.store_font_list_to_app_config(wxGetApp().app_config);
|
m_style_manager.store_font_list_to_app_config(wxGetApp().app_config);
|
||||||
}else if (ImGui::IsItemHovered()) {
|
}else if (ImGui::IsItemHovered()) {
|
||||||
if (!is_stored_style) {
|
if (!is_stored_style) {
|
||||||
ImGui::SetTooltip("%s", _u8L("Add style to be able save.").c_str());
|
ImGui::SetTooltip("%s", _u8L("First Add style to be able save.").c_str());
|
||||||
} else if (is_changed) {
|
} else if (is_changed) {
|
||||||
ImGui::SetTooltip("%s", _u8L("Save changes into style.").c_str());
|
ImGui::SetTooltip("%s", _u8L("Save changes into style.").c_str());
|
||||||
} else if (is_style_order_changed) {
|
} else if (is_style_order_changed) {
|
||||||
@ -1566,39 +1562,12 @@ void GLGizmoEmboss::draw_style_save_button()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLGizmoEmboss::draw_style_save_as_button()
|
void GLGizmoEmboss::draw_style_save_as_popup() {
|
||||||
{
|
|
||||||
bool start_save_as = false;
|
|
||||||
bool only_add_style = !m_style_manager.exist_stored_style();
|
|
||||||
// save as new style
|
|
||||||
ImGui::SameLine();
|
|
||||||
if (draw_button(IconType::duplicate)) {
|
|
||||||
if (!m_style_manager.exist_stored_style()) {
|
|
||||||
m_style_manager.store_font_list_to_app_config(wxGetApp().app_config);
|
|
||||||
} else {
|
|
||||||
start_save_as = true;
|
|
||||||
}
|
|
||||||
//m_style_manager.store_font_list_to_app_config(wxGetApp().app_config);
|
|
||||||
} else if (ImGui::IsItemHovered()) {
|
|
||||||
if (only_add_style) {
|
|
||||||
ImGui::SetTooltip("%s", _u8L("Add style to my list.").c_str());
|
|
||||||
} else {
|
|
||||||
ImGui::SetTooltip("%s", _u8L("Add as new named style.").c_str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string title = _u8L("Save as new style");
|
|
||||||
const char * popup_id = title.c_str();
|
|
||||||
static std::string new_name;
|
|
||||||
if (start_save_as && !ImGui::IsPopupOpen(popup_id)) {
|
|
||||||
ImGui::OpenPopup(popup_id);
|
|
||||||
// initialize with original copy
|
|
||||||
new_name = m_style_manager.get_font_item().name;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ImGui::BeginPopupModal(popup_id, 0, ImGuiWindowFlags_AlwaysAutoResize)) {
|
|
||||||
ImGui::Text("%s", _u8L("New name of style: ").c_str());
|
ImGui::Text("%s", _u8L("New name of style: ").c_str());
|
||||||
|
|
||||||
|
// use name inside of volume configuration as temporary new name
|
||||||
|
std::string &new_name = m_volume->text_configuration->font_item.name;
|
||||||
|
|
||||||
bool is_unique = true;
|
bool is_unique = true;
|
||||||
for (const auto &item : m_style_manager.get_styles())
|
for (const auto &item : m_style_manager.get_styles())
|
||||||
if (item.font_item.name == new_name) is_unique = false;
|
if (item.font_item.name == new_name) is_unique = false;
|
||||||
@ -1613,16 +1582,61 @@ void GLGizmoEmboss::draw_style_save_as_button()
|
|||||||
allow_change = true;
|
allow_change = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool save_style = false;
|
||||||
ImGuiInputTextFlags flags = ImGuiInputTextFlags_EnterReturnsTrue;
|
ImGuiInputTextFlags flags = ImGuiInputTextFlags_EnterReturnsTrue;
|
||||||
if ((ImGui::InputText("##save as style", &new_name, flags) && allow_change) ||
|
if (ImGui::InputText("##save as style", &new_name, flags))
|
||||||
m_imgui->button(_L("ok"), ImVec2(0.f, 0.f), allow_change)) {
|
save_style = true;
|
||||||
|
|
||||||
|
if (m_imgui->button(_L("ok"), ImVec2(0.f, 0.f), allow_change))
|
||||||
|
save_style = true;
|
||||||
|
|
||||||
|
ImGui::SameLine();
|
||||||
|
if (ImGui::Button(_u8L("cancel").c_str())){
|
||||||
|
// write original name to volume TextConfiguration
|
||||||
|
new_name = m_style_manager.get_font_item().name;
|
||||||
|
ImGui::CloseCurrentPopup();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (save_style && allow_change) {
|
||||||
m_style_manager.store_style(new_name);
|
m_style_manager.store_style(new_name);
|
||||||
m_style_manager.store_font_list_to_app_config(wxGetApp().app_config);
|
m_style_manager.store_font_list_to_app_config(wxGetApp().app_config);
|
||||||
ImGui::CloseCurrentPopup();
|
ImGui::CloseCurrentPopup();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLGizmoEmboss::draw_style_add_button()
|
||||||
|
{
|
||||||
|
bool start_save_as = false;
|
||||||
|
bool only_add_style = !m_style_manager.exist_stored_style();
|
||||||
|
bool can_add = true;
|
||||||
|
if (only_add_style &&
|
||||||
|
m_volume &&
|
||||||
|
m_volume->text_configuration.has_value() &&
|
||||||
|
m_volume->text_configuration->font_item.type != WxFontUtils::get_actual_type())
|
||||||
|
can_add = false;
|
||||||
|
|
||||||
|
std::string title = _u8L("Save as new style");
|
||||||
|
const char *popup_id = title.c_str();
|
||||||
|
// save as new style
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (ImGui::Button(_u8L("cancel").c_str()))
|
if (draw_button(IconType::add, !can_add)) {
|
||||||
ImGui::CloseCurrentPopup();
|
if (!m_style_manager.exist_stored_style()) {
|
||||||
|
m_style_manager.store_font_list_to_app_config(wxGetApp().app_config);
|
||||||
|
} else {
|
||||||
|
ImGui::OpenPopup(popup_id);
|
||||||
|
}
|
||||||
|
} else if (ImGui::IsItemHovered()) {
|
||||||
|
if (!can_add) {
|
||||||
|
ImGui::SetTooltip("%s", _u8L("Only valid font can be added to style.").c_str());
|
||||||
|
}else if (only_add_style) {
|
||||||
|
ImGui::SetTooltip("%s", _u8L("Add style to my list.").c_str());
|
||||||
|
} else {
|
||||||
|
ImGui::SetTooltip("%s", _u8L("Add as new named style.").c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ImGui::BeginPopupModal(popup_id, 0, ImGuiWindowFlags_AlwaysAutoResize)) {
|
||||||
|
draw_style_save_as_popup();
|
||||||
ImGui::EndPopup();
|
ImGui::EndPopup();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1767,13 +1781,13 @@ void GLGizmoEmboss::draw_revert_all_styles_button() {
|
|||||||
|
|
||||||
void GLGizmoEmboss::draw_style_list() {
|
void GLGizmoEmboss::draw_style_list() {
|
||||||
if (!m_style_manager.is_activ_font()) return;
|
if (!m_style_manager.is_activ_font()) return;
|
||||||
const float &max_width = m_gui_cfg->max_font_name_width;
|
const float &max_style_name_width = m_gui_cfg->max_style_name_width;
|
||||||
const FontItem &actual_font_item = m_style_manager.get_font_item();
|
const FontItem &actual_font_item = m_style_manager.get_font_item();
|
||||||
std::string &trunc_name = m_style_manager.get_truncated_name();
|
std::string &trunc_name = m_style_manager.get_truncated_name();
|
||||||
if (trunc_name.empty()) {
|
if (trunc_name.empty()) {
|
||||||
// generate trunc name
|
// generate trunc name
|
||||||
const std::string ¤t_name = actual_font_item.name;
|
const std::string ¤t_name = actual_font_item.name;
|
||||||
trunc_name = ImGuiWrapper::trunc(current_name, max_width);
|
trunc_name = ImGuiWrapper::trunc(current_name, max_style_name_width);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_style_manager.exist_stored_style())
|
if (m_style_manager.exist_stored_style())
|
||||||
@ -1784,7 +1798,7 @@ void GLGizmoEmboss::draw_style_list() {
|
|||||||
ImGui::SetNextItemWidth(m_gui_cfg->input_width);
|
ImGui::SetNextItemWidth(m_gui_cfg->input_width);
|
||||||
if (ImGui::BeginCombo("##style_selector", trunc_name.c_str())) {
|
if (ImGui::BeginCombo("##style_selector", trunc_name.c_str())) {
|
||||||
m_style_manager.init_style_images(m_gui_cfg->max_style_image_size, m_text);
|
m_style_manager.init_style_images(m_gui_cfg->max_style_image_size, m_text);
|
||||||
m_style_manager.init_trunc_names(max_width);
|
m_style_manager.init_trunc_names(max_style_name_width);
|
||||||
std::optional<std::pair<size_t,size_t>> swap_indexes;
|
std::optional<std::pair<size_t,size_t>> swap_indexes;
|
||||||
const std::vector<FontManager::Item> &styles = m_style_manager.get_styles();
|
const std::vector<FontManager::Item> &styles = m_style_manager.get_styles();
|
||||||
for (const auto &item : styles) {
|
for (const auto &item : styles) {
|
||||||
@ -1817,7 +1831,7 @@ void GLGizmoEmboss::draw_style_list() {
|
|||||||
|
|
||||||
// draw style name
|
// draw style name
|
||||||
if (img.has_value()) {
|
if (img.has_value()) {
|
||||||
ImGui::SameLine();
|
ImGui::SameLine(max_style_name_width);
|
||||||
ImGui::Image(img->texture_id, img->tex_size, img->uv0, img->uv1);
|
ImGui::Image(img->texture_id, img->tex_size, img->uv0, img->uv1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1852,7 +1866,7 @@ void GLGizmoEmboss::draw_style_list() {
|
|||||||
draw_style_save_button();
|
draw_style_save_button();
|
||||||
|
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
draw_style_save_as_button();
|
draw_style_add_button();
|
||||||
|
|
||||||
// undo button
|
// undo button
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
@ -2302,6 +2316,10 @@ void GLGizmoEmboss::draw_advanced()
|
|||||||
if (m_style_manager.exist_stored_style())
|
if (m_style_manager.exist_stored_style())
|
||||||
stored_fi = m_style_manager.get_stored_font_item();
|
stored_fi = m_style_manager.get_stored_font_item();
|
||||||
|
|
||||||
|
bool can_use_surface = (m_volume==nullptr)? false :
|
||||||
|
(font_prop.use_surface)? true : // already used surface must have option to uncheck
|
||||||
|
(m_volume->get_object()->volumes.size() > 1);
|
||||||
|
m_imgui->disabled_begin(!can_use_surface);
|
||||||
const bool *def_use_surface = stored_fi ?
|
const bool *def_use_surface = stored_fi ?
|
||||||
&stored_fi->prop.use_surface : nullptr;
|
&stored_fi->prop.use_surface : nullptr;
|
||||||
if (rev_checkbox(tr.use_surface, font_prop.use_surface, def_use_surface,
|
if (rev_checkbox(tr.use_surface, font_prop.use_surface, def_use_surface,
|
||||||
@ -2313,6 +2331,7 @@ void GLGizmoEmboss::draw_advanced()
|
|||||||
}
|
}
|
||||||
process();
|
process();
|
||||||
}
|
}
|
||||||
|
m_imgui->disabled_end(); // !can_use_surface
|
||||||
|
|
||||||
std::string units = _u8L("font points");
|
std::string units = _u8L("font points");
|
||||||
std::string units_fmt = "%.0f " + units;
|
std::string units_fmt = "%.0f " + units;
|
||||||
|
@ -104,10 +104,11 @@ private:
|
|||||||
void draw_delete_style_button();
|
void draw_delete_style_button();
|
||||||
void discard_changes_in_style();
|
void discard_changes_in_style();
|
||||||
void draw_revert_all_styles_button();
|
void draw_revert_all_styles_button();
|
||||||
void draw_rename_popup();
|
void draw_style_rename_popup();
|
||||||
void draw_style_rename_button();
|
void draw_style_rename_button();
|
||||||
void draw_style_save_button();
|
void draw_style_save_button();
|
||||||
void draw_style_save_as_button();
|
void draw_style_save_as_popup();
|
||||||
|
void draw_style_add_button();
|
||||||
void draw_style_undo_button();
|
void draw_style_undo_button();
|
||||||
void draw_font_list();
|
void draw_font_list();
|
||||||
void draw_style_edit();
|
void draw_style_edit();
|
||||||
@ -170,7 +171,7 @@ private:
|
|||||||
ImVec2 minimal_window_size_with_advance = ImVec2(0, 0);
|
ImVec2 minimal_window_size_with_advance = ImVec2(0, 0);
|
||||||
float input_width = 0.f;
|
float input_width = 0.f;
|
||||||
float delete_pos_x = 0.f;
|
float delete_pos_x = 0.f;
|
||||||
float max_font_name_width = 0.f;
|
float max_style_name_width = 0.f;
|
||||||
unsigned int icon_width = 0;
|
unsigned int icon_width = 0;
|
||||||
|
|
||||||
// maximal width and height of style image
|
// maximal width and height of style image
|
||||||
@ -182,10 +183,9 @@ private:
|
|||||||
|
|
||||||
ImVec2 text_size;
|
ImVec2 text_size;
|
||||||
|
|
||||||
// maximal size of face image
|
// maximal size of face name image
|
||||||
Vec2i face_name_size = Vec2i(128, 0);
|
Vec2i face_name_size = Vec2i(100, 0);
|
||||||
float face_name_max_width = 100.f;
|
float face_name_max_width = 100.f;
|
||||||
float face_name_offset = 100.f;
|
|
||||||
|
|
||||||
// Only translations needed for calc GUI size
|
// Only translations needed for calc GUI size
|
||||||
struct Translations
|
struct Translations
|
||||||
@ -264,7 +264,7 @@ private:
|
|||||||
enum class IconType : unsigned {
|
enum class IconType : unsigned {
|
||||||
rename = 0,
|
rename = 0,
|
||||||
erase,
|
erase,
|
||||||
duplicate,
|
add,
|
||||||
save,
|
save,
|
||||||
undo,
|
undo,
|
||||||
italic,
|
italic,
|
||||||
|
@ -82,6 +82,7 @@ bool FontManager::store_font_list_to_app_config(AppConfig *cfg)
|
|||||||
make_unique_name(fi.name);
|
make_unique_name(fi.name);
|
||||||
m_style_cache.font_index = m_style_items.size();
|
m_style_cache.font_index = m_style_items.size();
|
||||||
m_style_items.push_back({fi});
|
m_style_items.push_back({fi});
|
||||||
|
m_style_cache.stored_wx_font = m_style_cache.wx_font;
|
||||||
}
|
}
|
||||||
|
|
||||||
FontListSerializable::store_font_index(*cfg, m_style_cache.font_index);
|
FontListSerializable::store_font_index(*cfg, m_style_cache.font_index);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user