Skip to content

Commit e92cf29

Browse files
authored
feat(ScaleRevealer): multiple widgets (#624)
1 parent cbf10b3 commit e92cf29

File tree

3 files changed

+41
-10
lines changed

3 files changed

+41
-10
lines changed

src/Dialogs/MainWindow.vala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public class Tuba.Dialogs.MainWindow: Adw.ApplicationWindow, Saveable {
7979
) {
8080
if (as_is && preview == null) return;
8181

82-
media_viewer.add_media (url, media_type, preview, pos, as_is, alt_text, user_friendly_url, stream);
82+
media_viewer.add_media (url, media_type, preview, pos, as_is, alt_text, user_friendly_url, stream, source_widget);
8383

8484
if (!is_media_viewer_visible) {
8585
media_viewer.reveal (source_widget);

src/Views/MediaViewer.vala

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,10 +373,15 @@ public class Tuba.Views.MediaViewer : Gtk.Widget, Gtk.Buildable, Adw.Swipeable {
373373
enabled = true,
374374
allow_mouse_drag = true
375375
};
376+
swipe_tracker.prepare.connect (on_swipe_tracker_prepare);
376377
swipe_tracker.update_swipe.connect (on_update_swipe);
377378
swipe_tracker.end_swipe.connect (on_end_swipe);
378379
}
379380

381+
private void on_swipe_tracker_prepare (Adw.NavigationDirection direction) {
382+
update_revealer_widget ();
383+
}
384+
380385
private void on_update_swipe (double progress) {
381386
this.swipe_children_opacity = 0.0;
382387
this.swipe_progress = progress;
@@ -673,6 +678,7 @@ public class Tuba.Views.MediaViewer : Gtk.Widget, Gtk.Buildable, Adw.Swipeable {
673678
}
674679

675680
private void reset_media_viewer () {
681+
revealer_widgets.clear ();
676682
this.fullscreen = false;
677683
todo_items.clear ();
678684

@@ -686,6 +692,11 @@ public class Tuba.Views.MediaViewer : Gtk.Widget, Gtk.Buildable, Adw.Swipeable {
686692
revealed = false;
687693
}
688694

695+
private void update_revealer_widget () {
696+
if (revealed && revealer_widgets.has_key ((int) carousel.position))
697+
scale_revealer.source_widget = revealer_widgets.get ((int) carousel.position);
698+
}
699+
689700
private async string download_video (string url) throws Error {
690701
return yield Host.download (url);
691702
}
@@ -702,6 +713,7 @@ public class Tuba.Views.MediaViewer : Gtk.Widget, Gtk.Buildable, Adw.Swipeable {
702713
do_todo_items ();
703714
}
704715

716+
public Gee.HashMap<int, Gtk.Widget> revealer_widgets = new Gee.HashMap<int, Gtk.Widget> ();
705717
public void add_media (
706718
string url,
707719
Tuba.Attachment.MediaType media_type,
@@ -710,11 +722,14 @@ public class Tuba.Views.MediaViewer : Gtk.Widget, Gtk.Buildable, Adw.Swipeable {
710722
bool as_is = false,
711723
string? alt_text = null,
712724
string? user_friendly_url = null,
713-
bool stream = false
725+
bool stream = false,
726+
Gtk.Widget? revealer_widget = null
714727
) {
715728
Item item;
716729
string final_friendly_url = user_friendly_url == null ? url : user_friendly_url;
717730
Gdk.Paintable? final_preview = as_is ? null : preview;
731+
if (revealer_widget != null)
732+
revealer_widgets.set (pos == null ? items.size : pos, revealer_widget);
718733

719734
if (media_type.is_video ()) {
720735
var video = new Gtk.Video ();

src/Widgets/ScaleRevealer.vala

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,31 @@ public class Tuba.Widgets.ScaleRevealer : Adw.Bin {
66

77
public signal void transition_done ();
88
public Adw.TimedAnimation animation { get; construct set; }
9-
public Gtk.Widget? source_widget { get; set; }
9+
private Gtk.Widget? _source_widget = null;
10+
public Gtk.Widget? source_widget {
11+
get {
12+
return _source_widget;
13+
}
14+
set {
15+
if (_source_widget != null)
16+
_source_widget.opacity = 1.0;
17+
_source_widget = value;
18+
update_source_widget ();
19+
}
20+
}
1021
public Gdk.Texture? source_widget_texture { get; set; }
1122

23+
private void update_source_widget () {
24+
if (this.source_widget == null) {
25+
source_widget_texture = null;
26+
} else {
27+
var t_source_widget_texture = render_widget_to_texture (this.source_widget);
28+
if (t_source_widget_texture != null)
29+
source_widget_texture = t_source_widget_texture;
30+
this.source_widget.opacity = 0.0;
31+
}
32+
}
33+
1234
private bool _reveal_child = false;
1335
public bool reveal_child {
1436
get {
@@ -22,13 +44,7 @@ public class Tuba.Widgets.ScaleRevealer : Adw.Bin {
2244
if (value) {
2345
animation.value_to = 1.0;
2446
this.visible = true;
25-
26-
if (source_widget == null) {
27-
source_widget_texture = null;
28-
} else {
29-
source_widget_texture = render_widget_to_texture (this.source_widget);
30-
source_widget.opacity = 0.0;
31-
}
47+
update_source_widget ();
3248
} else {
3349
animation.value_to = 0.0;
3450
}

0 commit comments

Comments
 (0)