blob: c1f82c6fe23f5e72af7cbd6222813661c0fe4603 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
/* -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
namespace Baobab {
public class CrossFadeNotebook : Gtk.Grid, Gtk.Buildable {
Gtk.Widget current_page = null;
GtkClutter.Embed embed;
construct {
embed = new GtkClutter.Embed ();
add (embed);
embed.show ();
vexpand = false;
hexpand = false;
GtkClutter.embed_set_use_layout_size (embed, true);
var stage = embed.get_stage ();
stage.set_layout_manager (new Clutter.BinLayout (Clutter.BinAlignment.FILL, Clutter.BinAlignment.FILL));
}
public void add_page (Gtk.Widget widget) {
var actor = new GtkClutter.Actor.with_contents (widget);
widget.set_data ("clutter_actor", actor);
embed.get_stage ().add_child (actor);
select_page (widget);
}
public void select_page (Gtk.Widget widget) {
if (current_page == widget) {
return;
}
if (current_page != null) {
var cur_actor = current_page.get_data<Clutter.Actor> ("clutter_actor");
cur_actor.reactive = false;
cur_actor.save_easing_state ();
cur_actor.set_easing_duration (500);
cur_actor.opacity = 0;
cur_actor.restore_easing_state ();
}
var actor = widget.get_data<Clutter.Actor> ("clutter_actor");
actor.reactive = true;
actor.save_easing_state ();
actor.set_easing_duration (500);
actor.opacity = 0xff;
actor.restore_easing_state ();
current_page = widget;
}
// GtkBuildable interface
public void add_child (Gtk.Builder builder, Object child, string? type) {
add_page (child as Gtk.Widget);
}
}
}
|