mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-14 15:45:52 +08:00
#4584 revisited. Gtk-CRITICAL fix + resizing
This commit is contained in:
parent
534792e249
commit
e855ab5d46
@ -216,20 +216,28 @@ void PresetComboBox::update_selection()
|
|||||||
// A workaround for a set of issues related to text fitting into gtk widgets:
|
// A workaround for a set of issues related to text fitting into gtk widgets:
|
||||||
// See e.g.: https://github.com/prusa3d/PrusaSlicer/issues/4584
|
// See e.g.: https://github.com/prusa3d/PrusaSlicer/issues/4584
|
||||||
#if defined(__WXGTK20__) || defined(__WXGTK3__)
|
#if defined(__WXGTK20__) || defined(__WXGTK3__)
|
||||||
GList* cells = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(m_widget));
|
GtkWidget* widget = m_widget;
|
||||||
|
if (GTK_IS_CONTAINER(widget)) {
|
||||||
// 'cells' contains the GtkCellRendererPixBuf for the icon,
|
GList* children = gtk_container_get_children(GTK_CONTAINER(widget));
|
||||||
// 'cells->next' contains GtkCellRendererText for the text we need to ellipsize
|
if (children) {
|
||||||
if (!cells || !cells->next) return;
|
widget = GTK_WIDGET(children->data);
|
||||||
|
g_list_free(children);
|
||||||
auto cell = static_cast<GtkCellRendererText *>(cells->next->data);
|
}
|
||||||
|
}
|
||||||
if (!cell) return;
|
if (GTK_IS_ENTRY(widget)) {
|
||||||
|
// Set ellipsization for the entry
|
||||||
g_object_set(G_OBJECT(cell), "ellipsize", PANGO_ELLIPSIZE_END, (char*)NULL);
|
gtk_entry_set_width_chars(GTK_ENTRY(widget), 20); // Adjust this value as needed
|
||||||
|
gtk_entry_set_max_width_chars(GTK_ENTRY(widget), 20); // Adjust this value as needed
|
||||||
// Only the list of cells must be freed, the renderer isn't ours to free
|
// Create a PangoLayout for the entry and set ellipsization
|
||||||
g_list_free(cells);
|
PangoLayout* layout = gtk_entry_get_layout(GTK_ENTRY(widget));
|
||||||
|
if (layout) {
|
||||||
|
pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_END);
|
||||||
|
} else {
|
||||||
|
g_warning("Unable to get PangoLayout from GtkEntry");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
g_warning("Expected GtkEntry, but got %s", G_OBJECT_TYPE_NAME(widget));
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -257,6 +257,7 @@ void TextInput::DoSetSize(int x, int y, int width, int height, int sizeFlags)
|
|||||||
wxClientDC dc(this);
|
wxClientDC dc(this);
|
||||||
const int r_shift = int(dd_icon_size.x == 0 ? (3. * dc.GetContentScaleFactor()) : ((size.y - dd_icon_size.y) / 2));
|
const int r_shift = int(dd_icon_size.x == 0 ? (3. * dc.GetContentScaleFactor()) : ((size.y - dd_icon_size.y) / 2));
|
||||||
textSize.x = size.x - textPos.x - labelSize.x - dd_icon_size.x - r_shift;
|
textSize.x = size.x - textPos.x - labelSize.x - dd_icon_size.x - r_shift;
|
||||||
|
if (textSize.x < -1) textSize.x = -1;
|
||||||
text_ctrl->SetSize(textSize);
|
text_ctrl->SetSize(textSize);
|
||||||
text_ctrl->SetPosition({textPos.x, (size.y - textSize.y) / 2});
|
text_ctrl->SetPosition({textPos.x, (size.y - textSize.y) / 2});
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user