aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Tari <robert@tari.in>2025-04-27 02:23:39 +0200
committerRobert Tari <robert@tari.in>2025-04-27 02:23:39 +0200
commitead00fb80b584834e8d7c8a0743918714aae8d96 (patch)
treef3250f1f784f99ddceabe760e46e5f28b345fb07
parentbb6492c0eb2ca276bff88ef8d152519bbfd75ba5 (diff)
downloadarctica-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.vala36
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)