diff options
| author | Robert Tari <robert@tari.in> | 2025-04-27 02:23:39 +0200 |
|---|---|---|
| committer | Robert Tari <robert@tari.in> | 2025-04-27 02:23:39 +0200 |
| commit | ead00fb80b584834e8d7c8a0743918714aae8d96 (patch) | |
| tree | f3250f1f784f99ddceabe760e46e5f28b345fb07 | |
| parent | bb6492c0eb2ca276bff88ef8d152519bbfd75ba5 (diff) | |
| download | arctica-greeter-ead00fb80b584834e8d7c8a0743918714aae8d96.tar.gz arctica-greeter-ead00fb80b584834e8d7c8a0743918714aae8d96.tar.bz2 arctica-greeter-ead00fb80b584834e8d7c8a0743918714aae8d96.zip | |
src/prompt-box.vala: Add manual text wrapping
| -rw-r--r-- | src/prompt-box.vala | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/src/prompt-box.vala b/src/prompt-box.vala index b102887..fff7a46 100644 --- a/src/prompt-box.vala +++ b/src/prompt-box.vala @@ -568,7 +568,7 @@ public class PromptBox : FadableBox public void add_message (string text, bool is_error) { - var label = new FadingLabel (text); + var label = new FadingLabel (""); var style_ctx = label.get_style_context(); @@ -601,6 +601,40 @@ public class PromptBox : FadableBox label.xalign = 0.0f; label.set_data<bool> ("prompt-box-is-error", is_error); + // Wrap the text if needed + ArcticaGreeter pGreeter = new ArcticaGreeter (); + Pango.Context pContext = label.get_pango_context (); + Pango.Layout pLayout = new Pango.Layout (pContext); + Pango.FontDescription pDescription = null; + Gtk.StateFlags nFlags = style_ctx.get_state (); + style_ctx.get (nFlags, "font", out pDescription, null); + pLayout.set_font_description (pDescription); + StringBuilder pBuilder = new StringBuilder (); + string[] lWords = text.split (" "); + string sLine = ""; + + foreach (string sWord in lWords) + { + string sTest = sLine == "" ? sWord : sLine + " " + sWord; + pLayout.set_text (sTest, -1); + int nWidth = 0; + pLayout.get_size (out nWidth, null); + + if (nWidth / Pango.SCALE > (pGreeter.grid_size * GreeterList.BOX_WIDTH - (int)(GreeterList.BORDER * pGreeter.scaling_factor_widgets * 8)) && sLine != "") + { + pBuilder.append (sLine + "\n"); + sLine = sWord; + } + else + { + sLine = sTest; + } + } + + pBuilder.append (sLine); + label.set_text (pBuilder.str); + //~Wrap the text if needed + attach_item (label); if (is_error) |
