From d0efbbb42db0620954e3c3052b7bb5893cea31cc Mon Sep 17 00:00:00 2001 From: Evangelos Paterakis Date: Sat, 28 Oct 2023 04:00:34 +0300 Subject: [PATCH 1/9] feat: new composer --- data/gresource.xml | 4 + .../scalable/actions/tuba-bear-symbolic.svg | 2 + .../actions/tuba-image-round-symbolic.svg | 2 + .../tuba-sentiment-satisfied-symbolic.svg | 2 + data/style.css | 8 + data/ui/dialogs/new_composer.ui | 137 ++++++++++++++++++ src/Application.vala | 2 +- src/Dialogs/Composer/NewDialog.vala | 74 ++++++++++ src/Dialogs/Composer/meson.build | 1 + 9 files changed, 231 insertions(+), 1 deletion(-) create mode 100644 data/icons/scalable/actions/tuba-bear-symbolic.svg create mode 100644 data/icons/scalable/actions/tuba-image-round-symbolic.svg create mode 100644 data/icons/scalable/actions/tuba-sentiment-satisfied-symbolic.svg create mode 100644 data/ui/dialogs/new_composer.ui create mode 100644 src/Dialogs/Composer/NewDialog.vala diff --git a/data/gresource.xml b/data/gresource.xml index 214c4aad6..f5c2f507e 100644 --- a/data/gresource.xml +++ b/data/gresource.xml @@ -56,6 +56,9 @@ icons/scalable/actions/tuba-markdown-symbolic.svg icons/scalable/actions/tuba-rich-text-symbolic.svg icons/scalable/actions/tuba-earth-symbolic.svg + icons/scalable/actions/tuba-bear-symbolic.svg + icons/scalable/actions/tuba-image-round-symbolic.svg + icons/scalable/actions/tuba-sentiment-satisfied-symbolic.svg gtk/help-overlay.ui @@ -82,6 +85,7 @@ ui/dialogs/list_edit.ui ui/dialogs/new_account.ui ui/dialogs/compose.ui + ui/dialogs/new_composer.ui ui/dialogs/main.ui ui/dialogs/preferences.ui ui/dialogs/profile_edit.ui diff --git a/data/icons/scalable/actions/tuba-bear-symbolic.svg b/data/icons/scalable/actions/tuba-bear-symbolic.svg new file mode 100644 index 000000000..253250365 --- /dev/null +++ b/data/icons/scalable/actions/tuba-bear-symbolic.svg @@ -0,0 +1,2 @@ + + diff --git a/data/icons/scalable/actions/tuba-image-round-symbolic.svg b/data/icons/scalable/actions/tuba-image-round-symbolic.svg new file mode 100644 index 000000000..bc45f2ef6 --- /dev/null +++ b/data/icons/scalable/actions/tuba-image-round-symbolic.svg @@ -0,0 +1,2 @@ + + diff --git a/data/icons/scalable/actions/tuba-sentiment-satisfied-symbolic.svg b/data/icons/scalable/actions/tuba-sentiment-satisfied-symbolic.svg new file mode 100644 index 000000000..6bf2ccf52 --- /dev/null +++ b/data/icons/scalable/actions/tuba-sentiment-satisfied-symbolic.svg @@ -0,0 +1,2 @@ + + diff --git a/data/style.css b/data/style.css index 7c0a35c64..dc87a3583 100644 --- a/data/style.css +++ b/data/style.css @@ -610,3 +610,11 @@ video > overlay > revealer > controls { .preview_card:not(.explore):active { background-color: alpha(currentColor, 0.1625); } + +.accented-color { + color: @accent_color; +} + +.composer-bottom-padding { + padding: 2rem; +} diff --git a/data/ui/dialogs/new_composer.ui b/data/ui/dialogs/new_composer.ui new file mode 100644 index 000000000..56a7fd05c --- /dev/null +++ b/data/ui/dialogs/new_composer.ui @@ -0,0 +1,137 @@ + + + + + + \ No newline at end of file diff --git a/src/Application.vala b/src/Application.vala index c38e6edb1..46bfe868f 100644 --- a/src/Application.vala +++ b/src/Application.vala @@ -342,7 +342,7 @@ namespace Tuba { void compose_activated () { if (accounts.active.instance_info == null) return; - new Dialogs.Compose (); + new Dialogs.NewCompose (); } void back_activated () { diff --git a/src/Dialogs/Composer/NewDialog.vala b/src/Dialogs/Composer/NewDialog.vala new file mode 100644 index 000000000..20ecdf6cf --- /dev/null +++ b/src/Dialogs/Composer/NewDialog.vala @@ -0,0 +1,74 @@ +[GtkTemplate (ui = "/dev/geopjr/Tuba/ui/dialogs/new_composer.ui")] +public class Tuba.Dialogs.NewCompose : Adw.Window { + [GtkChild] private unowned Gtk.Label counter_label; + [GtkChild] private unowned Gtk.Button post_btn; + [GtkChild] private unowned Gtk.Box btns_box; + [GtkChild] private unowned Gtk.Grid grid; + + [GtkChild] private unowned Gtk.MenuButton native_emojis_button; + [GtkChild] private unowned Gtk.MenuButton custom_emojis_button; + + private bool _is_narrow = false; + public bool is_narrow { + get { + return _is_narrow; + } + set { + Gtk.GridLayout layout_manager = (Gtk.GridLayout) grid.get_layout_manager (); + Gtk.GridLayoutChild counter_layout_child = (Gtk.GridLayoutChild) layout_manager.get_layout_child (counter_label); + Gtk.GridLayoutChild post_layout_child = (Gtk.GridLayoutChild) layout_manager.get_layout_child (post_btn); + Gtk.GridLayoutChild btns_layout_child = (Gtk.GridLayoutChild) layout_manager.get_layout_child (btns_box); + + if (value) { + post_layout_child.column = 1; + post_layout_child.row = 1; + post_layout_child.row_span = 1; + + counter_layout_child.row = 0; + counter_layout_child.column = 1; + + btns_layout_child.column_span = 1; + + counter_label.margin_end = 10; + } else { + post_layout_child.column = 2; + post_layout_child.row = 0; + post_layout_child.row_span = 2; + + counter_layout_child.row = 1; + counter_layout_child.column = 1; + + btns_layout_child.column_span = 2; + + counter_label.margin_end = 0; + } + + _is_narrow = value; + } + } + + construct { + var condition = new Adw.BreakpointCondition.length ( + Adw.BreakpointConditionLengthType.MAX_WIDTH, + 400, Adw.LengthUnit.SP + ); + var breakpoint = new Adw.Breakpoint (condition); + breakpoint.add_setter (this, "is-narrow", true); + add_breakpoint (breakpoint); + + transient_for = app.main_window; + + var emoji_picker = new Gtk.EmojiChooser (); + native_emojis_button.popover = emoji_picker; + + if (accounts.active.instance_emojis?.size > 0) { + var custom_emoji_picker = new Widgets.CustomEmojiChooser (); + custom_emojis_button.popover = custom_emoji_picker; + } + } + + public NewCompose (API.Status template = new API.Status.empty ()) { + Object (); + present (); + } +} diff --git a/src/Dialogs/Composer/meson.build b/src/Dialogs/Composer/meson.build index bab710a6f..d2f47ee55 100644 --- a/src/Dialogs/Composer/meson.build +++ b/src/Dialogs/Composer/meson.build @@ -3,6 +3,7 @@ sources += files( 'AttachmentsPageAttachment.vala', 'Dialog.vala', 'EditorPage.vala', + 'NewDialog.vala', 'Page.vala', 'PollPage.vala', ) From bf17e387a6ac026fbef4faa05a0394668f1cb39d Mon Sep 17 00:00:00 2001 From: Evangelos Paterakis Date: Sun, 29 Oct 2023 01:09:16 +0300 Subject: [PATCH 2/9] feat: editor, dropdowns, emojis --- data/gtk/dropdown/icon.ui | 30 ++++-- data/style.css | 8 ++ data/ui/dialogs/new_composer.ui | 54 +++++++--- src/Dialogs/Composer/NewDialog.vala | 122 ++++++++++++++++++++-- src/Dialogs/Composer/NewDialogEditor.vala | 103 ++++++++++++++++++ src/Dialogs/Composer/meson.build | 1 + 6 files changed, 287 insertions(+), 31 deletions(-) create mode 100644 src/Dialogs/Composer/NewDialogEditor.vala diff --git a/data/gtk/dropdown/icon.ui b/data/gtk/dropdown/icon.ui index a7f616c57..e65b9a820 100644 --- a/data/gtk/dropdown/icon.ui +++ b/data/gtk/dropdown/icon.ui @@ -1,13 +1,28 @@ - diff --git a/data/style.css b/data/style.css index dc87a3583..55c81dc79 100644 --- a/data/style.css +++ b/data/style.css @@ -618,3 +618,11 @@ video > overlay > revealer > controls { .composer-bottom-padding { padding: 2rem; } + +.font-large { + font-size: large; +} + +.dropdown-border-radius > button { + border-radius: 9999px; +} diff --git a/data/ui/dialogs/new_composer.ui b/data/ui/dialogs/new_composer.ui index 56a7fd05c..bfb878443 100644 --- a/data/ui/dialogs/new_composer.ui +++ b/data/ui/dialogs/new_composer.ui @@ -16,9 +16,39 @@ - - - Public + + 1 + 1 + + + start + 100 + + + vertical + 1 + start + 30 + + + New Post + 1 + word-char + + + + + + 1 + vertical + + + + + + @@ -32,6 +62,7 @@ tuba-sentiment-satisfied-symbolic + Emoji Picker @@ -40,6 +71,7 @@ tuba-bear-symbolic + Custom Emoji Picker @@ -77,19 +109,9 @@ - + horizontal - - - Public - - - - - - EN - - + 12 0 1 @@ -98,10 +120,10 @@ - 200 / 500 end center end + 12 From a8b4063e829e27c0389494095e22f4e527952cc0 Mon Sep 17 00:00:00 2001 From: Evangelos Paterakis Date: Sat, 27 Jan 2024 07:24:23 +0200 Subject: [PATCH 5/9] feat: match spacing --- data/style.css | 4 ---- data/ui/dialogs/new_composer.ui | 9 ++++++--- src/Dialogs/Composer/NewDialog.vala | 6 ++++++ 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/data/style.css b/data/style.css index 8650c5ea6..d7c5afc51 100644 --- a/data/style.css +++ b/data/style.css @@ -658,10 +658,6 @@ GtkSourceAssistant row:last-child { color: @accent_color; } -.composer-bottom-padding { - padding: 2rem; -} - .font-large { font-size: large; } diff --git a/data/ui/dialogs/new_composer.ui b/data/ui/dialogs/new_composer.ui index 93272196d..bc6a24a7d 100644 --- a/data/ui/dialogs/new_composer.ui +++ b/data/ui/dialogs/new_composer.ui @@ -54,12 +54,15 @@ - + 20 + 32 + 32 + 20 + 16 horizontal + 6 tuba-sentiment-satisfied-symbolic diff --git a/src/Dialogs/Composer/NewDialog.vala b/src/Dialogs/Composer/NewDialog.vala index de93a45ea..55a0a98fe 100644 --- a/src/Dialogs/Composer/NewDialog.vala +++ b/src/Dialogs/Composer/NewDialog.vala @@ -35,6 +35,9 @@ public class Tuba.Dialogs.NewCompose : Adw.Window { counter_label.margin_end = 10; counter_label.margin_start = 0; + grid.row_spacing = 12; + grid.margin_start = 16; + grid.margin_end = 16; } else { post_layout_child.column = 2; post_layout_child.row = 0; @@ -47,6 +50,9 @@ public class Tuba.Dialogs.NewCompose : Adw.Window { counter_label.margin_end = 0; counter_label.margin_start = 12; + grid.row_spacing = 16; + grid.margin_start = 32; + grid.margin_end = 32; } _is_narrow = value; From 7deb1211c8b74243d6ce374edd26f8fc717496f4 Mon Sep 17 00:00:00 2001 From: Evangelos Paterakis Date: Sat, 27 Jan 2024 07:24:47 +0200 Subject: [PATCH 6/9] feat: set tooltip on counter it can be ellipsized --- src/Dialogs/Composer/NewDialog.vala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Dialogs/Composer/NewDialog.vala b/src/Dialogs/Composer/NewDialog.vala index 55a0a98fe..1c8f7ae1c 100644 --- a/src/Dialogs/Composer/NewDialog.vala +++ b/src/Dialogs/Composer/NewDialog.vala @@ -67,7 +67,7 @@ public class Tuba.Dialogs.NewCompose : Adw.Window { } set { _remaining_chars = value; - counter_label.label = @"$value / $char_limit"; + counter_label.label = counter_label.tooltip_text = @"$value / $char_limit"; if (value < 0) { counter_label.add_css_class ("error"); From c1b03f5d2e95931851980f8e39859769ee95aa00 Mon Sep 17 00:00:00 2001 From: Evangelos Paterakis Date: Sat, 27 Jan 2024 07:25:18 +0200 Subject: [PATCH 7/9] feat: make bottom dropdowns flat we have to manually get the first child (toggle button) --- src/Dialogs/Composer/NewDialog.vala | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/Dialogs/Composer/NewDialog.vala b/src/Dialogs/Composer/NewDialog.vala index 1c8f7ae1c..6640a067f 100644 --- a/src/Dialogs/Composer/NewDialog.vala +++ b/src/Dialogs/Composer/NewDialog.vala @@ -108,6 +108,15 @@ public class Tuba.Dialogs.NewCompose : Adw.Window { protected Gtk.DropDown visibility_button; protected Gtk.DropDown language_button; + private void append_dropdown (Gtk.DropDown dropdown) { + var togglebtn = dropdown.get_first_child (); + if (togglebtn != null) { + togglebtn.add_css_class ("flat"); + } + + dropdowns_box.append (dropdown); + } + protected void install_visibility (string default_visibility = settings.default_post_visibility) { visibility_button = new Gtk.DropDown (accounts.active.visibility_list, null) { expression = new Gtk.PropertyExpression (typeof (InstanceAccount.Visibility), null, "name"), @@ -129,7 +138,7 @@ public class Tuba.Dialogs.NewCompose : Adw.Window { visibility_button.selected = default_visibility_index; } - dropdowns_box.append (visibility_button); + append_dropdown (visibility_button); } private void install_languages (string? locale_iso = null) { @@ -156,7 +165,7 @@ public class Tuba.Dialogs.NewCompose : Adw.Window { } } - dropdowns_box.append (language_button); + append_dropdown (language_button); } construct { From 3fd8aa213e74c74882007967badd8784faef9a6f Mon Sep 17 00:00:00 2001 From: Evangelos Paterakis Date: Sat, 27 Jan 2024 07:27:17 +0200 Subject: [PATCH 8/9] feat: show reply-to status --- src/Dialogs/Composer/NewDialog.vala | 23 ++++++++++++++++++++++- src/Widgets/Status.vala | 3 ++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/Dialogs/Composer/NewDialog.vala b/src/Dialogs/Composer/NewDialog.vala index 6640a067f..9edf7cf16 100644 --- a/src/Dialogs/Composer/NewDialog.vala +++ b/src/Dialogs/Composer/NewDialog.vala @@ -8,6 +8,7 @@ public class Tuba.Dialogs.NewCompose : Adw.Window { [GtkChild] private unowned Gtk.Box status_box; [GtkChild] private unowned Gtk.Box main_box; + [GtkChild] private unowned Gtk.Label status_title; [GtkChild] private unowned Gtk.MenuButton native_emojis_button; [GtkChild] private unowned Gtk.MenuButton custom_emojis_button; @@ -188,10 +189,30 @@ public class Tuba.Dialogs.NewCompose : Adw.Window { update_remaining_chars (); transient_for = app.main_window; + present (); } public NewCompose (API.Status template = new API.Status.empty ()) { Object (); - present (); + } + + public NewCompose.reply (API.Status to) { + Object (); + + try { + Widgets.Status widget_status = (Widgets.Status?) to.to_widget (); + widget_status.add_css_class ("card"); + widget_status.actions.visible = false; + widget_status.menu_button.visible = false; + widget_status.activatable = false; + widget_status.can_target = false; + widget_status.can_focus = false; + + status_box.insert_child_after (widget_status, status_title); + } catch (Error e) { + warning (@"Couldn't create status widget: $(e.message)"); + } + + status_title.label = _("Reply to %s").printf (to.account.handle); } } diff --git a/src/Widgets/Status.vala b/src/Widgets/Status.vala index 1475582c3..be168f8fa 100644 --- a/src/Widgets/Status.vala +++ b/src/Widgets/Status.vala @@ -621,7 +621,8 @@ } private void on_reply_button_clicked () { - new Dialogs.Compose.reply (status.formal, on_reply); + // new Dialogs.Compose.reply (status.formal, on_reply); + new Dialogs.NewCompose.reply (status.formal); } [GtkCallback] public void toggle_spoiler () { From 74a73691752924d342484d0d4eba2f3a38fc1225 Mon Sep 17 00:00:00 2001 From: Evangelos Paterakis Date: Sat, 30 Mar 2024 18:19:05 +0200 Subject: [PATCH 9/9] feat: AdwDialog --- data/ui/dialogs/new_composer.ui | 12 ++++++------ src/Dialogs/Composer/NewDialog.vala | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/data/ui/dialogs/new_composer.ui b/data/ui/dialogs/new_composer.ui index bc6a24a7d..c7e7cb602 100644 --- a/data/ui/dialogs/new_composer.ui +++ b/data/ui/dialogs/new_composer.ui @@ -2,13 +2,12 @@ -