From 8c177dd1cac4ea4556b6c785cf26d4a3b963e7a9 Mon Sep 17 00:00:00 2001 From: Pedro Paulo <32345702+pedropaulosuzuki@users.noreply.github.com> Date: Thu, 12 Feb 2026 17:15:06 +0000 Subject: [PATCH 1/6] Add icon strings for Miter, Round and Bevel Join --- Pinta.Resources/Icons.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Pinta.Resources/Icons.cs b/Pinta.Resources/Icons.cs index 163fd9a733..8caaf0bbbf 100644 --- a/Pinta.Resources/Icons.cs +++ b/Pinta.Resources/Icons.cs @@ -185,6 +185,10 @@ public static class Icons public const string OrientationPortrait = "image-orientation-portrait-symbolic"; public const string OrientationLandscape = "image-orientation-landscape-symbolic"; + public const string JoinMiter = "join-miter-symbolic"; + public const string JoinRound = "join-round-symbolic"; + public const string JoinBevel = "join-bevel-symbolic"; + public const string LayerDelete = "layers-remove-layer-symbolic"; public const string LayerDuplicate = "layers-duplicate-layer-symbolic"; public const string LayerFlipHorizontal = ImageFlipHorizontal; From fc5bb678dd75db1ac3f85647326b8cb152209b08 Mon Sep 17 00:00:00 2001 From: Pedro Paulo <32345702+pedropaulosuzuki@users.noreply.github.com> Date: Thu, 12 Feb 2026 17:16:13 +0000 Subject: [PATCH 2/6] Add setting string for 'text-join' --- Pinta.Tools/SettingNames.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Pinta.Tools/SettingNames.cs b/Pinta.Tools/SettingNames.cs index 04d9065161..6147b3d83b 100644 --- a/Pinta.Tools/SettingNames.cs +++ b/Pinta.Tools/SettingNames.cs @@ -17,6 +17,7 @@ internal static class SettingNames internal const string TEXT_ALIGNMENT = "text-alignment"; internal const string TEXT_STYLE = "text-style"; internal const string TEXT_OUTLINE_WIDTH = "text-outline-width"; + internal const string TEXT_JOIN = "text-join"; internal const string RECOLOR_TOLERANCE = "recolor-tolerance"; From a81fcd322ca19647ae1945a9dfb5e5ebe82e6112 Mon Sep 17 00:00:00 2001 From: Pedro Paulo <32345702+pedropaulosuzuki@users.noreply.github.com> Date: Thu, 12 Feb 2026 17:26:23 +0000 Subject: [PATCH 3/6] [Text tool] Adds stroke join option for text --- Pinta.Tools/Tools/TextTool.cs | 47 +++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/Pinta.Tools/Tools/TextTool.cs b/Pinta.Tools/Tools/TextTool.cs index 29bfdc28aa..4866ae723f 100644 --- a/Pinta.Tools/Tools/TextTool.cs +++ b/Pinta.Tools/Tools/TextTool.cs @@ -137,6 +137,8 @@ public TextTool (IServiceProvider services) : base (services) private Gtk.Separator outline_sep = null!; private Gtk.SpinButton outline_width = null!; private Gtk.Label outline_width_label = null!; + private Gtk.Separator join_sep = null!; + private ToolBarDropDownButton join_btn = null!; protected override void OnBuildToolBar (Gtk.Box tb) { @@ -315,7 +317,39 @@ protected override void OnBuildToolBar (Gtk.Box tb) tb.Append (outline_width); - outline_width.Visible = outline_width_label.Visible = outline_sep.Visible = StrokeText; + join_sep ??= GtkExtensions.CreateToolBarSeparator (); + + tb.Append (join_sep); + + if (join_btn == null) { + join_btn = new ToolBarDropDownButton (); + + // Translators: 'Miter Join' refers to the Cairo.LineJoin property + join_btn.AddItem ( + Translations.GetString ("Miter Join"), + Pinta.Resources.Icons.JoinMiter, + Cairo.LineJoin.Miter + ); + // Translators: 'Round Join' refers to the Cairo.LineJoin property + join_btn.AddItem ( + Translations.GetString ("Round Join"), + Pinta.Resources.Icons.JoinRound, + Cairo.LineJoin.Round + ); + // Translators: 'Bevel Join' refers to the Cairo.LineJoin property + join_btn.AddItem ( + Translations.GetString ("Bevel Join"), + Pinta.Resources.Icons.JoinBevel, + Cairo.LineJoin.Bevel + ); + + join_btn.SelectedIndex = Settings.GetSetting (SettingNames.TEXT_JOIN, 0); + join_btn.SelectedItemChanged += HandleJoinButtonToggled; + } + + tb.Append (join_btn); + + outline_width.Visible = outline_width_label.Visible = outline_sep.Visible = join_btn.Visible = join_sep.Visible = StrokeText; UpdateFont (); } @@ -353,6 +387,9 @@ protected override void OnSaveSettings (ISettingsService settings) if (outline_width is not null) settings.PutSetting (SettingNames.TEXT_OUTLINE_WIDTH, outline_width.GetValueAsInt ()); + + if (join_btn is not null) + settings.PutSetting (SettingNames.TEXT_JOIN, join_btn.SelectedIndex); } private void HandleFontChanged () @@ -433,10 +470,15 @@ private void HandleItalicButtonToggled (object? sender, EventArgs e) private void HandleBoldButtonToggled (object? sender, EventArgs e) { - outline_width.Visible = outline_width_label.Visible = outline_sep.Visible = StrokeText; + outline_width.Visible = outline_width_label.Visible = outline_sep.Visible = join_btn.Visible = join_sep.Visible = StrokeText; UpdateFont (); } + + private void HandleJoinButtonToggled (object? sender, EventArgs e) + { + UpdateFont (); + } private void HandleSelectedLayerChanged (object? sender, EventArgs e) { @@ -1075,6 +1117,7 @@ private void RedrawText (bool showCursor, bool useTextLayer) if (StrokeText) { g.SetSourceColor (FillText ? CurrentTextEngine.SecondaryColor : CurrentTextEngine.PrimaryColor); g.LineWidth = OutlineWidth; + g.LineJoin = (Cairo.LineJoin) join_btn.SelectedIndex; PangoCairo.Functions.LayoutPath (g, CurrentTextLayout.Layout); g.Stroke (); From 28161932edca89da352485ded89eea3848f410e4 Mon Sep 17 00:00:00 2001 From: Pedro Paulo <32345702+pedropaulosuzuki@users.noreply.github.com> Date: Thu, 12 Feb 2026 17:54:37 +0000 Subject: [PATCH 4/6] Update CHANGELOG.md with Text Join options news --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ade1ee6c4..fd9dbc03e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ Thanks to the following contributors who worked on this release: - The splatter brush now allows the minimum and maximum splatter size to be configured separately from the brush width - The status bar color palette now supports Ctrl+clicking to edit a color, in addition to middle clicking (#1436) - The Resize Image and Resize Canvas dialogs now remember their settings (#1869, #1972) +- The Text Tool now allows choosing the join mode between 'Miter Join', 'Round Join' and 'Bevel Join' (#1969, #1983) ### Changed - Effect dialogs now hide options that are not currently relevant (#1960) From 5bb40bc85378e90fd883c7924a7cfee64267909b Mon Sep 17 00:00:00 2001 From: Pedro Paulo <32345702+pedropaulosuzuki@users.noreply.github.com> Date: Thu, 12 Feb 2026 17:55:18 +0000 Subject: [PATCH 5/6] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fd9dbc03e9..d64eaba8c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ Thanks to the following contributors who worked on this release: - The splatter brush now allows the minimum and maximum splatter size to be configured separately from the brush width - The status bar color palette now supports Ctrl+clicking to edit a color, in addition to middle clicking (#1436) - The Resize Image and Resize Canvas dialogs now remember their settings (#1869, #1972) -- The Text Tool now allows choosing the join mode between 'Miter Join', 'Round Join' and 'Bevel Join' (#1969, #1983) +- The Text Tool now allows choosing the join mode between 'Miter Join', 'Round Join' and 'Bevel Join' (#1969, #1985) ### Changed - Effect dialogs now hide options that are not currently relevant (#1960) From 5a34d96cef72af49b3a1e3bf04f05082bf573eb3 Mon Sep 17 00:00:00 2001 From: Pedro Paulo <32345702+pedropaulosuzuki@users.noreply.github.com> Date: Thu, 12 Feb 2026 18:03:04 +0000 Subject: [PATCH 6/6] Fix whitespace --- Pinta.Tools/Tools/TextTool.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pinta.Tools/Tools/TextTool.cs b/Pinta.Tools/Tools/TextTool.cs index 4866ae723f..24366321d4 100644 --- a/Pinta.Tools/Tools/TextTool.cs +++ b/Pinta.Tools/Tools/TextTool.cs @@ -474,7 +474,7 @@ private void HandleBoldButtonToggled (object? sender, EventArgs e) UpdateFont (); } - + private void HandleJoinButtonToggled (object? sender, EventArgs e) { UpdateFont ();