clutter/auto/
actor.rs

1use glib::{
2    object as gobject,
3    object::{Cast, IsA},
4    signal::{connect_raw, SignalHandlerId},
5    translate::*,
6    value::SetValueOptional,
7    GString, StaticType, Value,
8};
9
10// crate Scriptable
11use crate::{
12    Action, ActorAlign, ActorBox, ActorFlags, AllocationFlags, Animatable, AnimationMode,
13    ButtonEvent, Color, Constraint, Container, Content, ContentGravity, ContentRepeat,
14    CrossingEvent, Effect, Event, KeyEvent, LayoutManager, Margin, Matrix, MotionEvent,
15    OffscreenRedirect, Orientation, PaintVolume, Rect, RequestMode, RotateAxis, ScalingFilter,
16    ScrollEvent, Stage, TextDirection, Transition, Vertex,
17};
18use std::boxed::Box as Box_;
19use std::mem::transmute;
20use std::{fmt, mem};
21
22// TODO: implements atk::ImplementorIface, Scriptable
23glib_wrapper! {
24    pub struct Actor(Object<ffi::ClutterActor, ffi::ClutterActorClass, ActorClass>) @extends gobject::InitiallyUnowned, @implements Animatable, Container;
25
26    match fn {
27        get_type => || ffi::clutter_actor_get_type(),
28    }
29}
30
31impl Actor {
32    /// Creates a new `Actor`.
33    ///
34    /// A newly created actor has a floating reference, which will be sunk
35    /// when it is added to another actor.
36    ///
37    /// # Returns
38    ///
39    /// the newly created `Actor`
40    pub fn new() -> Actor {
41        unsafe { from_glib_none(ffi::clutter_actor_new()) }
42    }
43}
44
45impl Default for Actor {
46    fn default() -> Self {
47        Self::new()
48    }
49}
50
51pub const NONE_ACTOR: Option<&Actor> = None;
52
53/// Trait containing all `Actor` methods.
54///
55/// # Implementors
56///
57/// [`Actor`](struct.Actor.html), [`Box`](struct.Box.html), [`Clone`](struct.Clone.html), [`Group`](struct.Group.html), [`Rectangle`](struct.Rectangle.html), [`ScrollActor`](struct.ScrollActor.html), [`Text`](struct.Text.html), [`Texture`](struct.Texture.html)
58pub trait ActorExt: 'static {
59    /// Adds `action` to the list of actions applied to `self`
60    ///
61    /// A `Action` can only belong to one actor at a time
62    ///
63    /// The `Actor` will hold a reference on `action` until either
64    /// `ActorExt::remove_action` or `ActorExt::clear_actions`
65    /// is called
66    /// ## `action`
67    /// a `Action`
68    fn add_action<P: IsA<Action>>(&self, action: &P);
69
70    /// A convenience function for setting the name of a `Action`
71    /// while adding it to the list of actions applied to `self`
72    ///
73    /// This function is the logical equivalent of:
74    ///
75    ///
76    /// ```C
77    ///   clutter_actor_meta_set_name (CLUTTER_ACTOR_META (action), name);
78    ///   clutter_actor_add_action (self, action);
79    /// ```
80    /// ## `name`
81    /// the name to set on the action
82    /// ## `action`
83    /// a `Action`
84    fn add_action_with_name<P: IsA<Action>>(&self, name: &str, action: &P);
85
86    /// Adds `child` to the children of `self`.
87    ///
88    /// This function will acquire a reference on `child` that will only
89    /// be released when calling `ActorExt::remove_child`.
90    ///
91    /// This function will take into consideration the `Actor:depth`
92    /// of `child`, and will keep the list of children sorted.
93    ///
94    /// This function will emit the `Container::actor-added` signal
95    /// on `self`.
96    /// ## `child`
97    /// a `Actor`
98    fn add_child<P: IsA<Actor>>(&self, child: &P);
99
100    /// Adds `constraint` to the list of `Constraint`<!-- -->s applied
101    /// to `self`
102    ///
103    /// The `Actor` will hold a reference on the `constraint` until
104    /// either `ActorExt::remove_constraint` or
105    /// `ActorExt::clear_constraints` is called.
106    /// ## `constraint`
107    /// a `Constraint`
108    fn add_constraint<P: IsA<Constraint>>(&self, constraint: &P);
109
110    /// A convenience function for setting the name of a `Constraint`
111    /// while adding it to the list of constraints applied to `self`
112    ///
113    /// This function is the logical equivalent of:
114    ///
115    ///
116    /// ```C
117    ///   clutter_actor_meta_set_name (CLUTTER_ACTOR_META (constraint), name);
118    ///   clutter_actor_add_constraint (self, constraint);
119    /// ```
120    /// ## `name`
121    /// the name to set on the constraint
122    /// ## `constraint`
123    /// a `Constraint`
124    fn add_constraint_with_name<P: IsA<Constraint>>(&self, name: &str, constraint: &P);
125
126    /// Adds `effect` to the list of `Effect`<!-- -->s applied to `self`
127    ///
128    /// The `Actor` will hold a reference on the `effect` until either
129    /// `ActorExt::remove_effect` or `ActorExt::clear_effects` is
130    /// called.
131    ///
132    /// Note that as `Effect` is initially unowned,
133    /// `ActorExt::add_effect` will sink any floating reference on `effect`.
134    /// ## `effect`
135    /// a `Effect`
136    fn add_effect<P: IsA<Effect>>(&self, effect: &P);
137
138    /// A convenience function for setting the name of a `Effect`
139    /// while adding it to the list of effects applied to `self`.
140    ///
141    /// Note that as `Effect` is initially unowned,
142    /// `ActorExt::add_effect_with_name` will sink any floating
143    /// reference on `effect`.
144    ///
145    /// This function is the logical equivalent of:
146    ///
147    ///
148    /// ```C
149    ///   clutter_actor_meta_set_name (CLUTTER_ACTOR_META (effect), name);
150    ///   clutter_actor_add_effect (self, effect);
151    /// ```
152    /// ## `name`
153    /// the name to set on the effect
154    /// ## `effect`
155    /// a `Effect`
156    fn add_effect_with_name<P: IsA<Effect>>(&self, name: &str, effect: &P);
157
158    /// Adds a `transition` to the `Actor`'s list of animations.
159    ///
160    /// The `name` string is a per-actor unique identifier of the `transition`: only
161    /// one `Transition` can be associated to the specified `name`.
162    ///
163    /// The `transition` will be started once added.
164    ///
165    /// This function will take a reference on the `transition`.
166    ///
167    /// This function is usually called implicitly when modifying an animatable
168    /// property.
169    /// ## `name`
170    /// the name of the transition to add
171    /// ## `transition`
172    /// the `Transition` to add
173    fn add_transition<P: IsA<Transition>>(&self, name: &str, transition: &P);
174
175    /// Assigns the size of a `Actor` from the given `box_`.
176    ///
177    /// This function should only be called on the children of an actor when
178    /// overriding the `ActorClass.allocate`() virtual function.
179    ///
180    /// This function will adjust the stored allocation to take into account
181    /// the alignment flags set in the `Actor:x-align` and
182    /// `Actor:y-align` properties, as well as the margin values set in
183    /// the `Actor:margin-top`, `Actor:margin-right`,
184    /// `Actor:margin-bottom`, and `Actor:margin-left` properties.
185    ///
186    /// This function will respect the easing state of the `Actor` and
187    /// interpolate between the current allocation and the new one if the
188    /// easing state duration is a positive value.
189    ///
190    /// Actors can know from their allocation box whether they have moved
191    /// with respect to their parent actor. The `flags` parameter describes
192    /// additional information about the allocation, for instance whether
193    /// the parent has moved with respect to the stage, for example because
194    /// a grandparent's origin has moved.
195    /// ## `box_`
196    /// new allocation of the actor, in parent-relative coordinates
197    /// ## `flags`
198    /// flags that control the allocation
199    fn allocate(&self, box_: &ActorBox, flags: AllocationFlags);
200
201    /// Allocates `self` by taking into consideration the available allocation
202    /// area; an alignment factor on either axis; and whether the actor should
203    /// fill the allocation on either axis.
204    ///
205    /// The `box_` should contain the available allocation width and height;
206    /// if the x1 and y1 members of `ActorBox` are not set to 0, the
207    /// allocation will be offset by their value.
208    ///
209    /// This function takes into consideration the geometry request specified by
210    /// the `Actor:request-mode` property, and the text direction.
211    ///
212    /// This function is useful for fluid layout managers using legacy alignment
213    /// flags. Newly written layout managers should use the `Actor:x-align`
214    /// and `Actor:y-align` properties, instead, and just call
215    /// `ActorExt::allocate` inside their `ActorClass.allocate`()
216    /// implementation.
217    /// ## `box_`
218    /// a `ActorBox`, containing the available width and height
219    /// ## `x_align`
220    /// the horizontal alignment, between 0 and 1
221    /// ## `y_align`
222    /// the vertical alignment, between 0 and 1
223    /// ## `x_fill`
224    /// whether the actor should fill horizontally
225    /// ## `y_fill`
226    /// whether the actor should fill vertically
227    /// ## `flags`
228    /// allocation flags to be passed to `ActorExt::allocate`
229    fn allocate_align_fill(
230        &self,
231        box_: &ActorBox,
232        x_align: f64,
233        y_align: f64,
234        x_fill: bool,
235        y_fill: bool,
236        flags: AllocationFlags,
237    );
238
239    /// Allocates `self` taking into account the `Actor`'s
240    /// preferred size, but limiting it to the maximum available width
241    /// and height provided.
242    ///
243    /// This function will do the right thing when dealing with the
244    /// actor's request mode.
245    ///
246    /// The implementation of this function is equivalent to:
247    ///
248    ///
249    /// ```C
250    ///   if (request_mode == CLUTTER_REQUEST_HEIGHT_FOR_WIDTH)
251    ///     {
252    ///       clutter_actor_get_preferred_width (self, available_height,
253    ///                                          &min_width,
254    ///                                          &natural_width);
255    ///       width = CLAMP (natural_width, min_width, available_width);
256    ///
257    ///       clutter_actor_get_preferred_height (self, width,
258    ///                                           &min_height,
259    ///                                           &natural_height);
260    ///       height = CLAMP (natural_height, min_height, available_height);
261    ///     }
262    ///   else if (request_mode == CLUTTER_REQUEST_WIDTH_FOR_HEIGHT)
263    ///     {
264    ///       clutter_actor_get_preferred_height (self, available_width,
265    ///                                           &min_height,
266    ///                                           &natural_height);
267    ///       height = CLAMP (natural_height, min_height, available_height);
268    ///
269    ///       clutter_actor_get_preferred_width (self, height,
270    ///                                          &min_width,
271    ///                                          &natural_width);
272    ///       width = CLAMP (natural_width, min_width, available_width);
273    ///     }
274    ///   else if (request_mode == CLUTTER_REQUEST_CONTENT_SIZE)
275    ///     {
276    ///       clutter_content_get_preferred_size (content, &natural_width, &natural_height);
277    ///
278    ///       width = CLAMP (natural_width, 0, available_width);
279    ///       height = CLAMP (natural_height, 0, available_height);
280    ///     }
281    ///
282    ///   box.x1 = x; box.y1 = y;
283    ///   box.x2 = box.x1 + available_width;
284    ///   box.y2 = box.y1 + available_height;
285    ///   clutter_actor_allocate (self, &box, flags);
286    /// ```
287    ///
288    /// This function can be used by fluid layout managers to allocate
289    /// an actor's preferred size without making it bigger than the area
290    /// available for the container.
291    /// ## `x`
292    /// the actor's X coordinate
293    /// ## `y`
294    /// the actor's Y coordinate
295    /// ## `available_width`
296    /// the maximum available width, or -1 to use the
297    ///  actor's natural width
298    /// ## `available_height`
299    /// the maximum available height, or -1 to use the
300    ///  actor's natural height
301    /// ## `flags`
302    /// flags controlling the allocation
303    fn allocate_available_size(
304        &self,
305        x: f32,
306        y: f32,
307        available_width: f32,
308        available_height: f32,
309        flags: AllocationFlags,
310    );
311
312    /// Allocates the natural size of `self`.
313    ///
314    /// This function is a utility call for `Actor` implementations
315    /// that allocates the actor's preferred natural size. It can be used
316    /// by fixed layout managers (like `Group` or so called
317    /// 'composite actors') inside the ClutterActor::allocate
318    /// implementation to give each child exactly how much space it
319    /// requires, regardless of the size of the parent.
320    ///
321    /// This function is not meant to be used by applications. It is also
322    /// not meant to be used outside the implementation of the
323    /// `ActorClass.allocate` virtual function.
324    /// ## `flags`
325    /// flags controlling the allocation
326    fn allocate_preferred_size(&self, flags: AllocationFlags);
327
328    /// Transforms `point` in coordinates relative to the actor into
329    /// ancestor-relative coordinates using the relevant transform
330    /// stack (i.e. scale, rotation, etc).
331    ///
332    /// If `ancestor` is `None` the ancestor will be the `Stage`. In
333    /// this case, the coordinates returned will be the coordinates on
334    /// the stage before the projection is applied. This is different from
335    /// the behaviour of `ActorExt::apply_transform_to_point`.
336    /// ## `ancestor`
337    /// A `Actor` ancestor, or `None` to use the
338    ///  default `Stage`
339    /// ## `point`
340    /// A point as `Vertex`
341    /// ## `vertex`
342    /// The translated `Vertex`
343    fn apply_relative_transform_to_point<P: IsA<Actor>>(
344        &self,
345        ancestor: Option<&P>,
346        point: &Vertex,
347    ) -> Vertex;
348
349    /// Transforms `point` in coordinates relative to the actor
350    /// into screen-relative coordinates with the current actor
351    /// transformation (i.e. scale, rotation, etc)
352    /// ## `point`
353    /// A point as `Vertex`
354    /// ## `vertex`
355    /// The translated `Vertex`
356    fn apply_transform_to_point(&self, point: &Vertex) -> Vertex;
357
358    /// Binds a `gio::ListModel` to a `Actor`.
359    ///
360    /// If the `Actor` was already bound to a `gio::ListModel`, the previous
361    /// binding is destroyed.
362    ///
363    /// The existing children of `Actor` are destroyed when setting a
364    /// model, and new children are created and added, representing the contents
365    /// of the `model`. The `Actor` is updated whenever the `model` changes.
366    /// If `model` is `None`, the `Actor` is left empty.
367    ///
368    /// When a `Actor` is bound to a model, adding and removing children
369    /// directly is undefined behaviour.
370    /// ## `model`
371    /// a `gio::ListModel`
372    /// ## `create_child_func`
373    /// a function that creates `Actor` instances
374    ///  from the contents of the `model`
375    /// ## `user_data`
376    /// user data passed to `create_child_func`
377    /// ## `notify`
378    /// function called when unsetting the `model`
379    fn bind_model<P: IsA<gio::ListModel>, Q: Fn(&glib::Object) -> Actor + 'static>(
380        &self,
381        model: Option<&P>,
382        create_child_func: Q,
383    );
384
385    //fn bind_model_with_properties<P: IsA<gio::ListModel>>(&self, model: &P, child_type: glib::types::Type, first_model_property: &str, : /*Unknown conversion*//*Unimplemented*/Fundamental: VarArgs);
386
387    /// Clears the list of actions applied to `self`
388    fn clear_actions(&self);
389
390    /// Clears the list of constraints applied to `self`
391    fn clear_constraints(&self);
392
393    /// Clears the list of effects applied to `self`
394    fn clear_effects(&self);
395
396    /// Determines if `descendant` is contained inside `self` (either as an
397    /// immediate child, or as a deeper descendant). If `self` and
398    /// `descendant` point to the same actor then it will also return `true`.
399    /// ## `descendant`
400    /// A `Actor`, possibly contained in `self`
401    ///
402    /// # Returns
403    ///
404    /// whether `descendent` is contained within `self`
405    fn contains<P: IsA<Actor>>(&self, descendant: &P) -> bool;
406
407    /// Run the next stage of the paint sequence. This function should only
408    /// be called within the implementation of the ‘run’ virtual of a
409    /// `Effect`. It will cause the run method of the next effect to
410    /// be applied, or it will paint the actual actor if the current effect
411    /// is the last effect in the chain.
412    fn continue_paint(&self);
413
414    /// Creates a `pango::Context` for the given actor. The `pango::Context`
415    /// is already configured using the appropriate font map, resolution
416    /// and font options.
417    ///
418    /// See also `ActorExt::get_pango_context`.
419    ///
420    /// # Returns
421    ///
422    /// the newly created `pango::Context`.
423    ///  Use `gobject::ObjectExt::unref` on the returned value to deallocate its
424    ///  resources
425    fn create_pango_context(&self) -> Option<pango::Context>;
426
427    /// Creates a new `pango::Layout` from the same `pango::Context` used
428    /// by the `Actor`. The `pango::Layout` is already configured
429    /// with the font map, resolution and font options, and the
430    /// given `text`.
431    ///
432    /// If you want to keep around a `pango::Layout` created by this
433    /// function you will have to connect to the `Backend::font-changed`
434    /// and `Backend::resolution-changed` signals, and call
435    /// `pango::Layout::context_changed` in response to them.
436    /// ## `text`
437    /// the text to set on the `pango::Layout`, or `None`
438    ///
439    /// # Returns
440    ///
441    /// the newly created `pango::Layout`.
442    ///  Use `gobject::ObjectExt::unref` when done
443    fn create_pango_layout(&self, text: Option<&str>) -> Option<pango::Layout>;
444
445    /// Destroys an actor. When an actor is destroyed, it will break any
446    /// references it holds to other objects. If the actor is inside a
447    /// container, the actor will be removed.
448    ///
449    /// When you destroy a container, its children will be destroyed as well.
450    ///
451    /// Note: you cannot destroy the `Stage` returned by
452    /// `Stage::get_default`.
453    fn destroy(&self);
454
455    /// Destroys all children of `self`.
456    ///
457    /// This function releases the reference added by inserting a child
458    /// actor in the list of children of `self`, and ensures that the
459    /// `Actor::destroy` signal is emitted on each child of the
460    /// actor.
461    ///
462    /// By default, `Actor` will emit the `Actor::destroy` signal
463    /// when its reference count drops to 0; the default handler of the
464    /// `Actor::destroy` signal will destroy all the children of an
465    /// actor. This function ensures that all children are destroyed, instead
466    /// of just removed from `self`, unlike `ActorExt::remove_all_children`
467    /// which will merely release the reference and remove each child.
468    ///
469    /// Unless you acquired an additional reference on each child of `self`
470    /// prior to calling `ActorExt::remove_all_children` and want to reuse
471    /// the actors, you should use `ActorExt::destroy_all_children` in
472    /// order to make sure that children are destroyed and signal handlers
473    /// are disconnected even in cases where circular references prevent this
474    /// from automatically happening through reference counting alone.
475    fn destroy_all_children(&self);
476
477    /// This function is used to emit an event on the main stage.
478    /// You should rarely need to use this function, except for
479    /// synthetising events.
480    /// ## `event`
481    /// a `ClutterEvent`
482    /// ## `capture`
483    /// `true` if event in in capture phase, `false` otherwise.
484    ///
485    /// # Returns
486    ///
487    /// the return value from the signal emission: `true`
488    ///  if the actor handled the event, or `false` if the event was
489    ///  not handled
490    fn event(&self, event: &Event, capture: bool) -> bool;
491
492    //fn get_abs_allocation_vertices(&self, verts: /*Unimplemented*/FixedArray TypeId { ns_id: 1, id: 16 }; 4);
493
494    /// Returns the accessible object that describes the actor to an
495    /// assistive technology.
496    ///
497    /// If no class-specific `atk::Object` implementation is available for the
498    /// actor instance in question, it will inherit an `atk::Object`
499    /// implementation from the first ancestor class for which such an
500    /// implementation is defined.
501    ///
502    /// The documentation of the <ulink
503    /// url="http://developer.gnome.org/doc/API/2.0/atk/index.html">ATK`</ulink>`
504    /// library contains more information about accessible objects and
505    /// their uses.
506    ///
507    /// # Returns
508    ///
509    /// the `atk::Object` associated with `actor`
510    fn get_accessible(&self) -> Option<atk::Object>;
511
512    /// Retrieves the `Action` with the given name in the list
513    /// of actions applied to `self`
514    /// ## `name`
515    /// the name of the action to retrieve
516    ///
517    /// # Returns
518    ///
519    /// a `Action` for the given
520    ///  name, or `None`. The returned `Action` is owned by the
521    ///  actor and it should not be unreferenced directly
522    fn get_action(&self, name: &str) -> Option<Action>;
523
524    /// Retrieves the list of actions applied to `self`
525    ///
526    /// # Returns
527    ///
528    /// a copy
529    ///  of the list of `Action`<!-- -->s. The contents of the list are
530    ///  owned by the `Actor`. Use `glib::List::free` to free the resources
531    ///  allocated by the returned `glib::List`
532    fn get_actions(&self) -> Vec<Action>;
533
534    /// Gets the layout box an actor has been assigned. The allocation can
535    /// only be assumed valid inside a `paint` method; anywhere else, it
536    /// may be out-of-date.
537    ///
538    /// An allocation does not incorporate the actor's scale or anchor point;
539    /// those transformations do not affect layout, only rendering.
540    ///
541    /// Do not call any of the clutter_actor_get_allocation_*() family
542    /// of functions inside the implementation of the `get_preferred_width`
543    /// or `get_preferred_height` virtual functions.
544    /// ## `box_`
545    /// the function fills this in with the actor's allocation
546    fn get_allocation_box(&self) -> ActorBox;
547
548    //fn get_allocation_vertices<P: IsA<Actor>>(&self, ancestor: Option<&P>, verts: /*Unimplemented*/FixedArray TypeId { ns_id: 1, id: 16 }; 4);
549
550    /// Retrieves the color set using `ActorExt::set_background_color`.
551    /// ## `color`
552    /// return location for a `Color`
553    fn get_background_color(&self) -> Color;
554
555    /// Retrieves the actor at the given `index_` inside the list of
556    /// children of `self`.
557    /// ## `index_`
558    /// the position in the list of children
559    ///
560    /// # Returns
561    ///
562    /// a pointer to a `Actor`, or `None`
563    fn get_child_at_index(&self, index_: i32) -> Option<Actor>;
564
565    /// Retrieves the child transformation matrix set using
566    /// `ActorExt::set_child_transform`; if none is currently set,
567    /// the `transform` matrix will be initialized to the identity matrix.
568    /// ## `transform`
569    /// a `Matrix`
570    fn get_child_transform(&self) -> Matrix;
571
572    /// Retrieves the list of children of `self`.
573    ///
574    /// # Returns
575    ///
576    /// A newly
577    ///  allocated `glib::List` of `Actor`<!-- -->s. Use `glib::List::free` when
578    ///  done.
579    fn get_children(&self) -> Vec<Actor>;
580
581    /// Gets the clip area for `self`, if any is set.
582    /// ## `xoff`
583    /// return location for the X offset of
584    ///  the clip rectangle, or `None`
585    /// ## `yoff`
586    /// return location for the Y offset of
587    ///  the clip rectangle, or `None`
588    /// ## `width`
589    /// return location for the width of
590    ///  the clip rectangle, or `None`
591    /// ## `height`
592    /// return location for the height of
593    ///  the clip rectangle, or `None`
594    fn get_clip(&self) -> (f32, f32, f32, f32);
595
596    /// Retrieves the value set using `ActorExt::set_clip_to_allocation`
597    ///
598    /// # Returns
599    ///
600    /// `true` if the `Actor` is clipped to its allocation
601    fn get_clip_to_allocation(&self) -> bool;
602
603    /// Retrieves the `Constraint` with the given name in the list
604    /// of constraints applied to `self`
605    /// ## `name`
606    /// the name of the constraint to retrieve
607    ///
608    /// # Returns
609    ///
610    /// a `Constraint` for the given
611    ///  name, or `None`. The returned `Constraint` is owned by the
612    ///  actor and it should not be unreferenced directly
613    fn get_constraint(&self, name: &str) -> Option<Constraint>;
614
615    /// Retrieves the list of constraints applied to `self`
616    ///
617    /// # Returns
618    ///
619    /// a copy
620    ///  of the list of `Constraint`<!-- -->s. The contents of the list are
621    ///  owned by the `Actor`. Use `glib::List::free` to free the resources
622    ///  allocated by the returned `glib::List`
623    fn get_constraints(&self) -> Vec<Constraint>;
624
625    /// Retrieves the contents of `self`.
626    ///
627    /// # Returns
628    ///
629    /// a pointer to the `Content` instance,
630    ///  or `None` if none was set
631    fn get_content(&self) -> Option<Content>;
632
633    /// Retrieves the bounding box for the `Content` of `self`.
634    ///
635    /// The bounding box is relative to the actor's allocation.
636    ///
637    /// If no `Content` is set for `self`, or if `self` has not been
638    /// allocated yet, then the result is undefined.
639    ///
640    /// The content box is guaranteed to be, at most, as big as the allocation
641    /// of the `Actor`.
642    ///
643    /// If the `Content` used by the actor has a preferred size, then
644    /// it is possible to modify the content box by using the
645    /// `Actor:content-gravity` property.
646    /// ## `box_`
647    /// the return location for the bounding
648    ///  box for the `Content`
649    fn get_content_box(&self) -> ActorBox;
650
651    /// Retrieves the content gravity as set using
652    /// `ActorExt::set_content_gravity`.
653    ///
654    /// # Returns
655    ///
656    /// the content gravity
657    fn get_content_gravity(&self) -> ContentGravity;
658
659    /// Retrieves the repeat policy for a `Actor` set by
660    /// `ActorExt::set_content_repeat`.
661    ///
662    /// # Returns
663    ///
664    /// the content repeat policy
665    fn get_content_repeat(&self) -> ContentRepeat;
666
667    /// Retrieves the values set using `ActorExt::set_content_scaling_filters`.
668    /// ## `min_filter`
669    /// return location for the minification
670    ///  filter, or `None`
671    /// ## `mag_filter`
672    /// return location for the magnification
673    ///  filter, or `None`
674    fn get_content_scaling_filters(&self) -> (ScalingFilter, ScalingFilter);
675
676    /// Retrieves the default paint volume for `self`.
677    ///
678    /// This function provides the same `PaintVolume` that would be
679    /// computed by the default implementation inside `Actor` of the
680    /// `ActorClass.get_paint_volume`() virtual function.
681    ///
682    /// This function should only be used by `Actor` subclasses that
683    /// cannot chain up to the parent implementation when computing their
684    /// paint volume.
685    ///
686    /// # Returns
687    ///
688    /// a pointer to the default
689    ///  `PaintVolume`, relative to the `Actor`, or `None` if
690    ///  the actor could not compute a valid paint volume. The returned value
691    ///  is not guaranteed to be stable across multiple frames, so if you
692    ///  want to retain it, you will need to copy it using
693    ///  `PaintVolume::copy`.
694    fn get_default_paint_volume(&self) -> Option<PaintVolume>;
695
696    /// Retrieves the delay that should be applied when tweening animatable
697    /// properties.
698    ///
699    /// # Returns
700    ///
701    /// a delay, in milliseconds
702    fn get_easing_delay(&self) -> u32;
703
704    /// Retrieves the duration of the tweening for animatable
705    /// properties of `self` for the current easing state.
706    ///
707    /// # Returns
708    ///
709    /// the duration of the tweening, in milliseconds
710    fn get_easing_duration(&self) -> u32;
711
712    /// Retrieves the easing mode for the tweening of animatable properties
713    /// of `self` for the current easing state.
714    ///
715    /// # Returns
716    ///
717    /// an easing mode
718    fn get_easing_mode(&self) -> AnimationMode;
719
720    /// Retrieves the `Effect` with the given name in the list
721    /// of effects applied to `self`
722    /// ## `name`
723    /// the name of the effect to retrieve
724    ///
725    /// # Returns
726    ///
727    /// a `Effect` for the given
728    ///  name, or `None`. The returned `Effect` is owned by the
729    ///  actor and it should not be unreferenced directly
730    fn get_effect(&self, name: &str) -> Option<Effect>;
731
732    /// Retrieves the `Effect`<!-- -->s applied on `self`, if any
733    ///
734    /// # Returns
735    ///
736    /// a list
737    ///  of `Effect`<!-- -->s, or `None`. The elements of the returned
738    ///  list are owned by Clutter and they should not be freed. You should
739    ///  free the returned list using `glib::List::free` when done
740    fn get_effects(&self) -> Vec<Effect>;
741
742    /// Retrieves the first child of `self`.
743    ///
744    /// The returned pointer is only valid until the scene graph changes; it
745    /// is not safe to modify the list of children of `self` while iterating
746    /// it.
747    ///
748    /// # Returns
749    ///
750    /// a pointer to a `Actor`, or `None`
751    fn get_first_child(&self) -> Option<Actor>;
752
753    /// Checks whether an actor has a fixed position set (and will thus be
754    /// unaffected by any layout manager).
755    ///
756    /// # Returns
757    ///
758    /// `true` if the fixed position is set on the actor
759    fn get_fixed_position_set(&self) -> bool;
760
761    /// Retrieves the flags set on `self`
762    ///
763    /// # Returns
764    ///
765    /// a bitwise or of `ActorFlags` or 0
766    fn get_flags(&self) -> ActorFlags;
767
768    /// Retrieves the height of a `Actor`.
769    ///
770    /// If the actor has a valid allocation, this function will return the
771    /// height of the allocated area given to the actor.
772    ///
773    /// If the actor does not have a valid allocation, this function will
774    /// return the actor's natural height, that is the preferred height of
775    /// the actor.
776    ///
777    /// If you care whether you get the preferred height or the height that
778    /// has been assigned to the actor, you should probably call a different
779    /// function like `ActorExt::get_allocation_box` to retrieve the
780    /// allocated size or `ActorExt::get_preferred_height` to retrieve the
781    /// preferred height.
782    ///
783    /// If an actor has a fixed height, for instance a height that has been
784    /// assigned using `ActorExt::set_height`, the height returned will
785    /// be the same value.
786    ///
787    /// # Returns
788    ///
789    /// the height of the actor, in pixels
790    fn get_height(&self) -> f32;
791
792    /// Retrieves the last child of `self`.
793    ///
794    /// The returned pointer is only valid until the scene graph changes; it
795    /// is not safe to modify the list of children of `self` while iterating
796    /// it.
797    ///
798    /// # Returns
799    ///
800    /// a pointer to a `Actor`, or `None`
801    fn get_last_child(&self) -> Option<Actor>;
802
803    /// Retrieves the `LayoutManager` used by `self`.
804    ///
805    /// # Returns
806    ///
807    /// a pointer to the `LayoutManager`,
808    ///  or `None`
809    fn get_layout_manager(&self) -> Option<LayoutManager>;
810
811    /// Retrieves all the components of the margin of a `Actor`.
812    /// ## `margin`
813    /// return location for a `Margin`
814    fn get_margin(&self) -> Margin;
815
816    /// Retrieves the bottom margin of a `Actor`.
817    ///
818    /// # Returns
819    ///
820    /// the bottom margin
821    fn get_margin_bottom(&self) -> f32;
822
823    /// Retrieves the left margin of a `Actor`.
824    ///
825    /// # Returns
826    ///
827    /// the left margin
828    fn get_margin_left(&self) -> f32;
829
830    /// Retrieves the right margin of a `Actor`.
831    ///
832    /// # Returns
833    ///
834    /// the right margin
835    fn get_margin_right(&self) -> f32;
836
837    /// Retrieves the top margin of a `Actor`.
838    ///
839    /// # Returns
840    ///
841    /// the top margin
842    fn get_margin_top(&self) -> f32;
843
844    /// Retrieves the number of children of `self`.
845    ///
846    /// # Returns
847    ///
848    /// the number of children of an actor
849    fn get_n_children(&self) -> i32;
850
851    /// Retrieves the name of `self`.
852    ///
853    /// # Returns
854    ///
855    /// the name of the actor, or `None`. The returned string is
856    ///  owned by the actor and should not be modified or freed.
857    fn get_name(&self) -> Option<GString>;
858
859    /// Retrieves the sibling of `self` that comes after it in the list
860    /// of children of `self`'s parent.
861    ///
862    /// The returned pointer is only valid until the scene graph changes; it
863    /// is not safe to modify the list of children of `self` while iterating
864    /// it.
865    ///
866    /// # Returns
867    ///
868    /// a pointer to a `Actor`, or `None`
869    fn get_next_sibling(&self) -> Option<Actor>;
870
871    /// Retrieves whether to redirect the actor to an offscreen buffer, as
872    /// set by `ActorExt::set_offscreen_redirect`.
873    ///
874    /// # Returns
875    ///
876    /// the value of the offscreen-redirect property of the actor
877    fn get_offscreen_redirect(&self) -> OffscreenRedirect;
878
879    /// Retrieves the opacity value of an actor, as set by
880    /// `ActorExt::set_opacity`.
881    ///
882    /// For retrieving the absolute opacity of the actor inside a paint
883    /// virtual function, see `ActorExt::get_paint_opacity`.
884    ///
885    /// # Returns
886    ///
887    /// the opacity of the actor
888    fn get_opacity(&self) -> u8;
889
890    /// Retrieves the paint volume of the passed `Actor`, and
891    /// transforms it into a 2D bounding box in stage coordinates.
892    ///
893    /// This function is useful to determine the on screen area occupied by
894    /// the actor. The box is only an approximation and may often be
895    /// considerably larger due to the optimizations used to calculate the
896    /// box. The box is never smaller though, so it can reliably be used
897    /// for culling.
898    ///
899    /// There are times when a 2D paint box can't be determined, e.g.
900    /// because the actor isn't yet parented under a stage or because
901    /// the actor is unable to determine a paint volume.
902    /// ## `box_`
903    /// return location for a `ActorBox`
904    ///
905    /// # Returns
906    ///
907    /// `true` if a 2D paint box could be determined, else
908    /// `false`.
909    fn get_paint_box(&self) -> Option<ActorBox>;
910
911    /// Retrieves the absolute opacity of the actor, as it appears on the stage.
912    ///
913    /// This function traverses the hierarchy chain and composites the opacity of
914    /// the actor with that of its parents.
915    ///
916    /// This function is intended for subclasses to use in the paint virtual
917    /// function, to paint themselves with the correct opacity.
918    ///
919    /// # Returns
920    ///
921    /// The actor opacity value.
922    fn get_paint_opacity(&self) -> u8;
923
924    /// Retrieves the 'paint' visibility of an actor recursively checking for non
925    /// visible parents.
926    ///
927    /// This is by definition the same as `CLUTTER_ACTOR_IS_MAPPED`.
928    ///
929    /// # Returns
930    ///
931    /// `true` if the actor is visibile and will be painted.
932    fn get_paint_visibility(&self) -> bool;
933
934    /// Retrieves the paint volume of the passed `Actor`, or `None`
935    /// when a paint volume can't be determined.
936    ///
937    /// The paint volume is defined as the 3D space occupied by an actor
938    /// when being painted.
939    ///
940    /// This function will call the `ActorClass.get_paint_volume`()
941    /// virtual function of the `Actor` class. Sub-classes of `Actor`
942    /// should not usually care about overriding the default implementation,
943    /// unless they are, for instance: painting outside their allocation, or
944    /// actors with a depth factor (not in terms of `Actor:depth` but real
945    /// 3D depth).
946    ///
947    /// Note: 2D actors overriding `ActorClass.get_paint_volume`()
948    /// should ensure that their volume has a depth of 0. (This will be true
949    /// as long as you don't call `PaintVolume::set_depth`.)
950    ///
951    /// # Returns
952    ///
953    /// a pointer to a `PaintVolume`,
954    ///  or `None` if no volume could be determined. The returned pointer
955    ///  is not guaranteed to be valid across multiple frames; if you want
956    ///  to keep it, you will need to copy it using `PaintVolume::copy`.
957    fn get_paint_volume(&self) -> Option<PaintVolume>;
958
959    /// Retrieves the `pango::Context` for `self`. The actor's `pango::Context`
960    /// is already configured using the appropriate font map, resolution
961    /// and font options.
962    ///
963    /// Unlike `ActorExt::create_pango_context`, this context is owend
964    /// by the `Actor` and it will be updated each time the options
965    /// stored by the `Backend` change.
966    ///
967    /// You can use the returned `pango::Context` to create a `pango::Layout`
968    /// and render text using `cogl_pango_render_layout` to reuse the
969    /// glyphs cache also used by Clutter.
970    ///
971    /// # Returns
972    ///
973    /// the `pango::Context` for a `Actor`.
974    ///  The returned `pango::Context` is owned by the actor and should not be
975    ///  unreferenced by the application code
976    fn get_pango_context(&self) -> Option<pango::Context>;
977
978    /// Retrieves the parent of `self`.
979    ///
980    /// # Returns
981    ///
982    /// The `Actor` parent, or `None`
983    ///  if no parent is set
984    fn get_parent(&self) -> Option<Actor>;
985
986    /// Retrieves the coordinates of the `Actor:pivot-point`.
987    /// ## `pivot_x`
988    /// return location for the normalized X
989    ///  coordinate of the pivot point, or `None`
990    /// ## `pivot_y`
991    /// return location for the normalized Y
992    ///  coordinate of the pivot point, or `None`
993    fn get_pivot_point(&self) -> (f32, f32);
994
995    /// Retrieves the Z component of the `Actor:pivot-point`.
996    fn get_pivot_point_z(&self) -> f32;
997
998    /// This function tries to "do what you mean" and tell you where the
999    /// actor is, prior to any transformations. Retrieves the fixed
1000    /// position of an actor in pixels, if one has been set; otherwise, if
1001    /// the allocation is valid, returns the actor's allocated position;
1002    /// otherwise, returns 0,0.
1003    ///
1004    /// The returned position is in pixels.
1005    /// ## `x`
1006    /// return location for the X coordinate, or `None`
1007    /// ## `y`
1008    /// return location for the Y coordinate, or `None`
1009    fn get_position(&self) -> (f32, f32);
1010
1011    /// Computes the requested minimum and natural heights for an actor,
1012    /// or if they are already computed, returns the cached values.
1013    ///
1014    /// An actor may not get its request - depending on the layout
1015    /// manager that's in effect.
1016    ///
1017    /// A request should not incorporate the actor's scale or anchor point;
1018    /// those transformations do not affect layout, only rendering.
1019    /// ## `for_width`
1020    /// available width to assume in computing desired height,
1021    ///  or a negative value to indicate that no width is defined
1022    /// ## `min_height_p`
1023    /// return location for minimum height,
1024    ///  or `None`
1025    /// ## `natural_height_p`
1026    /// return location for natural
1027    ///  height, or `None`
1028    fn get_preferred_height(&self, for_width: f32) -> (f32, f32);
1029
1030    /// Computes the preferred minimum and natural size of an actor, taking into
1031    /// account the actor's geometry management (either height-for-width
1032    /// or width-for-height).
1033    ///
1034    /// The width and height used to compute the preferred height and preferred
1035    /// width are the actor's natural ones.
1036    ///
1037    /// If you need to control the height for the preferred width, or the width for
1038    /// the preferred height, you should use `ActorExt::get_preferred_width`
1039    /// and `ActorExt::get_preferred_height`, and check the actor's preferred
1040    /// geometry management using the `Actor:request-mode` property.
1041    /// ## `min_width_p`
1042    /// return location for the minimum
1043    ///  width, or `None`
1044    /// ## `min_height_p`
1045    /// return location for the minimum
1046    ///  height, or `None`
1047    /// ## `natural_width_p`
1048    /// return location for the natural
1049    ///  width, or `None`
1050    /// ## `natural_height_p`
1051    /// return location for the natural
1052    ///  height, or `None`
1053    fn get_preferred_size(&self) -> (f32, f32, f32, f32);
1054
1055    /// Computes the requested minimum and natural widths for an actor,
1056    /// optionally depending on the specified height, or if they are
1057    /// already computed, returns the cached values.
1058    ///
1059    /// An actor may not get its request - depending on the layout
1060    /// manager that's in effect.
1061    ///
1062    /// A request should not incorporate the actor's scale or anchor point;
1063    /// those transformations do not affect layout, only rendering.
1064    /// ## `for_height`
1065    /// available height when computing the preferred width,
1066    ///  or a negative value to indicate that no height is defined
1067    /// ## `min_width_p`
1068    /// return location for minimum width,
1069    ///  or `None`
1070    /// ## `natural_width_p`
1071    /// return location for the natural
1072    ///  width, or `None`
1073    fn get_preferred_width(&self, for_height: f32) -> (f32, f32);
1074
1075    /// Retrieves the sibling of `self` that comes before it in the list
1076    /// of children of `self`'s parent.
1077    ///
1078    /// The returned pointer is only valid until the scene graph changes; it
1079    /// is not safe to modify the list of children of `self` while iterating
1080    /// it.
1081    ///
1082    /// # Returns
1083    ///
1084    /// a pointer to a `Actor`, or `None`
1085    fn get_previous_sibling(&self) -> Option<Actor>;
1086
1087    /// Checks whether `self` is marked as reactive.
1088    ///
1089    /// # Returns
1090    ///
1091    /// `true` if the actor is reactive
1092    fn get_reactive(&self) -> bool;
1093
1094    /// Retrieves the geometry request mode of `self`
1095    ///
1096    /// # Returns
1097    ///
1098    /// the request mode for the actor
1099    fn get_request_mode(&self) -> RequestMode;
1100
1101    /// Retrieves the angle of rotation set by `ActorExt::set_rotation_angle`.
1102    /// ## `axis`
1103    /// the axis of the rotation
1104    ///
1105    /// # Returns
1106    ///
1107    /// the angle of rotation, in degrees
1108    fn get_rotation_angle(&self, axis: RotateAxis) -> f64;
1109
1110    /// Retrieves an actors scale factors.
1111    /// ## `scale_x`
1112    /// Location to store horizonal
1113    ///  scale factor, or `None`.
1114    /// ## `scale_y`
1115    /// Location to store vertical
1116    ///  scale factor, or `None`.
1117    fn get_scale(&self) -> (f64, f64);
1118
1119    /// Retrieves the scaling factor along the Z axis, as set using
1120    /// `ActorExt::set_scale_z`.
1121    ///
1122    /// # Returns
1123    ///
1124    /// the scaling factor along the Z axis
1125    fn get_scale_z(&self) -> f64;
1126
1127    /// This function tries to "do what you mean" and return
1128    /// the size an actor will have. If the actor has a valid
1129    /// allocation, the allocation will be returned; otherwise,
1130    /// the actors natural size request will be returned.
1131    ///
1132    /// If you care whether you get the request vs. the allocation, you
1133    /// should probably call a different function like
1134    /// `ActorExt::get_allocation_box` or
1135    /// `ActorExt::get_preferred_width`.
1136    /// ## `width`
1137    /// return location for the width, or `None`.
1138    /// ## `height`
1139    /// return location for the height, or `None`.
1140    fn get_size(&self) -> (f32, f32);
1141
1142    /// Retrieves the `Stage` where `self` is contained.
1143    ///
1144    /// # Returns
1145    ///
1146    /// the stage
1147    ///  containing the actor, or `None`
1148    fn get_stage(&self) -> Option<Stage>;
1149
1150    /// Retrieves the value set using `ActorExt::set_text_direction`
1151    ///
1152    /// If no text direction has been previously set, the default text
1153    /// direction, as returned by `clutter_get_default_text_direction`, will
1154    /// be returned instead
1155    ///
1156    /// # Returns
1157    ///
1158    /// the `TextDirection` for the actor
1159    fn get_text_direction(&self) -> TextDirection;
1160
1161    /// Retrieves the current transformation matrix of a `Actor`.
1162    /// ## `transform`
1163    /// a `Matrix`
1164    fn get_transform(&self) -> Matrix;
1165
1166    /// Retrieves the 3D paint volume of an actor like
1167    /// `ActorExt::get_paint_volume` does (Please refer to the
1168    /// documentation of `ActorExt::get_paint_volume` for more
1169    /// details.) and it additionally transforms the paint volume into the
1170    /// coordinate space of `relative_to_ancestor`. (Or the stage if `None`
1171    /// is passed for `relative_to_ancestor`)
1172    ///
1173    /// This can be used by containers that base their paint volume on
1174    /// the volume of their children. Such containers can query the
1175    /// transformed paint volume of all of its children and union them
1176    /// together using `PaintVolume::union`.
1177    /// ## `relative_to_ancestor`
1178    /// A `Actor` that is an ancestor of `self`
1179    ///  (or `None` for the stage)
1180    ///
1181    /// # Returns
1182    ///
1183    /// a pointer to a `PaintVolume`,
1184    ///  or `None` if no volume could be determined. The returned pointer is
1185    ///  not guaranteed to be valid across multiple frames; if you wish to
1186    ///  keep it, you will have to copy it using `PaintVolume::copy`.
1187    fn get_transformed_paint_volume<P: IsA<Actor>>(
1188        &self,
1189        relative_to_ancestor: &P,
1190    ) -> Option<PaintVolume>;
1191
1192    /// Gets the absolute position of an actor, in pixels relative to the stage.
1193    /// ## `x`
1194    /// return location for the X coordinate, or `None`
1195    /// ## `y`
1196    /// return location for the Y coordinate, or `None`
1197    fn get_transformed_position(&self) -> (f32, f32);
1198
1199    /// Gets the absolute size of an actor in pixels, taking into account the
1200    /// scaling factors.
1201    ///
1202    /// If the actor has a valid allocation, the allocated size will be used.
1203    /// If the actor has not a valid allocation then the preferred size will
1204    /// be transformed and returned.
1205    ///
1206    /// If you want the transformed allocation, see
1207    /// `ActorExt::get_abs_allocation_vertices` instead.
1208    ///
1209    /// When the actor (or one of its ancestors) is rotated around the
1210    /// X or Y axis, it no longer appears as on the stage as a rectangle, but
1211    /// as a generic quadrangle; in that case this function returns the size
1212    /// of the smallest rectangle that encapsulates the entire quad. Please
1213    /// note that in this case no assumptions can be made about the relative
1214    /// position of this envelope to the absolute position of the actor, as
1215    /// returned by `ActorExt::get_transformed_position`; if you need this
1216    /// information, you need to use `ActorExt::get_abs_allocation_vertices`
1217    /// to get the coords of the actual quadrangle.
1218    /// ## `width`
1219    /// return location for the width, or `None`
1220    /// ## `height`
1221    /// return location for the height, or `None`
1222    fn get_transformed_size(&self) -> (f32, f32);
1223
1224    /// Retrieves the `Transition` of a `Actor` by using the
1225    /// transition `name`.
1226    ///
1227    /// Transitions created for animatable properties use the name of the
1228    /// property itself, for instance the code below:
1229    ///
1230    ///
1231    /// ```C
1232    ///   clutter_actor_set_easing_duration (actor, 1000);
1233    ///   clutter_actor_set_rotation (actor, CLUTTER_Y_AXIS, 360.0, x, y, z);
1234    ///
1235    ///   transition = clutter_actor_get_transition (actor, "rotation-angle-y");
1236    ///   g_signal_connect (transition, "stopped",
1237    ///                     G_CALLBACK (on_transition_stopped),
1238    ///                     actor);
1239    /// ```
1240    ///
1241    /// will call the `on_transition_stopped` callback when the transition
1242    /// is finished.
1243    ///
1244    /// If you just want to get notifications of the completion of a transition,
1245    /// you should use the `Actor::transition-stopped` signal, using the
1246    /// transition name as the signal detail.
1247    /// ## `name`
1248    /// the name of the transition
1249    ///
1250    /// # Returns
1251    ///
1252    /// a `Transition`, or `None` is none
1253    ///  was found to match the passed name; the returned instance is owned
1254    ///  by Clutter and it should not be freed
1255    fn get_transition(&self, name: &str) -> Option<Transition>;
1256
1257    /// Retrieves the translation set using `ActorExt::set_translation`.
1258    /// ## `translate_x`
1259    /// return location for the X component
1260    ///  of the translation, or `None`
1261    /// ## `translate_y`
1262    /// return location for the Y component
1263    ///  of the translation, or `None`
1264    /// ## `translate_z`
1265    /// return location for the Z component
1266    ///  of the translation, or `None`
1267    fn get_translation(&self) -> (f32, f32, f32);
1268
1269    /// Retrieves the width of a `Actor`.
1270    ///
1271    /// If the actor has a valid allocation, this function will return the
1272    /// width of the allocated area given to the actor.
1273    ///
1274    /// If the actor does not have a valid allocation, this function will
1275    /// return the actor's natural width, that is the preferred width of
1276    /// the actor.
1277    ///
1278    /// If you care whether you get the preferred width or the width that
1279    /// has been assigned to the actor, you should probably call a different
1280    /// function like `ActorExt::get_allocation_box` to retrieve the
1281    /// allocated size or `ActorExt::get_preferred_width` to retrieve the
1282    /// preferred width.
1283    ///
1284    /// If an actor has a fixed width, for instance a width that has been
1285    /// assigned using `ActorExt::set_width`, the width returned will
1286    /// be the same value.
1287    ///
1288    /// # Returns
1289    ///
1290    /// the width of the actor, in pixels
1291    fn get_width(&self) -> f32;
1292
1293    /// Retrieves the X coordinate of a `Actor`.
1294    ///
1295    /// This function tries to "do what you mean", by returning the
1296    /// correct value depending on the actor's state.
1297    ///
1298    /// If the actor has a valid allocation, this function will return
1299    /// the X coordinate of the origin of the allocation box.
1300    ///
1301    /// If the actor has any fixed coordinate set using `ActorExt::set_x`,
1302    /// `ActorExt::set_position` or `Actor::set_geometry`, this
1303    /// function will return that coordinate.
1304    ///
1305    /// If both the allocation and a fixed position are missing, this function
1306    /// will return 0.
1307    ///
1308    /// # Returns
1309    ///
1310    /// the X coordinate, in pixels, ignoring any
1311    ///  transformation (i.e. scaling, rotation)
1312    fn get_x(&self) -> f32;
1313
1314    /// Retrieves the horizontal alignment policy set using
1315    /// `ActorExt::set_x_align`.
1316    ///
1317    /// # Returns
1318    ///
1319    /// the horizontal alignment policy.
1320    fn get_x_align(&self) -> ActorAlign;
1321
1322    /// Retrieves the value set with `ActorExt::set_x_expand`.
1323    ///
1324    /// See also: `ActorExt::needs_expand`
1325    ///
1326    /// # Returns
1327    ///
1328    /// `true` if the actor has been set to expand
1329    fn get_x_expand(&self) -> bool;
1330
1331    /// Retrieves the Y coordinate of a `Actor`.
1332    ///
1333    /// This function tries to "do what you mean", by returning the
1334    /// correct value depending on the actor's state.
1335    ///
1336    /// If the actor has a valid allocation, this function will return
1337    /// the Y coordinate of the origin of the allocation box.
1338    ///
1339    /// If the actor has any fixed coordinate set using `ActorExt::set_y`,
1340    /// `ActorExt::set_position` or `Actor::set_geometry`, this
1341    /// function will return that coordinate.
1342    ///
1343    /// If both the allocation and a fixed position are missing, this function
1344    /// will return 0.
1345    ///
1346    /// # Returns
1347    ///
1348    /// the Y coordinate, in pixels, ignoring any
1349    ///  transformation (i.e. scaling, rotation)
1350    fn get_y(&self) -> f32;
1351
1352    /// Retrieves the vertical alignment policy set using
1353    /// `ActorExt::set_y_align`.
1354    ///
1355    /// # Returns
1356    ///
1357    /// the vertical alignment policy.
1358    fn get_y_align(&self) -> ActorAlign;
1359
1360    /// Retrieves the value set with `ActorExt::set_y_expand`.
1361    ///
1362    /// See also: `ActorExt::needs_expand`
1363    ///
1364    /// # Returns
1365    ///
1366    /// `true` if the actor has been set to expand
1367    fn get_y_expand(&self) -> bool;
1368
1369    /// Retrieves the actor's position on the Z axis.
1370    ///
1371    /// # Returns
1372    ///
1373    /// the position on the Z axis.
1374    fn get_z_position(&self) -> f32;
1375
1376    /// Sets the key focus of the `Stage` including `self`
1377    /// to this `Actor`.
1378    fn grab_key_focus(&self);
1379
1380    /// Returns whether the actor has any actions applied.
1381    ///
1382    /// # Returns
1383    ///
1384    /// `true` if the actor has any actions,
1385    ///  `false` otherwise
1386    fn has_actions(&self) -> bool;
1387
1388    /// Checks if the actor has an up-to-date allocation assigned to
1389    /// it. This means that the actor should have an allocation: it's
1390    /// visible and has a parent. It also means that there is no
1391    /// outstanding relayout request in progress for the actor or its
1392    /// children (There might be other outstanding layout requests in
1393    /// progress that will cause the actor to get a new allocation
1394    /// when the stage is laid out, however).
1395    ///
1396    /// If this function returns `false`, then the actor will normally
1397    /// be allocated before it is next drawn on the screen.
1398    ///
1399    /// # Returns
1400    ///
1401    /// `true` if the actor has an up-to-date allocation
1402    fn has_allocation(&self) -> bool;
1403
1404    /// Determines whether the actor has a clip area set or not.
1405    ///
1406    /// # Returns
1407    ///
1408    /// `true` if the actor has a clip area set.
1409    fn has_clip(&self) -> bool;
1410
1411    /// Returns whether the actor has any constraints applied.
1412    ///
1413    /// # Returns
1414    ///
1415    /// `true` if the actor has any constraints,
1416    ///  `false` otherwise
1417    fn has_constraints(&self) -> bool;
1418
1419    /// Returns whether the actor has any effects applied.
1420    ///
1421    /// # Returns
1422    ///
1423    /// `true` if the actor has any effects,
1424    ///  `false` otherwise
1425    fn has_effects(&self) -> bool;
1426
1427    /// Checks whether `self` is the `Actor` that has key focus
1428    ///
1429    /// # Returns
1430    ///
1431    /// `true` if the actor has key focus, and `false` otherwise
1432    fn has_key_focus(&self) -> bool;
1433
1434    /// Asks the actor's implementation whether it may contain overlapping
1435    /// primitives.
1436    ///
1437    /// For example; Clutter may use this to determine whether the painting
1438    /// should be redirected to an offscreen buffer to correctly implement
1439    /// the opacity property.
1440    ///
1441    /// Custom actors can override the default response by implementing the
1442    /// `ActorClass.has_overlaps`() virtual function. See
1443    /// `ActorExt::set_offscreen_redirect` for more information.
1444    ///
1445    /// # Returns
1446    ///
1447    /// `true` if the actor may have overlapping primitives, and
1448    ///  `false` otherwise
1449    fn has_overlaps(&self) -> bool;
1450
1451    /// Checks whether an actor contains the pointer of a
1452    /// `InputDevice`
1453    ///
1454    /// # Returns
1455    ///
1456    /// `true` if the actor contains the pointer, and
1457    ///  `false` otherwise
1458    fn has_pointer(&self) -> bool;
1459
1460    /// Flags an actor to be hidden. A hidden actor will not be
1461    /// rendered on the stage.
1462    ///
1463    /// Actors are visible by default.
1464    ///
1465    /// If this function is called on an actor without a parent, the
1466    /// `Actor:show-on-set-parent` property will be set to `false`
1467    /// as a side-effect.
1468    fn hide(&self);
1469
1470    /// Inserts `child` into the list of children of `self`, above another
1471    /// child of `self` or, if `sibling` is `None`, above all the children
1472    /// of `self`.
1473    ///
1474    /// This function will acquire a reference on `child` that will only
1475    /// be released when calling `ActorExt::remove_child`.
1476    ///
1477    /// This function will not take into consideration the `Actor:depth`
1478    /// of `child`.
1479    ///
1480    /// This function will emit the `Container::actor-added` signal
1481    /// on `self`.
1482    /// ## `child`
1483    /// a `Actor`
1484    /// ## `sibling`
1485    /// a child of `self`, or `None`
1486    fn insert_child_above<P: IsA<Actor>, Q: IsA<Actor>>(&self, child: &P, sibling: Option<&Q>);
1487
1488    /// Inserts `child` into the list of children of `self`, using the
1489    /// given `index_`. If `index_` is greater than the number of children
1490    /// in `self`, or is less than 0, then the new child is added at the end.
1491    ///
1492    /// This function will acquire a reference on `child` that will only
1493    /// be released when calling `ActorExt::remove_child`.
1494    ///
1495    /// This function will not take into consideration the `Actor:depth`
1496    /// of `child`.
1497    ///
1498    /// This function will emit the `Container::actor-added` signal
1499    /// on `self`.
1500    /// ## `child`
1501    /// a `Actor`
1502    /// ## `index_`
1503    /// the index
1504    fn insert_child_at_index<P: IsA<Actor>>(&self, child: &P, index_: i32);
1505
1506    /// Inserts `child` into the list of children of `self`, below another
1507    /// child of `self` or, if `sibling` is `None`, below all the children
1508    /// of `self`.
1509    ///
1510    /// This function will acquire a reference on `child` that will only
1511    /// be released when calling `ActorExt::remove_child`.
1512    ///
1513    /// This function will not take into consideration the `Actor:depth`
1514    /// of `child`.
1515    ///
1516    /// This function will emit the `Container::actor-added` signal
1517    /// on `self`.
1518    /// ## `child`
1519    /// a `Actor`
1520    /// ## `sibling`
1521    /// a child of `self`, or `None`
1522    fn insert_child_below<P: IsA<Actor>, Q: IsA<Actor>>(&self, child: &P, sibling: Option<&Q>);
1523
1524    /// Checks whether `self` is being currently painted by a `Clone`
1525    ///
1526    /// This function is useful only inside the ::paint virtual function
1527    /// implementations or within handlers for the `Actor::paint`
1528    /// signal
1529    ///
1530    /// This function should not be used by applications
1531    ///
1532    /// # Returns
1533    ///
1534    /// `true` if the `Actor` is currently being painted
1535    ///  by a `Clone`, and `false` otherwise
1536    fn is_in_clone_paint(&self) -> bool;
1537
1538    /// Checks whether a `Actor` has been set as mapped.
1539    ///
1540    /// See also `CLUTTER_ACTOR_IS_MAPPED` and `Actor:mapped`
1541    ///
1542    /// # Returns
1543    ///
1544    /// `true` if the actor is mapped
1545    fn is_mapped(&self) -> bool;
1546
1547    /// Checks whether a `Actor` is realized.
1548    ///
1549    /// See also `CLUTTER_ACTOR_IS_REALIZED` and `Actor:realized`.
1550    ///
1551    /// # Returns
1552    ///
1553    /// `true` if the actor is realized
1554    fn is_realized(&self) -> bool;
1555
1556    /// Checks whether any rotation is applied to the actor.
1557    ///
1558    /// # Returns
1559    ///
1560    /// `true` if the actor is rotated.
1561    fn is_rotated(&self) -> bool;
1562
1563    /// Checks whether the actor is scaled in either dimension.
1564    ///
1565    /// # Returns
1566    ///
1567    /// `true` if the actor is scaled.
1568    fn is_scaled(&self) -> bool;
1569
1570    /// Checks whether an actor is marked as visible.
1571    ///
1572    /// See also `CLUTTER_ACTOR_IS_VISIBLE` and `Actor:visible`.
1573    ///
1574    /// # Returns
1575    ///
1576    /// `true` if the actor visible
1577    fn is_visible(&self) -> bool;
1578
1579    /// Sets the `ActorFlags::Mapped` flag on the actor and possibly maps
1580    /// and realizes its children if they are visible. Does nothing if the
1581    /// actor is not visible.
1582    ///
1583    /// Calling this function is strongly disencouraged: the default
1584    /// implementation of `ActorClass.map`() will map all the children
1585    /// of an actor when mapping its parent.
1586    ///
1587    /// When overriding map, it is mandatory to chain up to the parent
1588    /// implementation.
1589    fn map(&self);
1590
1591    /// Moves an actor by the specified distance relative to its current
1592    /// position in pixels.
1593    ///
1594    /// This function modifies the fixed position of an actor and thus removes
1595    /// it from any layout management. Another way to move an actor is with an
1596    /// anchor point, see `Actor::set_anchor_point`, or with an additional
1597    /// translation, using `ActorExt::set_translation`.
1598    /// ## `dx`
1599    /// Distance to move Actor on X axis.
1600    /// ## `dy`
1601    /// Distance to move Actor on Y axis.
1602    fn move_by(&self, dx: f32, dy: f32);
1603
1604    /// Checks whether an actor, or any of its children, is set to expand
1605    /// horizontally or vertically.
1606    ///
1607    /// This function should only be called by layout managers that can
1608    /// assign extra space to their children.
1609    ///
1610    /// If you want to know whether the actor was explicitly set to expand,
1611    /// use `ActorExt::get_x_expand` or `ActorExt::get_y_expand`.
1612    /// ## `orientation`
1613    /// the direction of expansion
1614    ///
1615    /// # Returns
1616    ///
1617    /// `true` if the actor should expand
1618    fn needs_expand(&self, orientation: Orientation) -> bool;
1619
1620    /// Renders the actor to display.
1621    ///
1622    /// This function should not be called directly by applications.
1623    /// Call `ActorExt::queue_redraw` to queue paints, instead.
1624    ///
1625    /// This function is context-aware, and will either cause a
1626    /// regular paint or a pick paint.
1627    ///
1628    /// This function will emit the `Actor::paint` signal or
1629    /// the `Actor::pick` signal, depending on the context.
1630    ///
1631    /// This function does not paint the actor if the actor is set to 0,
1632    /// unless it is performing a pick paint.
1633    fn paint(&self);
1634
1635    /// Queues up a redraw of an actor and any children. The redraw occurs
1636    /// once the main loop becomes idle (after the current batch of events
1637    /// has been processed, roughly).
1638    ///
1639    /// Applications rarely need to call this, as redraws are handled
1640    /// automatically by modification functions.
1641    ///
1642    /// This function will not do anything if `self` is not visible, or
1643    /// if the actor is inside an invisible part of the scenegraph.
1644    ///
1645    /// Also be aware that painting is a NOP for actors with an opacity of
1646    /// 0
1647    ///
1648    /// When you are implementing a custom actor you must queue a redraw
1649    /// whenever some private state changes that will affect painting or
1650    /// picking of your actor.
1651    fn queue_redraw(&self);
1652
1653    /// Queues a redraw on `self` limited to a specific, actor-relative
1654    /// rectangular area.
1655    ///
1656    /// If `clip` is `None` this function is equivalent to
1657    /// `ActorExt::queue_redraw`.
1658    /// ## `clip`
1659    /// a rectangular clip region, or `None`
1660    fn queue_redraw_with_clip(&self, clip: Option<&cairo::RectangleInt>);
1661
1662    /// Indicates that the actor's size request or other layout-affecting
1663    /// properties may have changed. This function is used inside `Actor`
1664    /// subclass implementations, not by applications directly.
1665    ///
1666    /// Queueing a new layout automatically queues a redraw as well.
1667    fn queue_relayout(&self);
1668
1669    /// Removes `action` from the list of actions applied to `self`
1670    ///
1671    /// The reference held by `self` on the `Action` will be released
1672    /// ## `action`
1673    /// a `Action`
1674    fn remove_action<P: IsA<Action>>(&self, action: &P);
1675
1676    /// Removes the `Action` with the given name from the list
1677    /// of actions applied to `self`
1678    /// ## `name`
1679    /// the name of the action to remove
1680    fn remove_action_by_name(&self, name: &str);
1681
1682    /// Removes all children of `self`.
1683    ///
1684    /// This function releases the reference added by inserting a child actor
1685    /// in the list of children of `self`.
1686    ///
1687    /// If the reference count of a child drops to zero, the child will be
1688    /// destroyed. If you want to ensure the destruction of all the children
1689    /// of `self`, use `ActorExt::destroy_all_children`.
1690    fn remove_all_children(&self);
1691
1692    /// Removes all transitions associated to `self`.
1693    fn remove_all_transitions(&self);
1694
1695    /// Removes `child` from the children of `self`.
1696    ///
1697    /// This function will release the reference added by
1698    /// `ActorExt::add_child`, so if you want to keep using `child`
1699    /// you will have to acquire a referenced on it before calling this
1700    /// function.
1701    ///
1702    /// This function will emit the `Container::actor-removed`
1703    /// signal on `self`.
1704    /// ## `child`
1705    /// a `Actor`
1706    fn remove_child<P: IsA<Actor>>(&self, child: &P);
1707
1708    /// Removes clip area from `self`.
1709    fn remove_clip(&self);
1710
1711    /// Removes `constraint` from the list of constraints applied to `self`
1712    ///
1713    /// The reference held by `self` on the `Constraint` will be released
1714    /// ## `constraint`
1715    /// a `Constraint`
1716    fn remove_constraint<P: IsA<Constraint>>(&self, constraint: &P);
1717
1718    /// Removes the `Constraint` with the given name from the list
1719    /// of constraints applied to `self`
1720    /// ## `name`
1721    /// the name of the constraint to remove
1722    fn remove_constraint_by_name(&self, name: &str);
1723
1724    /// Removes `effect` from the list of effects applied to `self`
1725    ///
1726    /// The reference held by `self` on the `Effect` will be released
1727    /// ## `effect`
1728    /// a `Effect`
1729    fn remove_effect<P: IsA<Effect>>(&self, effect: &P);
1730
1731    /// Removes the `Effect` with the given name from the list
1732    /// of effects applied to `self`
1733    /// ## `name`
1734    /// the name of the effect to remove
1735    fn remove_effect_by_name(&self, name: &str);
1736
1737    /// Removes the transition stored inside a `Actor` using `name`
1738    /// identifier.
1739    ///
1740    /// If the transition is currently in progress, it will be stopped.
1741    ///
1742    /// This function releases the reference acquired when the transition
1743    /// was added to the `Actor`.
1744    /// ## `name`
1745    /// the name of the transition to remove
1746    fn remove_transition(&self, name: &str);
1747
1748    /// Replaces `old_child` with `new_child` in the list of children of `self`.
1749    /// ## `old_child`
1750    /// the child of `self` to replace
1751    /// ## `new_child`
1752    /// the `Actor` to replace `old_child`
1753    fn replace_child<P: IsA<Actor>, Q: IsA<Actor>>(&self, old_child: &P, new_child: &Q);
1754
1755    /// Restores the easing state as it was prior to a call to
1756    /// `ActorExt::save_easing_state`.
1757    fn restore_easing_state(&self);
1758
1759    /// Saves the current easing state for animatable properties, and creates
1760    /// a new state with the default values for easing mode and duration.
1761    ///
1762    /// New transitions created after calling this function will inherit the
1763    /// duration, easing mode, and delay of the new easing state; this also
1764    /// applies to transitions modified in flight.
1765    fn save_easing_state(&self);
1766
1767    /// Stores the allocation of `self` as defined by `box_`.
1768    ///
1769    /// This function can only be called from within the implementation of
1770    /// the `ActorClass.allocate`() virtual function.
1771    ///
1772    /// The allocation should have been adjusted to take into account constraints,
1773    /// alignment, and margin properties. If you are implementing a `Actor`
1774    /// subclass that provides its own layout management policy for its children
1775    /// instead of using a `LayoutManager` delegate, you should not call
1776    /// this function on the children of `self`; instead, you should call
1777    /// `ActorExt::allocate`, which will adjust the allocation box for
1778    /// you.
1779    ///
1780    /// This function should only be used by subclasses of `Actor`
1781    /// that wish to store their allocation but cannot chain up to the
1782    /// parent's implementation; the default implementation of the
1783    /// `ActorClass.allocate`() virtual function will call this
1784    /// function.
1785    ///
1786    /// It is important to note that, while chaining up was the recommended
1787    /// behaviour for `Actor` subclasses prior to the introduction of
1788    /// this function, it is recommended to call `ActorExt::set_allocation`
1789    /// instead.
1790    ///
1791    /// If the `Actor` is using a `LayoutManager` delegate object
1792    /// to handle the allocation of its children, this function will call
1793    /// the `LayoutManagerExt::allocate` function only if the
1794    /// `AllocationFlags::DelegateLayout` flag is set on `flags`, otherwise it is
1795    /// expected that the subclass will call `LayoutManagerExt::allocate`
1796    /// by itself. For instance, the following code:
1797    ///
1798    ///
1799    /// ```C
1800    /// static void
1801    /// my_actor_allocate (ClutterActor *actor,
1802    ///                    const ClutterActorBox *allocation,
1803    ///                    ClutterAllocationFlags flags)
1804    /// {
1805    ///   ClutterActorBox new_alloc;
1806    ///   ClutterAllocationFlags new_flags;
1807    ///
1808    ///   adjust_allocation (allocation, &new_alloc);
1809    ///
1810    ///   new_flags = flags | CLUTTER_DELEGATE_LAYOUT;
1811    ///
1812    ///   // this will use the layout manager set on the actor
1813    ///   clutter_actor_set_allocation (actor, &new_alloc, new_flags);
1814    /// }
1815    /// ```
1816    ///
1817    /// is equivalent to this:
1818    ///
1819    ///
1820    /// ```C
1821    /// static void
1822    /// my_actor_allocate (ClutterActor *actor,
1823    ///                    const ClutterActorBox *allocation,
1824    ///                    ClutterAllocationFlags flags)
1825    /// {
1826    ///   ClutterLayoutManager *layout;
1827    ///   ClutterActorBox new_alloc;
1828    ///
1829    ///   adjust_allocation (allocation, &new_alloc);
1830    ///
1831    ///   clutter_actor_set_allocation (actor, &new_alloc, flags);
1832    ///
1833    ///   layout = clutter_actor_get_layout_manager (actor);
1834    ///   clutter_layout_manager_allocate (layout,
1835    ///                                    CLUTTER_CONTAINER (actor),
1836    ///                                    &new_alloc,
1837    ///                                    flags);
1838    /// }
1839    /// ```
1840    /// ## `box_`
1841    /// a `ActorBox`
1842    /// ## `flags`
1843    /// allocation flags
1844    fn set_allocation(&self, box_: &ActorBox, flags: AllocationFlags);
1845
1846    /// Sets the background color of a `Actor`.
1847    ///
1848    /// The background color will be used to cover the whole allocation of the
1849    /// actor. The default background color of an actor is transparent.
1850    ///
1851    /// To check whether an actor has a background color, you can use the
1852    /// `Actor:background-color-set` actor property.
1853    ///
1854    /// The `Actor:background-color` property is animatable.
1855    /// ## `color`
1856    /// a `Color`, or `None` to unset a previously
1857    ///  set color
1858    fn set_background_color(&self, color: Option<&Color>);
1859
1860    /// Sets `child` to be above `sibling` in the list of children of `self`.
1861    ///
1862    /// If `sibling` is `None`, `child` will be the new last child of `self`.
1863    ///
1864    /// This function is logically equivalent to removing `child` and using
1865    /// `ActorExt::insert_child_above`, but it will not emit signals
1866    /// or change state on `child`.
1867    /// ## `child`
1868    /// a `Actor` child of `self`
1869    /// ## `sibling`
1870    /// a `Actor` child of `self`, or `None`
1871    fn set_child_above_sibling<P: IsA<Actor>, Q: IsA<Actor>>(&self, child: &P, sibling: Option<&Q>);
1872
1873    /// Changes the index of `child` in the list of children of `self`.
1874    ///
1875    /// This function is logically equivalent to removing `child` and
1876    /// calling `ActorExt::insert_child_at_index`, but it will not
1877    /// emit signals or change state on `child`.
1878    /// ## `child`
1879    /// a `Actor` child of `self`
1880    /// ## `index_`
1881    /// the new index for `child`
1882    fn set_child_at_index<P: IsA<Actor>>(&self, child: &P, index_: i32);
1883
1884    /// Sets `child` to be below `sibling` in the list of children of `self`.
1885    ///
1886    /// If `sibling` is `None`, `child` will be the new first child of `self`.
1887    ///
1888    /// This function is logically equivalent to removing `self` and using
1889    /// `ActorExt::insert_child_below`, but it will not emit signals
1890    /// or change state on `child`.
1891    /// ## `child`
1892    /// a `Actor` child of `self`
1893    /// ## `sibling`
1894    /// a `Actor` child of `self`, or `None`
1895    fn set_child_below_sibling<P: IsA<Actor>, Q: IsA<Actor>>(&self, child: &P, sibling: Option<&Q>);
1896
1897    /// Sets the transformation matrix to be applied to all the children
1898    /// of `self` prior to their own transformations. The default child
1899    /// transformation is the identity matrix.
1900    ///
1901    /// If `transform` is `None`, the child transform will be unset.
1902    ///
1903    /// The `Actor:child-transform` property is animatable.
1904    /// ## `transform`
1905    /// a `Matrix`, or `None`
1906    fn set_child_transform(&self, transform: Option<&Matrix>);
1907
1908    /// Sets clip area for `self`. The clip area is always computed from the
1909    /// upper left corner of the actor, even if the anchor point is set
1910    /// otherwise.
1911    /// ## `xoff`
1912    /// X offset of the clip rectangle
1913    /// ## `yoff`
1914    /// Y offset of the clip rectangle
1915    /// ## `width`
1916    /// Width of the clip rectangle
1917    /// ## `height`
1918    /// Height of the clip rectangle
1919    fn set_clip(&self, xoff: f32, yoff: f32, width: f32, height: f32);
1920
1921    /// Sets whether `self` should be clipped to the same size as its
1922    /// allocation
1923    /// ## `clip_set`
1924    /// `true` to apply a clip tracking the allocation
1925    fn set_clip_to_allocation(&self, clip_set: bool);
1926
1927    /// Sets the contents of a `Actor`.
1928    /// ## `content`
1929    /// a `Content`, or `None`
1930    fn set_content<P: IsA<Content>>(&self, content: Option<&P>);
1931
1932    /// Sets the gravity of the `Content` used by `self`.
1933    ///
1934    /// See the description of the `Actor:content-gravity` property for
1935    /// more information.
1936    ///
1937    /// The `Actor:content-gravity` property is animatable.
1938    /// ## `gravity`
1939    /// the `ContentGravity`
1940    fn set_content_gravity(&self, gravity: ContentGravity);
1941
1942    /// Sets the policy for repeating the `Actor:content` of a
1943    /// `Actor`. The behaviour is deferred to the `Content`
1944    /// implementation.
1945    /// ## `repeat`
1946    /// the repeat policy
1947    fn set_content_repeat(&self, repeat: ContentRepeat);
1948
1949    /// Sets the minification and magnification filter to be applied when
1950    /// scaling the `Actor:content` of a `Actor`.
1951    ///
1952    /// The `Actor:minification-filter` will be used when reducing
1953    /// the size of the content; the `Actor:magnification-filter`
1954    /// will be used when increasing the size of the content.
1955    /// ## `min_filter`
1956    /// the minification filter for the content
1957    /// ## `mag_filter`
1958    /// the magnification filter for the content
1959    fn set_content_scaling_filters(&self, min_filter: ScalingFilter, mag_filter: ScalingFilter);
1960
1961    /// Sets the delay that should be applied before tweening animatable
1962    /// properties.
1963    /// ## `msecs`
1964    /// the delay before the start of the tweening, in milliseconds
1965    fn set_easing_delay(&self, msecs: u32);
1966
1967    /// Sets the duration of the tweening for animatable properties
1968    /// of `self` for the current easing state.
1969    /// ## `msecs`
1970    /// the duration of the easing, or `None`
1971    fn set_easing_duration(&self, msecs: u32);
1972
1973    /// Sets the easing mode for the tweening of animatable properties
1974    /// of `self`.
1975    /// ## `mode`
1976    /// an easing mode, excluding `AnimationMode::CustomMode`
1977    fn set_easing_mode(&self, mode: AnimationMode);
1978
1979    /// Sets whether an actor has a fixed position set (and will thus be
1980    /// unaffected by any layout manager).
1981    /// ## `is_set`
1982    /// whether to use fixed position
1983    fn set_fixed_position_set(&self, is_set: bool);
1984
1985    /// Sets `flags` on `self`
1986    ///
1987    /// This function will emit notifications for the changed properties
1988    /// ## `flags`
1989    /// the flags to set
1990    fn set_flags(&self, flags: ActorFlags);
1991
1992    /// Forces a height on an actor, causing the actor's preferred width
1993    /// and height (if any) to be ignored.
1994    ///
1995    /// If `height` is -1 the actor will use its preferred height instead of
1996    /// overriding it, i.e. you can "unset" the height with -1.
1997    ///
1998    /// This function sets both the minimum and natural size of the actor.
1999    /// ## `height`
2000    /// Requested new height for the actor, in pixels, or -1
2001    fn set_height(&self, height: f32);
2002
2003    /// Sets the `LayoutManager` delegate object that will be used to
2004    /// lay out the children of `self`.
2005    ///
2006    /// The `Actor` will take a reference on the passed `manager` which
2007    /// will be released either when the layout manager is removed, or when
2008    /// the actor is destroyed.
2009    /// ## `manager`
2010    /// a `LayoutManager`, or `None` to unset it
2011    fn set_layout_manager<P: IsA<LayoutManager>>(&self, manager: Option<&P>);
2012
2013    /// Sets all the components of the margin of a `Actor`.
2014    /// ## `margin`
2015    /// a `Margin`
2016    fn set_margin(&self, margin: &Margin);
2017
2018    /// Sets the margin from the bottom of a `Actor`.
2019    ///
2020    /// The `Actor:margin-bottom` property is animatable.
2021    /// ## `margin`
2022    /// the bottom margin
2023    fn set_margin_bottom(&self, margin: f32);
2024
2025    /// Sets the margin from the left of a `Actor`.
2026    ///
2027    /// The `Actor:margin-left` property is animatable.
2028    /// ## `margin`
2029    /// the left margin
2030    fn set_margin_left(&self, margin: f32);
2031
2032    /// Sets the margin from the right of a `Actor`.
2033    ///
2034    /// The `Actor:margin-right` property is animatable.
2035    /// ## `margin`
2036    /// the right margin
2037    fn set_margin_right(&self, margin: f32);
2038
2039    /// Sets the margin from the top of a `Actor`.
2040    ///
2041    /// The `Actor:margin-top` property is animatable.
2042    /// ## `margin`
2043    /// the top margin
2044    fn set_margin_top(&self, margin: f32);
2045
2046    /// Sets the given name to `self`. The name can be used to identify
2047    /// a `Actor`.
2048    /// ## `name`
2049    /// Textual tag to apply to actor
2050    fn set_name(&self, name: &str);
2051
2052    /// Defines the circumstances where the actor should be redirected into
2053    /// an offscreen image. The offscreen image is used to flatten the
2054    /// actor into a single image while painting for two main reasons.
2055    /// Firstly, when the actor is painted a second time without any of its
2056    /// contents changing it can simply repaint the cached image without
2057    /// descending further down the actor hierarchy. Secondly, it will make
2058    /// the opacity look correct even if there are overlapping primitives
2059    /// in the actor.
2060    ///
2061    /// Caching the actor could in some cases be a performance win and in
2062    /// some cases be a performance lose so it is important to determine
2063    /// which value is right for an actor before modifying this value. For
2064    /// example, there is never any reason to flatten an actor that is just
2065    /// a single texture (such as a `Texture`) because it is
2066    /// effectively already cached in an image so the offscreen would be
2067    /// redundant. Also if the actor contains primitives that are far apart
2068    /// with a large transparent area in the middle (such as a large
2069    /// CluterGroup with a small actor in the top left and a small actor in
2070    /// the bottom right) then the cached image will contain the entire
2071    /// image of the large area and the paint will waste time blending all
2072    /// of the transparent pixels in the middle.
2073    ///
2074    /// The default method of implementing opacity on a container simply
2075    /// forwards on the opacity to all of the children. If the children are
2076    /// overlapping then it will appear as if they are two separate glassy
2077    /// objects and there will be a break in the color where they
2078    /// overlap. By redirecting to an offscreen buffer it will be as if the
2079    /// two opaque objects are combined into one and then made transparent
2080    /// which is usually what is expected.
2081    ///
2082    /// The image below demonstrates the difference between redirecting and
2083    /// not. The image shows two Clutter groups, each containing a red and
2084    /// a green rectangle which overlap. The opacity on the group is set to
2085    /// 128 (which is 50%). When the offscreen redirect is not used, the
2086    /// red rectangle can be seen through the blue rectangle as if the two
2087    /// rectangles were separately transparent. When the redirect is used
2088    /// the group as a whole is transparent instead so the red rectangle is
2089    /// not visible where they overlap.
2090    ///
2091    /// <figure id="offscreen-redirect">
2092    ///  `<title>`Sample of using an offscreen redirect for transparency`</title>`
2093    ///  <graphic fileref="offscreen-redirect.png" format="PNG"/>
2094    /// `</figure>`
2095    ///
2096    /// The default value for this property is 0, so we effectively will
2097    /// never redirect an actor offscreen by default. This means that there
2098    /// are times that transparent actors may look glassy as described
2099    /// above. The reason this is the default is because there is a
2100    /// performance trade off between quality and performance here. In many
2101    /// cases the default form of glassy opacity looks good enough, but if
2102    /// it's not you will need to set the
2103    /// `OffscreenRedirect::AutomaticForOpacity` flag to enable
2104    /// redirection for opacity.
2105    ///
2106    /// Custom actors that don't contain any overlapping primitives are
2107    /// recommended to override the `has_overlaps` virtual to return `false`
2108    /// for maximum efficiency.
2109    /// ## `redirect`
2110    /// New offscreen redirect flags for the actor.
2111    fn set_offscreen_redirect(&self, redirect: OffscreenRedirect);
2112
2113    /// Sets the actor's opacity, with zero being completely transparent and
2114    /// 255 (0xff) being fully opaque.
2115    ///
2116    /// The `Actor:opacity` property is animatable.
2117    /// ## `opacity`
2118    /// New opacity value for the actor.
2119    fn set_opacity(&self, opacity: u8);
2120
2121    /// Sets the position of the `Actor:pivot-point` around which the
2122    /// scaling and rotation transformations occur.
2123    ///
2124    /// The pivot point's coordinates are in normalized space, with the (0, 0)
2125    /// point being the top left corner of the actor, and the (1, 1) point being
2126    /// the bottom right corner.
2127    /// ## `pivot_x`
2128    /// the normalized X coordinate of the pivot point
2129    /// ## `pivot_y`
2130    /// the normalized Y coordinate of the pivot point
2131    fn set_pivot_point(&self, pivot_x: f32, pivot_y: f32);
2132
2133    /// Sets the component on the Z axis of the `Actor:pivot-point` around
2134    /// which the scaling and rotation transformations occur.
2135    ///
2136    /// The `pivot_z` value is expressed as a distance along the Z axis.
2137    /// ## `pivot_z`
2138    /// the Z coordinate of the actor's pivot point
2139    fn set_pivot_point_z(&self, pivot_z: f32);
2140
2141    /// Sets the actor's fixed position in pixels relative to any parent
2142    /// actor.
2143    ///
2144    /// If a layout manager is in use, this position will override the
2145    /// layout manager and force a fixed position.
2146    /// ## `x`
2147    /// New left position of actor in pixels.
2148    /// ## `y`
2149    /// New top position of actor in pixels.
2150    fn set_position(&self, x: f32, y: f32);
2151
2152    /// Sets `self` as reactive. Reactive actors will receive events.
2153    /// ## `reactive`
2154    /// whether the actor should be reactive to events
2155    fn set_reactive(&self, reactive: bool);
2156
2157    /// Sets the geometry request mode of `self`.
2158    ///
2159    /// The `mode` determines the order for invoking
2160    /// `ActorExt::get_preferred_width` and
2161    /// `ActorExt::get_preferred_height`
2162    /// ## `mode`
2163    /// the request mode
2164    fn set_request_mode(&self, mode: RequestMode);
2165
2166    /// Sets the `angle` of rotation of a `Actor` on the given `axis`.
2167    ///
2168    /// This function is a convenience for setting the rotation properties
2169    /// `Actor:rotation-angle-x`, `Actor:rotation-angle-y`,
2170    /// and `Actor:rotation-angle-z`.
2171    ///
2172    /// The center of rotation is established by the `Actor:pivot-point`
2173    /// property.
2174    /// ## `axis`
2175    /// the axis to set the angle one
2176    /// ## `angle`
2177    /// the angle of rotation, in degrees
2178    fn set_rotation_angle(&self, axis: RotateAxis, angle: f64);
2179
2180    /// Scales an actor with the given factors.
2181    ///
2182    /// The scale transformation is relative the the `Actor:pivot-point`.
2183    ///
2184    /// The `Actor:scale-x` and `Actor:scale-y` properties are
2185    /// animatable.
2186    /// ## `scale_x`
2187    /// double factor to scale actor by horizontally.
2188    /// ## `scale_y`
2189    /// double factor to scale actor by vertically.
2190    fn set_scale(&self, scale_x: f64, scale_y: f64);
2191
2192    /// Scales an actor on the Z axis by the given `scale_z` factor.
2193    ///
2194    /// The scale transformation is relative the the `Actor:pivot-point`.
2195    ///
2196    /// The `Actor:scale-z` property is animatable.
2197    /// ## `scale_z`
2198    /// the scaling factor along the Z axis
2199    fn set_scale_z(&self, scale_z: f64);
2200
2201    /// Sets the actor's size request in pixels. This overrides any
2202    /// "normal" size request the actor would have. For example
2203    /// a text actor might normally request the size of the text;
2204    /// this function would force a specific size instead.
2205    ///
2206    /// If `width` and/or `height` are -1 the actor will use its
2207    /// "normal" size request instead of overriding it, i.e.
2208    /// you can "unset" the size with -1.
2209    ///
2210    /// This function sets or unsets both the minimum and natural size.
2211    /// ## `width`
2212    /// New width of actor in pixels, or -1
2213    /// ## `height`
2214    /// New height of actor in pixels, or -1
2215    fn set_size(&self, width: f32, height: f32);
2216
2217    /// Sets the `TextDirection` for an actor
2218    ///
2219    /// The passed text direction must not be `TextDirection::Default`
2220    ///
2221    /// If `self` implements `Container` then this function will recurse
2222    /// inside all the children of `self` (including the internal ones).
2223    ///
2224    /// Composite actors not implementing `Container`, or actors requiring
2225    /// special handling when the text direction changes, should connect to
2226    /// the `gobject::Object::notify` signal for the `Actor:text-direction` property
2227    /// ## `text_dir`
2228    /// the text direction for `self`
2229    fn set_text_direction(&self, text_dir: TextDirection);
2230
2231    /// Overrides the transformations of a `Actor` with a custom
2232    /// matrix, which will be applied relative to the origin of the
2233    /// actor's allocation and to the actor's pivot point.
2234    ///
2235    /// The `Actor:transform` property is animatable.
2236    /// ## `transform`
2237    /// a `Matrix`, or `None` to
2238    ///  unset a custom transformation
2239    fn set_transform(&self, transform: Option<&Matrix>);
2240
2241    /// Sets an additional translation transformation on a `Actor`,
2242    /// relative to the `Actor:pivot-point`.
2243    /// ## `translate_x`
2244    /// the translation along the X axis
2245    /// ## `translate_y`
2246    /// the translation along the Y axis
2247    /// ## `translate_z`
2248    /// the translation along the Z axis
2249    fn set_translation(&self, translate_x: f32, translate_y: f32, translate_z: f32);
2250
2251    /// Forces a width on an actor, causing the actor's preferred width
2252    /// and height (if any) to be ignored.
2253    ///
2254    /// If `width` is -1 the actor will use its preferred width request
2255    /// instead of overriding it, i.e. you can "unset" the width with -1.
2256    ///
2257    /// This function sets both the minimum and natural size of the actor.
2258    /// ## `width`
2259    /// Requested new width for the actor, in pixels, or -1
2260    fn set_width(&self, width: f32);
2261
2262    /// Sets the actor's X coordinate, relative to its parent, in pixels.
2263    ///
2264    /// Overrides any layout manager and forces a fixed position for
2265    /// the actor.
2266    ///
2267    /// The `Actor:x` property is animatable.
2268    /// ## `x`
2269    /// the actor's position on the X axis
2270    fn set_x(&self, x: f32);
2271
2272    /// Sets the horizontal alignment policy of a `Actor`, in case the
2273    /// actor received extra horizontal space.
2274    ///
2275    /// See also the `Actor:x-align` property.
2276    /// ## `x_align`
2277    /// the horizontal alignment policy
2278    fn set_x_align(&self, x_align: ActorAlign);
2279
2280    /// Sets whether a `Actor` should expand horizontally; this means
2281    /// that layout manager should allocate extra space for the actor, if
2282    /// possible.
2283    ///
2284    /// Setting an actor to expand will also make all its parent expand, so
2285    /// that it's possible to build an actor tree and only set this flag on
2286    /// its leaves and not on every single actor.
2287    /// ## `expand`
2288    /// whether the actor should expand horizontally
2289    fn set_x_expand(&self, expand: bool);
2290
2291    /// Sets the actor's Y coordinate, relative to its parent, in pixels.#
2292    ///
2293    /// Overrides any layout manager and forces a fixed position for
2294    /// the actor.
2295    ///
2296    /// The `Actor:y` property is animatable.
2297    /// ## `y`
2298    /// the actor's position on the Y axis
2299    fn set_y(&self, y: f32);
2300
2301    /// Sets the vertical alignment policy of a `Actor`, in case the
2302    /// actor received extra vertical space.
2303    ///
2304    /// See also the `Actor:y-align` property.
2305    /// ## `y_align`
2306    /// the vertical alignment policy
2307    fn set_y_align(&self, y_align: ActorAlign);
2308
2309    /// Sets whether a `Actor` should expand horizontally; this means
2310    /// that layout manager should allocate extra space for the actor, if
2311    /// possible.
2312    ///
2313    /// Setting an actor to expand will also make all its parent expand, so
2314    /// that it's possible to build an actor tree and only set this flag on
2315    /// its leaves and not on every single actor.
2316    /// ## `expand`
2317    /// whether the actor should expand vertically
2318    fn set_y_expand(&self, expand: bool);
2319
2320    /// Sets the actor's position on the Z axis.
2321    ///
2322    /// See `Actor:z-position`.
2323    /// ## `z_position`
2324    /// the position on the Z axis
2325    fn set_z_position(&self, z_position: f32);
2326
2327    /// Should be called inside the implementation of the
2328    /// `Actor::pick` virtual function in order to check whether
2329    /// the actor should paint itself in pick mode or not.
2330    ///
2331    /// This function should never be called directly by applications.
2332    ///
2333    /// # Returns
2334    ///
2335    /// `true` if the actor should paint its silhouette,
2336    ///  `false` otherwise
2337    fn should_pick_paint(&self) -> bool;
2338
2339    /// Flags an actor to be displayed. An actor that isn't shown will not
2340    /// be rendered on the stage.
2341    ///
2342    /// Actors are visible by default.
2343    ///
2344    /// If this function is called on an actor without a parent, the
2345    /// `Actor:show-on-set-parent` will be set to `true` as a side
2346    /// effect.
2347    fn show(&self);
2348
2349    /// This function translates screen coordinates (`x`, `y`) to
2350    /// coordinates relative to the actor. For example, it can be used to translate
2351    /// screen events from global screen coordinates into actor-local coordinates.
2352    ///
2353    /// The conversion can fail, notably if the transform stack results in the
2354    /// actor being projected on the screen as a mere line.
2355    ///
2356    /// The conversion should not be expected to be pixel-perfect due to the
2357    /// nature of the operation. In general the error grows when the skewing
2358    /// of the actor rectangle on screen increases.
2359    ///
2360    /// This function can be computationally intensive.
2361    ///
2362    /// This function only works when the allocation is up-to-date, i.e. inside of
2363    /// the `ActorClass.paint`() implementation
2364    /// ## `x`
2365    /// x screen coordinate of the point to unproject
2366    /// ## `y`
2367    /// y screen coordinate of the point to unproject
2368    /// ## `x_out`
2369    /// return location for the unprojected x coordinance
2370    /// ## `y_out`
2371    /// return location for the unprojected y coordinance
2372    ///
2373    /// # Returns
2374    ///
2375    /// `true` if conversion was successful.
2376    fn transform_stage_point(&self, x: f32, y: f32) -> Option<(f32, f32)>;
2377
2378    /// Unsets the `ActorFlags::Mapped` flag on the actor and possibly
2379    /// unmaps its children if they were mapped.
2380    ///
2381    /// Calling this function is not encouraged: the default `Actor`
2382    /// implementation of `ActorClass.unmap`() will also unmap any
2383    /// eventual children by default when their parent is unmapped.
2384    ///
2385    /// When overriding `ActorClass.unmap`(), it is mandatory to
2386    /// chain up to the parent implementation.
2387    ///
2388    /// It is important to note that the implementation of the
2389    /// `ActorClass.unmap`() virtual function may be called after
2390    /// the `ActorClass.destroy`() or the `gobject::ObjectClass.dispose`()
2391    /// implementation, but it is guaranteed to be called before the
2392    /// `gobject::ObjectClass.finalize`() implementation.
2393    fn unmap(&self);
2394
2395    /// Unsets `flags` on `self`
2396    ///
2397    /// This function will emit notifications for the changed properties
2398    /// ## `flags`
2399    /// the flags to unset
2400    fn unset_flags(&self, flags: ActorFlags);
2401
2402    /// Adds a `Action` to the actor
2403    fn set_property_actions<P: IsA<Action> + SetValueOptional>(&self, actions: Option<&P>);
2404
2405    /// The allocation for the actor, in pixels
2406    ///
2407    /// This is property is read-only, but you might monitor it to know when an
2408    /// actor moves or resizes
2409    fn get_property_allocation(&self) -> Option<ActorBox>;
2410
2411    /// Whether the `Actor:background-color` property has been set.
2412    fn get_property_background_color_set(&self) -> bool;
2413
2414    /// Whether the `Actor:child-transform` property is set.
2415    fn get_property_child_transform_set(&self) -> bool;
2416
2417    /// The visible region of the actor, in actor-relative coordinates,
2418    /// expressed as a `Rect`.
2419    ///
2420    /// Setting this property to `None` will unset the existing clip.
2421    ///
2422    /// Setting this property will change the `Actor:has-clip`
2423    /// property as a side effect.
2424    fn get_property_clip_rect(&self) -> Option<Rect>;
2425
2426    /// The visible region of the actor, in actor-relative coordinates,
2427    /// expressed as a `Rect`.
2428    ///
2429    /// Setting this property to `None` will unset the existing clip.
2430    ///
2431    /// Setting this property will change the `Actor:has-clip`
2432    /// property as a side effect.
2433    fn set_property_clip_rect(&self, clip_rect: Option<&Rect>);
2434
2435    /// Adds a `Constraint` to the actor
2436    fn set_property_constraints<P: IsA<Constraint> + SetValueOptional>(
2437        &self,
2438        constraints: Option<&P>,
2439    );
2440
2441    /// Adds `Effect` to the list of effects be applied on a `Actor`
2442    fn set_property_effect<P: IsA<Effect> + SetValueOptional>(&self, effect: Option<&P>);
2443
2444    /// The fixed X position of the actor in pixels.
2445    ///
2446    /// Writing this property sets `Actor:fixed-position-set`
2447    /// property as well, as a side effect
2448    fn get_property_fixed_x(&self) -> f32;
2449
2450    /// The fixed X position of the actor in pixels.
2451    ///
2452    /// Writing this property sets `Actor:fixed-position-set`
2453    /// property as well, as a side effect
2454    fn set_property_fixed_x(&self, fixed_x: f32);
2455
2456    /// The fixed Y position of the actor in pixels.
2457    ///
2458    /// Writing this property sets the `Actor:fixed-position-set`
2459    /// property as well, as a side effect
2460    fn get_property_fixed_y(&self) -> f32;
2461
2462    /// The fixed Y position of the actor in pixels.
2463    ///
2464    /// Writing this property sets the `Actor:fixed-position-set`
2465    /// property as well, as a side effect
2466    fn set_property_fixed_y(&self, fixed_y: f32);
2467
2468    /// Whether the actor has the `Actor:clip` property set or not
2469    fn get_property_has_clip(&self) -> bool;
2470
2471    /// Whether the actor contains the pointer of a `InputDevice`
2472    /// or not.
2473    fn get_property_has_pointer(&self) -> bool;
2474
2475    fn get_property_magnification_filter(&self) -> ScalingFilter;
2476
2477    fn set_property_magnification_filter(&self, magnification_filter: ScalingFilter);
2478
2479    /// Whether the actor is mapped (will be painted when the stage
2480    /// to which it belongs is mapped)
2481    fn get_property_mapped(&self) -> bool;
2482
2483    /// A forced minimum height request for the actor, in pixels
2484    ///
2485    /// Writing this property sets the `Actor:min-height-set` property
2486    /// as well, as a side effect. This property overrides the usual height
2487    /// request of the actor.
2488    fn get_property_min_height(&self) -> f32;
2489
2490    /// A forced minimum height request for the actor, in pixels
2491    ///
2492    /// Writing this property sets the `Actor:min-height-set` property
2493    /// as well, as a side effect. This property overrides the usual height
2494    /// request of the actor.
2495    fn set_property_min_height(&self, min_height: f32);
2496
2497    /// This flag controls whether the `Actor:min-height` property
2498    /// is used
2499    fn get_property_min_height_set(&self) -> bool;
2500
2501    /// This flag controls whether the `Actor:min-height` property
2502    /// is used
2503    fn set_property_min_height_set(&self, min_height_set: bool);
2504
2505    /// A forced minimum width request for the actor, in pixels
2506    ///
2507    /// Writing this property sets the `Actor:min-width-set` property
2508    /// as well, as a side effect.
2509    ///
2510    /// This property overrides the usual width request of the actor.
2511    fn get_property_min_width(&self) -> f32;
2512
2513    /// A forced minimum width request for the actor, in pixels
2514    ///
2515    /// Writing this property sets the `Actor:min-width-set` property
2516    /// as well, as a side effect.
2517    ///
2518    /// This property overrides the usual width request of the actor.
2519    fn set_property_min_width(&self, min_width: f32);
2520
2521    /// This flag controls whether the `Actor:min-width` property
2522    /// is used
2523    fn get_property_min_width_set(&self) -> bool;
2524
2525    /// This flag controls whether the `Actor:min-width` property
2526    /// is used
2527    fn set_property_min_width_set(&self, min_width_set: bool);
2528
2529    fn get_property_minification_filter(&self) -> ScalingFilter;
2530
2531    fn set_property_minification_filter(&self, minification_filter: ScalingFilter);
2532
2533    /// A forced natural height request for the actor, in pixels
2534    ///
2535    /// Writing this property sets the `Actor:natural-height-set`
2536    /// property as well, as a side effect. This property overrides the
2537    /// usual height request of the actor
2538    fn get_property_natural_height(&self) -> f32;
2539
2540    /// A forced natural height request for the actor, in pixels
2541    ///
2542    /// Writing this property sets the `Actor:natural-height-set`
2543    /// property as well, as a side effect. This property overrides the
2544    /// usual height request of the actor
2545    fn set_property_natural_height(&self, natural_height: f32);
2546
2547    /// This flag controls whether the `Actor:natural-height` property
2548    /// is used
2549    fn get_property_natural_height_set(&self) -> bool;
2550
2551    /// This flag controls whether the `Actor:natural-height` property
2552    /// is used
2553    fn set_property_natural_height_set(&self, natural_height_set: bool);
2554
2555    /// A forced natural width request for the actor, in pixels
2556    ///
2557    /// Writing this property sets the `Actor:natural-width-set`
2558    /// property as well, as a side effect. This property overrides the
2559    /// usual width request of the actor
2560    fn get_property_natural_width(&self) -> f32;
2561
2562    /// A forced natural width request for the actor, in pixels
2563    ///
2564    /// Writing this property sets the `Actor:natural-width-set`
2565    /// property as well, as a side effect. This property overrides the
2566    /// usual width request of the actor
2567    fn set_property_natural_width(&self, natural_width: f32);
2568
2569    /// This flag controls whether the `Actor:natural-width` property
2570    /// is used
2571    fn get_property_natural_width_set(&self) -> bool;
2572
2573    /// This flag controls whether the `Actor:natural-width` property
2574    /// is used
2575    fn set_property_natural_width_set(&self, natural_width_set: bool);
2576
2577    /// Whether the actor has been realized
2578    fn get_property_realized(&self) -> bool;
2579
2580    /// The rotation angle on the X axis.
2581    ///
2582    /// The `Actor:rotation-angle-x` property is animatable.
2583    fn get_property_rotation_angle_x(&self) -> f64;
2584
2585    /// The rotation angle on the X axis.
2586    ///
2587    /// The `Actor:rotation-angle-x` property is animatable.
2588    fn set_property_rotation_angle_x(&self, rotation_angle_x: f64);
2589
2590    /// The rotation angle on the Y axis
2591    ///
2592    /// The `Actor:rotation-angle-y` property is animatable.
2593    fn get_property_rotation_angle_y(&self) -> f64;
2594
2595    /// The rotation angle on the Y axis
2596    ///
2597    /// The `Actor:rotation-angle-y` property is animatable.
2598    fn set_property_rotation_angle_y(&self, rotation_angle_y: f64);
2599
2600    /// The rotation angle on the Z axis
2601    ///
2602    /// The `Actor:rotation-angle-z` property is animatable.
2603    fn get_property_rotation_angle_z(&self) -> f64;
2604
2605    /// The rotation angle on the Z axis
2606    ///
2607    /// The `Actor:rotation-angle-z` property is animatable.
2608    fn set_property_rotation_angle_z(&self, rotation_angle_z: f64);
2609
2610    /// The horizontal scale of the actor.
2611    ///
2612    /// The `Actor:scale-x` property is animatable.
2613    fn get_property_scale_x(&self) -> f64;
2614
2615    /// The horizontal scale of the actor.
2616    ///
2617    /// The `Actor:scale-x` property is animatable.
2618    fn set_property_scale_x(&self, scale_x: f64);
2619
2620    /// The vertical scale of the actor.
2621    ///
2622    /// The `Actor:scale-y` property is animatable.
2623    fn get_property_scale_y(&self) -> f64;
2624
2625    /// The vertical scale of the actor.
2626    ///
2627    /// The `Actor:scale-y` property is animatable.
2628    fn set_property_scale_y(&self, scale_y: f64);
2629
2630    /// If `true`, the actor is automatically shown when parented.
2631    ///
2632    /// Calling `ActorExt::hide` on an actor which has not been
2633    /// parented will set this property to `false` as a side effect.
2634    fn get_property_show_on_set_parent(&self) -> bool;
2635
2636    /// If `true`, the actor is automatically shown when parented.
2637    ///
2638    /// Calling `ActorExt::hide` on an actor which has not been
2639    /// parented will set this property to `false` as a side effect.
2640    fn set_property_show_on_set_parent(&self, show_on_set_parent: bool);
2641
2642    /// Whether the `Actor:transform` property is set.
2643    fn get_property_transform_set(&self) -> bool;
2644
2645    /// An additional translation applied along the X axis, relative
2646    /// to the actor's `Actor:pivot-point`.
2647    ///
2648    /// The `Actor:translation-x` property is animatable.
2649    fn get_property_translation_x(&self) -> f32;
2650
2651    /// An additional translation applied along the X axis, relative
2652    /// to the actor's `Actor:pivot-point`.
2653    ///
2654    /// The `Actor:translation-x` property is animatable.
2655    fn set_property_translation_x(&self, translation_x: f32);
2656
2657    /// An additional translation applied along the Y axis, relative
2658    /// to the actor's `Actor:pivot-point`.
2659    ///
2660    /// The `Actor:translation-y` property is animatable.
2661    fn get_property_translation_y(&self) -> f32;
2662
2663    /// An additional translation applied along the Y axis, relative
2664    /// to the actor's `Actor:pivot-point`.
2665    ///
2666    /// The `Actor:translation-y` property is animatable.
2667    fn set_property_translation_y(&self, translation_y: f32);
2668
2669    /// An additional translation applied along the Z axis, relative
2670    /// to the actor's `Actor:pivot-point`.
2671    ///
2672    /// The `Actor:translation-z` property is animatable.
2673    fn get_property_translation_z(&self) -> f32;
2674
2675    /// An additional translation applied along the Z axis, relative
2676    /// to the actor's `Actor:pivot-point`.
2677    ///
2678    /// The `Actor:translation-z` property is animatable.
2679    fn set_property_translation_z(&self, translation_z: f32);
2680
2681    /// Whether the actor is set to be visible or not
2682    ///
2683    /// See also `Actor:mapped`
2684    fn get_property_visible(&self) -> bool;
2685
2686    /// Whether the actor is set to be visible or not
2687    ///
2688    /// See also `Actor:mapped`
2689    fn set_property_visible(&self, visible: bool);
2690
2691    /// The ::allocation-changed signal is emitted when the
2692    /// `Actor:allocation` property changes. Usually, application
2693    /// code should just use the notifications for the :allocation property
2694    /// but if you want to track the allocation flags as well, for instance
2695    /// to know whether the absolute origin of `actor` changed, then you might
2696    /// want use this signal instead.
2697    /// ## `box_`
2698    /// a `ActorBox` with the new allocation
2699    /// ## `flags`
2700    /// `AllocationFlags` for the allocation
2701    fn connect_allocation_changed<F: Fn(&Self, &ActorBox, AllocationFlags) + 'static>(
2702        &self,
2703        f: F,
2704    ) -> SignalHandlerId;
2705
2706    /// The ::button-press-event signal is emitted each time a mouse button
2707    /// is pressed on `actor`.
2708    /// ## `event`
2709    /// a `ButtonEvent`
2710    ///
2711    /// # Returns
2712    ///
2713    /// `true` if the event has been handled by the actor,
2714    ///  or `false` to continue the emission.
2715    fn connect_button_press_event<F: Fn(&Self, &ButtonEvent) -> bool + 'static>(
2716        &self,
2717        f: F,
2718    ) -> SignalHandlerId;
2719
2720    /// The ::button-release-event signal is emitted each time a mouse button
2721    /// is released on `actor`.
2722    /// ## `event`
2723    /// a `ButtonEvent`
2724    ///
2725    /// # Returns
2726    ///
2727    /// `true` if the event has been handled by the actor,
2728    ///  or `false` to continue the emission.
2729    fn connect_button_release_event<F: Fn(&Self, &ButtonEvent) -> bool + 'static>(
2730        &self,
2731        f: F,
2732    ) -> SignalHandlerId;
2733
2734    /// The ::captured-event signal is emitted when an event is captured
2735    /// by Clutter. This signal will be emitted starting from the top-level
2736    /// container (the `Stage`) to the actor which received the event
2737    /// going down the hierarchy. This signal can be used to intercept every
2738    /// event before the specialized events (like
2739    /// ClutterActor::button-press-event or ::key-released-event) are
2740    /// emitted.
2741    /// ## `event`
2742    /// a `ClutterEvent`
2743    ///
2744    /// # Returns
2745    ///
2746    /// `true` if the event has been handled by the actor,
2747    ///  or `false` to continue the emission.
2748    fn connect_captured_event<F: Fn(&Self, &Event) -> bool + 'static>(
2749        &self,
2750        f: F,
2751    ) -> SignalHandlerId;
2752
2753    /// The ::destroy signal notifies that all references held on the
2754    /// actor which emitted it should be released.
2755    ///
2756    /// The ::destroy signal should be used by all holders of a reference
2757    /// on `actor`.
2758    ///
2759    /// This signal might result in the finalization of the `Actor`
2760    /// if all references are released.
2761    ///
2762    /// Composite actors and actors implementing the `Container`
2763    /// interface should override the default implementation of the
2764    /// class handler of this signal and call `ActorExt::destroy` on
2765    /// their children. When overriding the default class handler, it is
2766    /// required to chain up to the parent's implementation.
2767    fn connect_destroy<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
2768
2769    /// The ::enter-event signal is emitted when the pointer enters the `actor`
2770    /// ## `event`
2771    /// a `CrossingEvent`
2772    ///
2773    /// # Returns
2774    ///
2775    /// `true` if the event has been handled by the actor,
2776    ///  or `false` to continue the emission.
2777    fn connect_enter_event<F: Fn(&Self, &CrossingEvent) -> bool + 'static>(
2778        &self,
2779        f: F,
2780    ) -> SignalHandlerId;
2781
2782    /// The ::event signal is emitted each time an event is received
2783    /// by the `actor`. This signal will be emitted on every actor,
2784    /// following the hierarchy chain, until it reaches the top-level
2785    /// container (the `Stage`).
2786    /// ## `event`
2787    /// a `ClutterEvent`
2788    ///
2789    /// # Returns
2790    ///
2791    /// `true` if the event has been handled by the actor,
2792    ///  or `false` to continue the emission.
2793    fn connect_event<F: Fn(&Self, &Event) -> bool + 'static>(&self, f: F) -> SignalHandlerId;
2794
2795    /// The ::hide signal is emitted when an actor is no longer rendered
2796    /// on the stage.
2797    fn connect_hide<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
2798
2799    /// The ::key-focus-in signal is emitted when `actor` receives key focus.
2800    fn connect_key_focus_in<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
2801
2802    /// The ::key-focus-out signal is emitted when `actor` loses key focus.
2803    fn connect_key_focus_out<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
2804
2805    /// The ::key-press-event signal is emitted each time a keyboard button
2806    /// is pressed while `actor` has key focus (see `StageExt::set_key_focus`).
2807    /// ## `event`
2808    /// a `KeyEvent`
2809    ///
2810    /// # Returns
2811    ///
2812    /// `true` if the event has been handled by the actor,
2813    ///  or `false` to continue the emission.
2814    fn connect_key_press_event<F: Fn(&Self, &KeyEvent) -> bool + 'static>(
2815        &self,
2816        f: F,
2817    ) -> SignalHandlerId;
2818
2819    /// The ::key-release-event signal is emitted each time a keyboard button
2820    /// is released while `actor` has key focus (see
2821    /// `StageExt::set_key_focus`).
2822    /// ## `event`
2823    /// a `KeyEvent`
2824    ///
2825    /// # Returns
2826    ///
2827    /// `true` if the event has been handled by the actor,
2828    ///  or `false` to continue the emission.
2829    fn connect_key_release_event<F: Fn(&Self, &KeyEvent) -> bool + 'static>(
2830        &self,
2831        f: F,
2832    ) -> SignalHandlerId;
2833
2834    /// The ::leave-event signal is emitted when the pointer leaves the `actor`.
2835    /// ## `event`
2836    /// a `CrossingEvent`
2837    ///
2838    /// # Returns
2839    ///
2840    /// `true` if the event has been handled by the actor,
2841    ///  or `false` to continue the emission.
2842    fn connect_leave_event<F: Fn(&Self, &CrossingEvent) -> bool + 'static>(
2843        &self,
2844        f: F,
2845    ) -> SignalHandlerId;
2846
2847    /// The ::motion-event signal is emitted each time the mouse pointer is
2848    /// moved over `actor`.
2849    /// ## `event`
2850    /// a `MotionEvent`
2851    ///
2852    /// # Returns
2853    ///
2854    /// `true` if the event has been handled by the actor,
2855    ///  or `false` to continue the emission.
2856    fn connect_motion_event<F: Fn(&Self, &MotionEvent) -> bool + 'static>(
2857        &self,
2858        f: F,
2859    ) -> SignalHandlerId;
2860
2861    /// This signal is emitted when the parent of the actor changes.
2862    /// ## `old_parent`
2863    /// the previous parent of the actor, or `None`
2864    fn connect_parent_set<F: Fn(&Self, Option<&Actor>) + 'static>(&self, f: F) -> SignalHandlerId;
2865
2866    /// The ::queue_redraw signal is emitted when `ActorExt::queue_redraw`
2867    /// is called on `origin`.
2868    ///
2869    /// The default implementation for `Actor` chains up to the
2870    /// parent actor and queues a redraw on the parent, thus "bubbling"
2871    /// the redraw queue up through the actor graph. The default
2872    /// implementation for `Stage` queues a `StageExt::ensure_redraw`
2873    /// in a main loop idle handler.
2874    ///
2875    /// Note that the `origin` actor may be the stage, or a container; it
2876    /// does not have to be a leaf node in the actor graph.
2877    ///
2878    /// Toolkits embedding a `Stage` which require a redraw and
2879    /// relayout cycle can stop the emission of this signal using the
2880    /// GSignal API, redraw the UI and then call `StageExt::ensure_redraw`
2881    /// themselves, like:
2882    ///
2883    ///
2884    /// ```C
2885    ///   static void
2886    ///   on_redraw_complete (gpointer data)
2887    ///   {
2888    ///     ClutterStage *stage = data;
2889    ///
2890    ///     // execute the Clutter drawing pipeline
2891    ///     clutter_stage_ensure_redraw (stage);
2892    ///   }
2893    ///
2894    ///   static void
2895    ///   on_stage_queue_redraw (ClutterStage *stage)
2896    ///   {
2897    ///     // this prevents the default handler to run
2898    ///     g_signal_stop_emission_by_name (stage, "queue-redraw");
2899    ///
2900    ///     // queue a redraw with the host toolkit and call
2901    ///     // a function when the redraw has been completed
2902    ///     queue_a_redraw (G_CALLBACK (on_redraw_complete), stage);
2903    ///   }
2904    /// ```
2905    ///
2906    /// Note: This signal is emitted before the Clutter paint
2907    /// pipeline is executed. If you want to know when the pipeline has
2908    /// been completed you should use `clutter_threads_add_repaint_func`
2909    /// or `clutter_threads_add_repaint_func_full`.
2910    /// ## `origin`
2911    /// the actor which initiated the redraw request
2912    fn connect_queue_redraw<F: Fn(&Self, &Actor) + 'static>(&self, f: F) -> SignalHandlerId;
2913
2914    /// The ::queue_layout signal is emitted when `ActorExt::queue_relayout`
2915    /// is called on an actor.
2916    ///
2917    /// The default implementation for `Actor` chains up to the
2918    /// parent actor and queues a relayout on the parent, thus "bubbling"
2919    /// the relayout queue up through the actor graph.
2920    ///
2921    /// The main purpose of this signal is to allow relayout to be propagated
2922    /// properly in the presence of `Clone` actors. Applications will
2923    /// not normally need to connect to this signal.
2924    fn connect_queue_relayout<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
2925
2926    /// The ::scroll-event signal is emitted each time the mouse is
2927    /// scrolled on `actor`
2928    /// ## `event`
2929    /// a `ScrollEvent`
2930    ///
2931    /// # Returns
2932    ///
2933    /// `true` if the event has been handled by the actor,
2934    ///  or `false` to continue the emission.
2935    fn connect_scroll_event<F: Fn(&Self, &ScrollEvent) -> bool + 'static>(
2936        &self,
2937        f: F,
2938    ) -> SignalHandlerId;
2939
2940    /// The ::show signal is emitted when an actor is visible and
2941    /// rendered on the stage.
2942    fn connect_show<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
2943
2944    /// The ::touch-event signal is emitted each time a touch
2945    /// begin/end/update/cancel event.
2946    /// ## `event`
2947    /// a `ClutterEvent`
2948    ///
2949    /// # Returns
2950    ///
2951    /// `CLUTTER_EVENT_STOP` if the event has been handled by
2952    ///  the actor, or `CLUTTER_EVENT_PROPAGATE` to continue the emission.
2953    fn connect_touch_event<F: Fn(&Self, &Event) -> bool + 'static>(&self, f: F) -> SignalHandlerId;
2954
2955    /// The ::transition-stopped signal is emitted once a transition
2956    /// is stopped; a transition is stopped once it reached its total
2957    /// duration (including eventual repeats), it has been stopped
2958    /// using `TimelineExt::stop`, or it has been removed from the
2959    /// transitions applied on `actor`, using `ActorExt::remove_transition`.
2960    /// ## `name`
2961    /// the name of the transition
2962    /// ## `is_finished`
2963    /// whether the transition was finished, or stopped
2964    fn connect_transition_stopped<F: Fn(&Self, &str, bool) + 'static>(
2965        &self,
2966        f: F,
2967    ) -> SignalHandlerId;
2968
2969    /// The ::transitions-completed signal is emitted once all transitions
2970    /// involving `actor` are complete.
2971    fn connect_transitions_completed<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
2972
2973    fn connect_property_actions_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
2974
2975    fn connect_property_allocation_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
2976
2977    fn connect_property_background_color_notify<F: Fn(&Self) + 'static>(
2978        &self,
2979        f: F,
2980    ) -> SignalHandlerId;
2981
2982    fn connect_property_background_color_set_notify<F: Fn(&Self) + 'static>(
2983        &self,
2984        f: F,
2985    ) -> SignalHandlerId;
2986
2987    fn connect_property_child_transform_notify<F: Fn(&Self) + 'static>(
2988        &self,
2989        f: F,
2990    ) -> SignalHandlerId;
2991
2992    fn connect_property_child_transform_set_notify<F: Fn(&Self) + 'static>(
2993        &self,
2994        f: F,
2995    ) -> SignalHandlerId;
2996
2997    fn connect_property_clip_rect_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
2998
2999    fn connect_property_clip_to_allocation_notify<F: Fn(&Self) + 'static>(
3000        &self,
3001        f: F,
3002    ) -> SignalHandlerId;
3003
3004    fn connect_property_constraints_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3005
3006    fn connect_property_content_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3007
3008    fn connect_property_content_box_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3009
3010    fn connect_property_content_gravity_notify<F: Fn(&Self) + 'static>(
3011        &self,
3012        f: F,
3013    ) -> SignalHandlerId;
3014
3015    fn connect_property_content_repeat_notify<F: Fn(&Self) + 'static>(
3016        &self,
3017        f: F,
3018    ) -> SignalHandlerId;
3019
3020    fn connect_property_effect_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3021
3022    fn connect_property_first_child_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3023
3024    fn connect_property_fixed_position_set_notify<F: Fn(&Self) + 'static>(
3025        &self,
3026        f: F,
3027    ) -> SignalHandlerId;
3028
3029    fn connect_property_fixed_x_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3030
3031    fn connect_property_fixed_y_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3032
3033    fn connect_property_has_clip_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3034
3035    fn connect_property_has_pointer_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3036
3037    fn connect_property_height_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3038
3039    fn connect_property_last_child_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3040
3041    fn connect_property_layout_manager_notify<F: Fn(&Self) + 'static>(
3042        &self,
3043        f: F,
3044    ) -> SignalHandlerId;
3045
3046    fn connect_property_magnification_filter_notify<F: Fn(&Self) + 'static>(
3047        &self,
3048        f: F,
3049    ) -> SignalHandlerId;
3050
3051    fn connect_property_mapped_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3052
3053    fn connect_property_margin_bottom_notify<F: Fn(&Self) + 'static>(
3054        &self,
3055        f: F,
3056    ) -> SignalHandlerId;
3057
3058    fn connect_property_margin_left_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3059
3060    fn connect_property_margin_right_notify<F: Fn(&Self) + 'static>(&self, f: F)
3061        -> SignalHandlerId;
3062
3063    fn connect_property_margin_top_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3064
3065    fn connect_property_min_height_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3066
3067    fn connect_property_min_height_set_notify<F: Fn(&Self) + 'static>(
3068        &self,
3069        f: F,
3070    ) -> SignalHandlerId;
3071
3072    fn connect_property_min_width_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3073
3074    fn connect_property_min_width_set_notify<F: Fn(&Self) + 'static>(
3075        &self,
3076        f: F,
3077    ) -> SignalHandlerId;
3078
3079    fn connect_property_minification_filter_notify<F: Fn(&Self) + 'static>(
3080        &self,
3081        f: F,
3082    ) -> SignalHandlerId;
3083
3084    fn connect_property_name_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3085
3086    fn connect_property_natural_height_notify<F: Fn(&Self) + 'static>(
3087        &self,
3088        f: F,
3089    ) -> SignalHandlerId;
3090
3091    fn connect_property_natural_height_set_notify<F: Fn(&Self) + 'static>(
3092        &self,
3093        f: F,
3094    ) -> SignalHandlerId;
3095
3096    fn connect_property_natural_width_notify<F: Fn(&Self) + 'static>(
3097        &self,
3098        f: F,
3099    ) -> SignalHandlerId;
3100
3101    fn connect_property_natural_width_set_notify<F: Fn(&Self) + 'static>(
3102        &self,
3103        f: F,
3104    ) -> SignalHandlerId;
3105
3106    fn connect_property_offscreen_redirect_notify<F: Fn(&Self) + 'static>(
3107        &self,
3108        f: F,
3109    ) -> SignalHandlerId;
3110
3111    fn connect_property_opacity_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3112
3113    fn connect_property_pivot_point_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3114
3115    fn connect_property_pivot_point_z_notify<F: Fn(&Self) + 'static>(
3116        &self,
3117        f: F,
3118    ) -> SignalHandlerId;
3119
3120    fn connect_property_position_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3121
3122    fn connect_property_reactive_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3123
3124    fn connect_property_realized_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3125
3126    fn connect_property_request_mode_notify<F: Fn(&Self) + 'static>(&self, f: F)
3127        -> SignalHandlerId;
3128
3129    fn connect_property_rotation_angle_x_notify<F: Fn(&Self) + 'static>(
3130        &self,
3131        f: F,
3132    ) -> SignalHandlerId;
3133
3134    fn connect_property_rotation_angle_y_notify<F: Fn(&Self) + 'static>(
3135        &self,
3136        f: F,
3137    ) -> SignalHandlerId;
3138
3139    fn connect_property_rotation_angle_z_notify<F: Fn(&Self) + 'static>(
3140        &self,
3141        f: F,
3142    ) -> SignalHandlerId;
3143
3144    fn connect_property_scale_x_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3145
3146    fn connect_property_scale_y_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3147
3148    fn connect_property_scale_z_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3149
3150    fn connect_property_show_on_set_parent_notify<F: Fn(&Self) + 'static>(
3151        &self,
3152        f: F,
3153    ) -> SignalHandlerId;
3154
3155    fn connect_property_size_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3156
3157    fn connect_property_text_direction_notify<F: Fn(&Self) + 'static>(
3158        &self,
3159        f: F,
3160    ) -> SignalHandlerId;
3161
3162    fn connect_property_transform_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3163
3164    fn connect_property_transform_set_notify<F: Fn(&Self) + 'static>(
3165        &self,
3166        f: F,
3167    ) -> SignalHandlerId;
3168
3169    fn connect_property_translation_x_notify<F: Fn(&Self) + 'static>(
3170        &self,
3171        f: F,
3172    ) -> SignalHandlerId;
3173
3174    fn connect_property_translation_y_notify<F: Fn(&Self) + 'static>(
3175        &self,
3176        f: F,
3177    ) -> SignalHandlerId;
3178
3179    fn connect_property_translation_z_notify<F: Fn(&Self) + 'static>(
3180        &self,
3181        f: F,
3182    ) -> SignalHandlerId;
3183
3184    fn connect_property_visible_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3185
3186    fn connect_property_width_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3187
3188    fn connect_property_x_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3189
3190    fn connect_property_x_align_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3191
3192    fn connect_property_x_expand_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3193
3194    fn connect_property_y_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3195
3196    fn connect_property_y_align_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3197
3198    fn connect_property_y_expand_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3199
3200    fn connect_property_z_position_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
3201}
3202
3203impl<O: IsA<Actor>> ActorExt for O {
3204    fn add_action<P: IsA<Action>>(&self, action: &P) {
3205        unsafe {
3206            ffi::clutter_actor_add_action(
3207                self.as_ref().to_glib_none().0,
3208                action.as_ref().to_glib_none().0,
3209            );
3210        }
3211    }
3212
3213    fn add_action_with_name<P: IsA<Action>>(&self, name: &str, action: &P) {
3214        unsafe {
3215            ffi::clutter_actor_add_action_with_name(
3216                self.as_ref().to_glib_none().0,
3217                name.to_glib_none().0,
3218                action.as_ref().to_glib_none().0,
3219            );
3220        }
3221    }
3222
3223    fn add_child<P: IsA<Actor>>(&self, child: &P) {
3224        unsafe {
3225            ffi::clutter_actor_add_child(
3226                self.as_ref().to_glib_none().0,
3227                child.as_ref().to_glib_none().0,
3228            );
3229        }
3230    }
3231
3232    fn add_constraint<P: IsA<Constraint>>(&self, constraint: &P) {
3233        unsafe {
3234            ffi::clutter_actor_add_constraint(
3235                self.as_ref().to_glib_none().0,
3236                constraint.as_ref().to_glib_none().0,
3237            );
3238        }
3239    }
3240
3241    fn add_constraint_with_name<P: IsA<Constraint>>(&self, name: &str, constraint: &P) {
3242        unsafe {
3243            ffi::clutter_actor_add_constraint_with_name(
3244                self.as_ref().to_glib_none().0,
3245                name.to_glib_none().0,
3246                constraint.as_ref().to_glib_none().0,
3247            );
3248        }
3249    }
3250
3251    fn add_effect<P: IsA<Effect>>(&self, effect: &P) {
3252        unsafe {
3253            ffi::clutter_actor_add_effect(
3254                self.as_ref().to_glib_none().0,
3255                effect.as_ref().to_glib_none().0,
3256            );
3257        }
3258    }
3259
3260    fn add_effect_with_name<P: IsA<Effect>>(&self, name: &str, effect: &P) {
3261        unsafe {
3262            ffi::clutter_actor_add_effect_with_name(
3263                self.as_ref().to_glib_none().0,
3264                name.to_glib_none().0,
3265                effect.as_ref().to_glib_none().0,
3266            );
3267        }
3268    }
3269
3270    fn add_transition<P: IsA<Transition>>(&self, name: &str, transition: &P) {
3271        unsafe {
3272            ffi::clutter_actor_add_transition(
3273                self.as_ref().to_glib_none().0,
3274                name.to_glib_none().0,
3275                transition.as_ref().to_glib_none().0,
3276            );
3277        }
3278    }
3279
3280    fn allocate(&self, box_: &ActorBox, flags: AllocationFlags) {
3281        unsafe {
3282            ffi::clutter_actor_allocate(
3283                self.as_ref().to_glib_none().0,
3284                box_.to_glib_none().0,
3285                flags.to_glib(),
3286            );
3287        }
3288    }
3289
3290    fn allocate_align_fill(
3291        &self,
3292        box_: &ActorBox,
3293        x_align: f64,
3294        y_align: f64,
3295        x_fill: bool,
3296        y_fill: bool,
3297        flags: AllocationFlags,
3298    ) {
3299        unsafe {
3300            ffi::clutter_actor_allocate_align_fill(
3301                self.as_ref().to_glib_none().0,
3302                box_.to_glib_none().0,
3303                x_align,
3304                y_align,
3305                x_fill.to_glib(),
3306                y_fill.to_glib(),
3307                flags.to_glib(),
3308            );
3309        }
3310    }
3311
3312    fn allocate_available_size(
3313        &self,
3314        x: f32,
3315        y: f32,
3316        available_width: f32,
3317        available_height: f32,
3318        flags: AllocationFlags,
3319    ) {
3320        unsafe {
3321            ffi::clutter_actor_allocate_available_size(
3322                self.as_ref().to_glib_none().0,
3323                x,
3324                y,
3325                available_width,
3326                available_height,
3327                flags.to_glib(),
3328            );
3329        }
3330    }
3331
3332    fn allocate_preferred_size(&self, flags: AllocationFlags) {
3333        unsafe {
3334            ffi::clutter_actor_allocate_preferred_size(
3335                self.as_ref().to_glib_none().0,
3336                flags.to_glib(),
3337            );
3338        }
3339    }
3340
3341    fn apply_relative_transform_to_point<P: IsA<Actor>>(
3342        &self,
3343        ancestor: Option<&P>,
3344        point: &Vertex,
3345    ) -> Vertex {
3346        unsafe {
3347            let mut vertex = Vertex::uninitialized();
3348            ffi::clutter_actor_apply_relative_transform_to_point(
3349                self.as_ref().to_glib_none().0,
3350                ancestor.map(|p| p.as_ref()).to_glib_none().0,
3351                point.to_glib_none().0,
3352                vertex.to_glib_none_mut().0,
3353            );
3354            vertex
3355        }
3356    }
3357
3358    fn apply_transform_to_point(&self, point: &Vertex) -> Vertex {
3359        unsafe {
3360            let mut vertex = Vertex::uninitialized();
3361            ffi::clutter_actor_apply_transform_to_point(
3362                self.as_ref().to_glib_none().0,
3363                point.to_glib_none().0,
3364                vertex.to_glib_none_mut().0,
3365            );
3366            vertex
3367        }
3368    }
3369
3370    fn bind_model<P: IsA<gio::ListModel>, Q: Fn(&glib::Object) -> Actor + 'static>(
3371        &self,
3372        model: Option<&P>,
3373        create_child_func: Q,
3374    ) {
3375        let create_child_func_data: Box_<Q> = Box_::new(create_child_func);
3376        unsafe extern "C" fn create_child_func_func<
3377            P: IsA<gio::ListModel>,
3378            Q: Fn(&glib::Object) -> Actor + 'static,
3379        >(
3380            item: *mut gobject_sys::GObject,
3381            user_data: glib_sys::gpointer,
3382        ) -> *mut ffi::ClutterActor {
3383            let item = from_glib_borrow(item);
3384            let callback: &Q = &*(user_data as *mut _);
3385            let res = (*callback)(&item);
3386            res.to_glib_full()
3387        }
3388        let create_child_func = Some(create_child_func_func::<P, Q> as _);
3389        unsafe extern "C" fn notify_func<
3390            P: IsA<gio::ListModel>,
3391            Q: Fn(&glib::Object) -> Actor + 'static,
3392        >(
3393            data: glib_sys::gpointer,
3394        ) {
3395            let _callback: Box_<Q> = Box_::from_raw(data as *mut _);
3396        }
3397        let destroy_call4 = Some(notify_func::<P, Q> as _);
3398        let super_callback0: Box_<Q> = create_child_func_data;
3399        unsafe {
3400            ffi::clutter_actor_bind_model(
3401                self.as_ref().to_glib_none().0,
3402                model.map(|p| p.as_ref()).to_glib_none().0,
3403                create_child_func,
3404                Box_::into_raw(super_callback0) as *mut _,
3405                destroy_call4,
3406            );
3407        }
3408    }
3409
3410    //fn bind_model_with_properties<P: IsA<gio::ListModel>>(&self, model: &P, child_type: glib::types::Type, first_model_property: &str, : /*Unknown conversion*//*Unimplemented*/Fundamental: VarArgs) {
3411    //    unsafe { TODO: call clutter_sys:clutter_actor_bind_model_with_properties() }
3412    //}
3413
3414    fn clear_actions(&self) {
3415        unsafe {
3416            ffi::clutter_actor_clear_actions(self.as_ref().to_glib_none().0);
3417        }
3418    }
3419
3420    fn clear_constraints(&self) {
3421        unsafe {
3422            ffi::clutter_actor_clear_constraints(self.as_ref().to_glib_none().0);
3423        }
3424    }
3425
3426    fn clear_effects(&self) {
3427        unsafe {
3428            ffi::clutter_actor_clear_effects(self.as_ref().to_glib_none().0);
3429        }
3430    }
3431
3432    fn contains<P: IsA<Actor>>(&self, descendant: &P) -> bool {
3433        unsafe {
3434            from_glib(ffi::clutter_actor_contains(
3435                self.as_ref().to_glib_none().0,
3436                descendant.as_ref().to_glib_none().0,
3437            ))
3438        }
3439    }
3440
3441    fn continue_paint(&self) {
3442        unsafe {
3443            ffi::clutter_actor_continue_paint(self.as_ref().to_glib_none().0);
3444        }
3445    }
3446
3447    fn create_pango_context(&self) -> Option<pango::Context> {
3448        unsafe {
3449            from_glib_full(ffi::clutter_actor_create_pango_context(
3450                self.as_ref().to_glib_none().0,
3451            ))
3452        }
3453    }
3454
3455    fn create_pango_layout(&self, text: Option<&str>) -> Option<pango::Layout> {
3456        unsafe {
3457            from_glib_full(ffi::clutter_actor_create_pango_layout(
3458                self.as_ref().to_glib_none().0,
3459                text.to_glib_none().0,
3460            ))
3461        }
3462    }
3463
3464    fn destroy(&self) {
3465        unsafe {
3466            ffi::clutter_actor_destroy(self.as_ref().to_glib_none().0);
3467        }
3468    }
3469
3470    fn destroy_all_children(&self) {
3471        unsafe {
3472            ffi::clutter_actor_destroy_all_children(self.as_ref().to_glib_none().0);
3473        }
3474    }
3475
3476    fn event(&self, event: &Event, capture: bool) -> bool {
3477        unsafe {
3478            from_glib(ffi::clutter_actor_event(
3479                self.as_ref().to_glib_none().0,
3480                event.to_glib_none().0,
3481                capture.to_glib(),
3482            ))
3483        }
3484    }
3485
3486    //fn get_abs_allocation_vertices(&self, verts: /*Unimplemented*/FixedArray TypeId { ns_id: 1, id: 16 }; 4) {
3487    //    unsafe { TODO: call clutter_sys:clutter_actor_get_abs_allocation_vertices() }
3488    //}
3489
3490    fn get_accessible(&self) -> Option<atk::Object> {
3491        unsafe {
3492            from_glib_none(ffi::clutter_actor_get_accessible(
3493                self.as_ref().to_glib_none().0,
3494            ))
3495        }
3496    }
3497
3498    fn get_action(&self, name: &str) -> Option<Action> {
3499        unsafe {
3500            from_glib_none(ffi::clutter_actor_get_action(
3501                self.as_ref().to_glib_none().0,
3502                name.to_glib_none().0,
3503            ))
3504        }
3505    }
3506
3507    fn get_actions(&self) -> Vec<Action> {
3508        unsafe {
3509            FromGlibPtrContainer::from_glib_container(ffi::clutter_actor_get_actions(
3510                self.as_ref().to_glib_none().0,
3511            ))
3512        }
3513    }
3514
3515    fn get_allocation_box(&self) -> ActorBox {
3516        unsafe {
3517            let mut box_ = ActorBox::uninitialized();
3518            ffi::clutter_actor_get_allocation_box(
3519                self.as_ref().to_glib_none().0,
3520                box_.to_glib_none_mut().0,
3521            );
3522            box_
3523        }
3524    }
3525
3526    //fn get_allocation_vertices<P: IsA<Actor>>(&self, ancestor: Option<&P>, verts: /*Unimplemented*/FixedArray TypeId { ns_id: 1, id: 16 }; 4) {
3527    //    unsafe { TODO: call clutter_sys:clutter_actor_get_allocation_vertices() }
3528    //}
3529
3530    fn get_background_color(&self) -> Color {
3531        unsafe {
3532            let mut color = Color::uninitialized();
3533            ffi::clutter_actor_get_background_color(
3534                self.as_ref().to_glib_none().0,
3535                color.to_glib_none_mut().0,
3536            );
3537            color
3538        }
3539    }
3540
3541    fn get_child_at_index(&self, index_: i32) -> Option<Actor> {
3542        unsafe {
3543            from_glib_none(ffi::clutter_actor_get_child_at_index(
3544                self.as_ref().to_glib_none().0,
3545                index_,
3546            ))
3547        }
3548    }
3549
3550    fn get_child_transform(&self) -> Matrix {
3551        unsafe {
3552            let mut transform = Matrix::uninitialized();
3553            ffi::clutter_actor_get_child_transform(
3554                self.as_ref().to_glib_none().0,
3555                transform.to_glib_none_mut().0,
3556            );
3557            transform
3558        }
3559    }
3560
3561    fn get_children(&self) -> Vec<Actor> {
3562        unsafe {
3563            FromGlibPtrContainer::from_glib_container(ffi::clutter_actor_get_children(
3564                self.as_ref().to_glib_none().0,
3565            ))
3566        }
3567    }
3568
3569    fn get_clip(&self) -> (f32, f32, f32, f32) {
3570        unsafe {
3571            let mut xoff = mem::MaybeUninit::uninit();
3572            let mut yoff = mem::MaybeUninit::uninit();
3573            let mut width = mem::MaybeUninit::uninit();
3574            let mut height = mem::MaybeUninit::uninit();
3575            ffi::clutter_actor_get_clip(
3576                self.as_ref().to_glib_none().0,
3577                xoff.as_mut_ptr(),
3578                yoff.as_mut_ptr(),
3579                width.as_mut_ptr(),
3580                height.as_mut_ptr(),
3581            );
3582            let xoff = xoff.assume_init();
3583            let yoff = yoff.assume_init();
3584            let width = width.assume_init();
3585            let height = height.assume_init();
3586            (xoff, yoff, width, height)
3587        }
3588    }
3589
3590    fn get_clip_to_allocation(&self) -> bool {
3591        unsafe {
3592            from_glib(ffi::clutter_actor_get_clip_to_allocation(
3593                self.as_ref().to_glib_none().0,
3594            ))
3595        }
3596    }
3597
3598    fn get_constraint(&self, name: &str) -> Option<Constraint> {
3599        unsafe {
3600            from_glib_none(ffi::clutter_actor_get_constraint(
3601                self.as_ref().to_glib_none().0,
3602                name.to_glib_none().0,
3603            ))
3604        }
3605    }
3606
3607    fn get_constraints(&self) -> Vec<Constraint> {
3608        unsafe {
3609            FromGlibPtrContainer::from_glib_container(ffi::clutter_actor_get_constraints(
3610                self.as_ref().to_glib_none().0,
3611            ))
3612        }
3613    }
3614
3615    fn get_content(&self) -> Option<Content> {
3616        unsafe {
3617            from_glib_none(ffi::clutter_actor_get_content(
3618                self.as_ref().to_glib_none().0,
3619            ))
3620        }
3621    }
3622
3623    fn get_content_box(&self) -> ActorBox {
3624        unsafe {
3625            let mut box_ = ActorBox::uninitialized();
3626            ffi::clutter_actor_get_content_box(
3627                self.as_ref().to_glib_none().0,
3628                box_.to_glib_none_mut().0,
3629            );
3630            box_
3631        }
3632    }
3633
3634    fn get_content_gravity(&self) -> ContentGravity {
3635        unsafe {
3636            from_glib(ffi::clutter_actor_get_content_gravity(
3637                self.as_ref().to_glib_none().0,
3638            ))
3639        }
3640    }
3641
3642    fn get_content_repeat(&self) -> ContentRepeat {
3643        unsafe {
3644            from_glib(ffi::clutter_actor_get_content_repeat(
3645                self.as_ref().to_glib_none().0,
3646            ))
3647        }
3648    }
3649
3650    fn get_content_scaling_filters(&self) -> (ScalingFilter, ScalingFilter) {
3651        unsafe {
3652            let mut min_filter = mem::MaybeUninit::uninit();
3653            let mut mag_filter = mem::MaybeUninit::uninit();
3654            ffi::clutter_actor_get_content_scaling_filters(
3655                self.as_ref().to_glib_none().0,
3656                min_filter.as_mut_ptr(),
3657                mag_filter.as_mut_ptr(),
3658            );
3659            let min_filter = min_filter.assume_init();
3660            let mag_filter = mag_filter.assume_init();
3661            (from_glib(min_filter), from_glib(mag_filter))
3662        }
3663    }
3664
3665    fn get_default_paint_volume(&self) -> Option<PaintVolume> {
3666        unsafe {
3667            from_glib_none(ffi::clutter_actor_get_default_paint_volume(
3668                self.as_ref().to_glib_none().0,
3669            ))
3670        }
3671    }
3672
3673    fn get_easing_delay(&self) -> u32 {
3674        unsafe { ffi::clutter_actor_get_easing_delay(self.as_ref().to_glib_none().0) }
3675    }
3676
3677    fn get_easing_duration(&self) -> u32 {
3678        unsafe { ffi::clutter_actor_get_easing_duration(self.as_ref().to_glib_none().0) }
3679    }
3680
3681    fn get_easing_mode(&self) -> AnimationMode {
3682        unsafe {
3683            from_glib(ffi::clutter_actor_get_easing_mode(
3684                self.as_ref().to_glib_none().0,
3685            ))
3686        }
3687    }
3688
3689    fn get_effect(&self, name: &str) -> Option<Effect> {
3690        unsafe {
3691            from_glib_none(ffi::clutter_actor_get_effect(
3692                self.as_ref().to_glib_none().0,
3693                name.to_glib_none().0,
3694            ))
3695        }
3696    }
3697
3698    fn get_effects(&self) -> Vec<Effect> {
3699        unsafe {
3700            FromGlibPtrContainer::from_glib_container(ffi::clutter_actor_get_effects(
3701                self.as_ref().to_glib_none().0,
3702            ))
3703        }
3704    }
3705
3706    fn get_first_child(&self) -> Option<Actor> {
3707        unsafe {
3708            from_glib_none(ffi::clutter_actor_get_first_child(
3709                self.as_ref().to_glib_none().0,
3710            ))
3711        }
3712    }
3713
3714    fn get_fixed_position_set(&self) -> bool {
3715        unsafe {
3716            from_glib(ffi::clutter_actor_get_fixed_position_set(
3717                self.as_ref().to_glib_none().0,
3718            ))
3719        }
3720    }
3721
3722    fn get_flags(&self) -> ActorFlags {
3723        unsafe { from_glib(ffi::clutter_actor_get_flags(self.as_ref().to_glib_none().0)) }
3724    }
3725
3726    fn get_height(&self) -> f32 {
3727        unsafe { ffi::clutter_actor_get_height(self.as_ref().to_glib_none().0) }
3728    }
3729
3730    fn get_last_child(&self) -> Option<Actor> {
3731        unsafe {
3732            from_glib_none(ffi::clutter_actor_get_last_child(
3733                self.as_ref().to_glib_none().0,
3734            ))
3735        }
3736    }
3737
3738    fn get_layout_manager(&self) -> Option<LayoutManager> {
3739        unsafe {
3740            from_glib_none(ffi::clutter_actor_get_layout_manager(
3741                self.as_ref().to_glib_none().0,
3742            ))
3743        }
3744    }
3745
3746    fn get_margin(&self) -> Margin {
3747        unsafe {
3748            let mut margin = Margin::uninitialized();
3749            ffi::clutter_actor_get_margin(
3750                self.as_ref().to_glib_none().0,
3751                margin.to_glib_none_mut().0,
3752            );
3753            margin
3754        }
3755    }
3756
3757    fn get_margin_bottom(&self) -> f32 {
3758        unsafe { ffi::clutter_actor_get_margin_bottom(self.as_ref().to_glib_none().0) }
3759    }
3760
3761    fn get_margin_left(&self) -> f32 {
3762        unsafe { ffi::clutter_actor_get_margin_left(self.as_ref().to_glib_none().0) }
3763    }
3764
3765    fn get_margin_right(&self) -> f32 {
3766        unsafe { ffi::clutter_actor_get_margin_right(self.as_ref().to_glib_none().0) }
3767    }
3768
3769    fn get_margin_top(&self) -> f32 {
3770        unsafe { ffi::clutter_actor_get_margin_top(self.as_ref().to_glib_none().0) }
3771    }
3772
3773    fn get_n_children(&self) -> i32 {
3774        unsafe { ffi::clutter_actor_get_n_children(self.as_ref().to_glib_none().0) }
3775    }
3776
3777    fn get_name(&self) -> Option<GString> {
3778        unsafe { from_glib_none(ffi::clutter_actor_get_name(self.as_ref().to_glib_none().0)) }
3779    }
3780
3781    fn get_next_sibling(&self) -> Option<Actor> {
3782        unsafe {
3783            from_glib_none(ffi::clutter_actor_get_next_sibling(
3784                self.as_ref().to_glib_none().0,
3785            ))
3786        }
3787    }
3788
3789    fn get_offscreen_redirect(&self) -> OffscreenRedirect {
3790        unsafe {
3791            from_glib(ffi::clutter_actor_get_offscreen_redirect(
3792                self.as_ref().to_glib_none().0,
3793            ))
3794        }
3795    }
3796
3797    fn get_opacity(&self) -> u8 {
3798        unsafe { ffi::clutter_actor_get_opacity(self.as_ref().to_glib_none().0) }
3799    }
3800
3801    fn get_paint_box(&self) -> Option<ActorBox> {
3802        unsafe {
3803            let mut box_ = ActorBox::uninitialized();
3804            let ret = from_glib(ffi::clutter_actor_get_paint_box(
3805                self.as_ref().to_glib_none().0,
3806                box_.to_glib_none_mut().0,
3807            ));
3808            if ret {
3809                Some(box_)
3810            } else {
3811                None
3812            }
3813        }
3814    }
3815
3816    fn get_paint_opacity(&self) -> u8 {
3817        unsafe { ffi::clutter_actor_get_paint_opacity(self.as_ref().to_glib_none().0) }
3818    }
3819
3820    fn get_paint_visibility(&self) -> bool {
3821        unsafe {
3822            from_glib(ffi::clutter_actor_get_paint_visibility(
3823                self.as_ref().to_glib_none().0,
3824            ))
3825        }
3826    }
3827
3828    fn get_paint_volume(&self) -> Option<PaintVolume> {
3829        unsafe {
3830            from_glib_none(ffi::clutter_actor_get_paint_volume(
3831                self.as_ref().to_glib_none().0,
3832            ))
3833        }
3834    }
3835
3836    fn get_pango_context(&self) -> Option<pango::Context> {
3837        unsafe {
3838            from_glib_none(ffi::clutter_actor_get_pango_context(
3839                self.as_ref().to_glib_none().0,
3840            ))
3841        }
3842    }
3843
3844    fn get_parent(&self) -> Option<Actor> {
3845        unsafe {
3846            from_glib_none(ffi::clutter_actor_get_parent(
3847                self.as_ref().to_glib_none().0,
3848            ))
3849        }
3850    }
3851
3852    fn get_pivot_point(&self) -> (f32, f32) {
3853        unsafe {
3854            let mut pivot_x = mem::MaybeUninit::uninit();
3855            let mut pivot_y = mem::MaybeUninit::uninit();
3856            ffi::clutter_actor_get_pivot_point(
3857                self.as_ref().to_glib_none().0,
3858                pivot_x.as_mut_ptr(),
3859                pivot_y.as_mut_ptr(),
3860            );
3861            let pivot_x = pivot_x.assume_init();
3862            let pivot_y = pivot_y.assume_init();
3863            (pivot_x, pivot_y)
3864        }
3865    }
3866
3867    fn get_pivot_point_z(&self) -> f32 {
3868        unsafe { ffi::clutter_actor_get_pivot_point_z(self.as_ref().to_glib_none().0) }
3869    }
3870
3871    fn get_position(&self) -> (f32, f32) {
3872        unsafe {
3873            let mut x = mem::MaybeUninit::uninit();
3874            let mut y = mem::MaybeUninit::uninit();
3875            ffi::clutter_actor_get_position(
3876                self.as_ref().to_glib_none().0,
3877                x.as_mut_ptr(),
3878                y.as_mut_ptr(),
3879            );
3880            let x = x.assume_init();
3881            let y = y.assume_init();
3882            (x, y)
3883        }
3884    }
3885
3886    fn get_preferred_height(&self, for_width: f32) -> (f32, f32) {
3887        unsafe {
3888            let mut min_height_p = mem::MaybeUninit::uninit();
3889            let mut natural_height_p = mem::MaybeUninit::uninit();
3890            ffi::clutter_actor_get_preferred_height(
3891                self.as_ref().to_glib_none().0,
3892                for_width,
3893                min_height_p.as_mut_ptr(),
3894                natural_height_p.as_mut_ptr(),
3895            );
3896            let min_height_p = min_height_p.assume_init();
3897            let natural_height_p = natural_height_p.assume_init();
3898            (min_height_p, natural_height_p)
3899        }
3900    }
3901
3902    fn get_preferred_size(&self) -> (f32, f32, f32, f32) {
3903        unsafe {
3904            let mut min_width_p = mem::MaybeUninit::uninit();
3905            let mut min_height_p = mem::MaybeUninit::uninit();
3906            let mut natural_width_p = mem::MaybeUninit::uninit();
3907            let mut natural_height_p = mem::MaybeUninit::uninit();
3908            ffi::clutter_actor_get_preferred_size(
3909                self.as_ref().to_glib_none().0,
3910                min_width_p.as_mut_ptr(),
3911                min_height_p.as_mut_ptr(),
3912                natural_width_p.as_mut_ptr(),
3913                natural_height_p.as_mut_ptr(),
3914            );
3915            let min_width_p = min_width_p.assume_init();
3916            let min_height_p = min_height_p.assume_init();
3917            let natural_width_p = natural_width_p.assume_init();
3918            let natural_height_p = natural_height_p.assume_init();
3919            (min_width_p, min_height_p, natural_width_p, natural_height_p)
3920        }
3921    }
3922
3923    fn get_preferred_width(&self, for_height: f32) -> (f32, f32) {
3924        unsafe {
3925            let mut min_width_p = mem::MaybeUninit::uninit();
3926            let mut natural_width_p = mem::MaybeUninit::uninit();
3927            ffi::clutter_actor_get_preferred_width(
3928                self.as_ref().to_glib_none().0,
3929                for_height,
3930                min_width_p.as_mut_ptr(),
3931                natural_width_p.as_mut_ptr(),
3932            );
3933            let min_width_p = min_width_p.assume_init();
3934            let natural_width_p = natural_width_p.assume_init();
3935            (min_width_p, natural_width_p)
3936        }
3937    }
3938
3939    fn get_previous_sibling(&self) -> Option<Actor> {
3940        unsafe {
3941            from_glib_none(ffi::clutter_actor_get_previous_sibling(
3942                self.as_ref().to_glib_none().0,
3943            ))
3944        }
3945    }
3946
3947    fn get_reactive(&self) -> bool {
3948        unsafe {
3949            from_glib(ffi::clutter_actor_get_reactive(
3950                self.as_ref().to_glib_none().0,
3951            ))
3952        }
3953    }
3954
3955    fn get_request_mode(&self) -> RequestMode {
3956        unsafe {
3957            from_glib(ffi::clutter_actor_get_request_mode(
3958                self.as_ref().to_glib_none().0,
3959            ))
3960        }
3961    }
3962
3963    fn get_rotation_angle(&self, axis: RotateAxis) -> f64 {
3964        unsafe {
3965            ffi::clutter_actor_get_rotation_angle(self.as_ref().to_glib_none().0, axis.to_glib())
3966        }
3967    }
3968
3969    fn get_scale(&self) -> (f64, f64) {
3970        unsafe {
3971            let mut scale_x = mem::MaybeUninit::uninit();
3972            let mut scale_y = mem::MaybeUninit::uninit();
3973            ffi::clutter_actor_get_scale(
3974                self.as_ref().to_glib_none().0,
3975                scale_x.as_mut_ptr(),
3976                scale_y.as_mut_ptr(),
3977            );
3978            let scale_x = scale_x.assume_init();
3979            let scale_y = scale_y.assume_init();
3980            (scale_x, scale_y)
3981        }
3982    }
3983
3984    fn get_scale_z(&self) -> f64 {
3985        unsafe { ffi::clutter_actor_get_scale_z(self.as_ref().to_glib_none().0) }
3986    }
3987
3988    fn get_size(&self) -> (f32, f32) {
3989        unsafe {
3990            let mut width = mem::MaybeUninit::uninit();
3991            let mut height = mem::MaybeUninit::uninit();
3992            ffi::clutter_actor_get_size(
3993                self.as_ref().to_glib_none().0,
3994                width.as_mut_ptr(),
3995                height.as_mut_ptr(),
3996            );
3997            let width = width.assume_init();
3998            let height = height.assume_init();
3999            (width, height)
4000        }
4001    }
4002
4003    fn get_stage(&self) -> Option<Stage> {
4004        unsafe { from_glib_none(ffi::clutter_actor_get_stage(self.as_ref().to_glib_none().0)) }
4005    }
4006
4007    fn get_text_direction(&self) -> TextDirection {
4008        unsafe {
4009            from_glib(ffi::clutter_actor_get_text_direction(
4010                self.as_ref().to_glib_none().0,
4011            ))
4012        }
4013    }
4014
4015    fn get_transform(&self) -> Matrix {
4016        unsafe {
4017            let mut transform = Matrix::uninitialized();
4018            ffi::clutter_actor_get_transform(
4019                self.as_ref().to_glib_none().0,
4020                transform.to_glib_none_mut().0,
4021            );
4022            transform
4023        }
4024    }
4025
4026    fn get_transformed_paint_volume<P: IsA<Actor>>(
4027        &self,
4028        relative_to_ancestor: &P,
4029    ) -> Option<PaintVolume> {
4030        unsafe {
4031            from_glib_none(ffi::clutter_actor_get_transformed_paint_volume(
4032                self.as_ref().to_glib_none().0,
4033                relative_to_ancestor.as_ref().to_glib_none().0,
4034            ))
4035        }
4036    }
4037
4038    fn get_transformed_position(&self) -> (f32, f32) {
4039        unsafe {
4040            let mut x = mem::MaybeUninit::uninit();
4041            let mut y = mem::MaybeUninit::uninit();
4042            ffi::clutter_actor_get_transformed_position(
4043                self.as_ref().to_glib_none().0,
4044                x.as_mut_ptr(),
4045                y.as_mut_ptr(),
4046            );
4047            let x = x.assume_init();
4048            let y = y.assume_init();
4049            (x, y)
4050        }
4051    }
4052
4053    fn get_transformed_size(&self) -> (f32, f32) {
4054        unsafe {
4055            let mut width = mem::MaybeUninit::uninit();
4056            let mut height = mem::MaybeUninit::uninit();
4057            ffi::clutter_actor_get_transformed_size(
4058                self.as_ref().to_glib_none().0,
4059                width.as_mut_ptr(),
4060                height.as_mut_ptr(),
4061            );
4062            let width = width.assume_init();
4063            let height = height.assume_init();
4064            (width, height)
4065        }
4066    }
4067
4068    fn get_transition(&self, name: &str) -> Option<Transition> {
4069        unsafe {
4070            from_glib_none(ffi::clutter_actor_get_transition(
4071                self.as_ref().to_glib_none().0,
4072                name.to_glib_none().0,
4073            ))
4074        }
4075    }
4076
4077    fn get_translation(&self) -> (f32, f32, f32) {
4078        unsafe {
4079            let mut translate_x = mem::MaybeUninit::uninit();
4080            let mut translate_y = mem::MaybeUninit::uninit();
4081            let mut translate_z = mem::MaybeUninit::uninit();
4082            ffi::clutter_actor_get_translation(
4083                self.as_ref().to_glib_none().0,
4084                translate_x.as_mut_ptr(),
4085                translate_y.as_mut_ptr(),
4086                translate_z.as_mut_ptr(),
4087            );
4088            let translate_x = translate_x.assume_init();
4089            let translate_y = translate_y.assume_init();
4090            let translate_z = translate_z.assume_init();
4091            (translate_x, translate_y, translate_z)
4092        }
4093    }
4094
4095    fn get_width(&self) -> f32 {
4096        unsafe { ffi::clutter_actor_get_width(self.as_ref().to_glib_none().0) }
4097    }
4098
4099    fn get_x(&self) -> f32 {
4100        unsafe { ffi::clutter_actor_get_x(self.as_ref().to_glib_none().0) }
4101    }
4102
4103    fn get_x_align(&self) -> ActorAlign {
4104        unsafe {
4105            from_glib(ffi::clutter_actor_get_x_align(
4106                self.as_ref().to_glib_none().0,
4107            ))
4108        }
4109    }
4110
4111    fn get_x_expand(&self) -> bool {
4112        unsafe {
4113            from_glib(ffi::clutter_actor_get_x_expand(
4114                self.as_ref().to_glib_none().0,
4115            ))
4116        }
4117    }
4118
4119    fn get_y(&self) -> f32 {
4120        unsafe { ffi::clutter_actor_get_y(self.as_ref().to_glib_none().0) }
4121    }
4122
4123    fn get_y_align(&self) -> ActorAlign {
4124        unsafe {
4125            from_glib(ffi::clutter_actor_get_y_align(
4126                self.as_ref().to_glib_none().0,
4127            ))
4128        }
4129    }
4130
4131    fn get_y_expand(&self) -> bool {
4132        unsafe {
4133            from_glib(ffi::clutter_actor_get_y_expand(
4134                self.as_ref().to_glib_none().0,
4135            ))
4136        }
4137    }
4138
4139    fn get_z_position(&self) -> f32 {
4140        unsafe { ffi::clutter_actor_get_z_position(self.as_ref().to_glib_none().0) }
4141    }
4142
4143    fn grab_key_focus(&self) {
4144        unsafe {
4145            ffi::clutter_actor_grab_key_focus(self.as_ref().to_glib_none().0);
4146        }
4147    }
4148
4149    fn has_actions(&self) -> bool {
4150        unsafe {
4151            from_glib(ffi::clutter_actor_has_actions(
4152                self.as_ref().to_glib_none().0,
4153            ))
4154        }
4155    }
4156
4157    fn has_allocation(&self) -> bool {
4158        unsafe {
4159            from_glib(ffi::clutter_actor_has_allocation(
4160                self.as_ref().to_glib_none().0,
4161            ))
4162        }
4163    }
4164
4165    fn has_clip(&self) -> bool {
4166        unsafe { from_glib(ffi::clutter_actor_has_clip(self.as_ref().to_glib_none().0)) }
4167    }
4168
4169    fn has_constraints(&self) -> bool {
4170        unsafe {
4171            from_glib(ffi::clutter_actor_has_constraints(
4172                self.as_ref().to_glib_none().0,
4173            ))
4174        }
4175    }
4176
4177    fn has_effects(&self) -> bool {
4178        unsafe {
4179            from_glib(ffi::clutter_actor_has_effects(
4180                self.as_ref().to_glib_none().0,
4181            ))
4182        }
4183    }
4184
4185    fn has_key_focus(&self) -> bool {
4186        unsafe {
4187            from_glib(ffi::clutter_actor_has_key_focus(
4188                self.as_ref().to_glib_none().0,
4189            ))
4190        }
4191    }
4192
4193    fn has_overlaps(&self) -> bool {
4194        unsafe {
4195            from_glib(ffi::clutter_actor_has_overlaps(
4196                self.as_ref().to_glib_none().0,
4197            ))
4198        }
4199    }
4200
4201    fn has_pointer(&self) -> bool {
4202        unsafe {
4203            from_glib(ffi::clutter_actor_has_pointer(
4204                self.as_ref().to_glib_none().0,
4205            ))
4206        }
4207    }
4208
4209    fn hide(&self) {
4210        unsafe {
4211            ffi::clutter_actor_hide(self.as_ref().to_glib_none().0);
4212        }
4213    }
4214
4215    fn insert_child_above<P: IsA<Actor>, Q: IsA<Actor>>(&self, child: &P, sibling: Option<&Q>) {
4216        unsafe {
4217            ffi::clutter_actor_insert_child_above(
4218                self.as_ref().to_glib_none().0,
4219                child.as_ref().to_glib_none().0,
4220                sibling.map(|p| p.as_ref()).to_glib_none().0,
4221            );
4222        }
4223    }
4224
4225    fn insert_child_at_index<P: IsA<Actor>>(&self, child: &P, index_: i32) {
4226        unsafe {
4227            ffi::clutter_actor_insert_child_at_index(
4228                self.as_ref().to_glib_none().0,
4229                child.as_ref().to_glib_none().0,
4230                index_,
4231            );
4232        }
4233    }
4234
4235    fn insert_child_below<P: IsA<Actor>, Q: IsA<Actor>>(&self, child: &P, sibling: Option<&Q>) {
4236        unsafe {
4237            ffi::clutter_actor_insert_child_below(
4238                self.as_ref().to_glib_none().0,
4239                child.as_ref().to_glib_none().0,
4240                sibling.map(|p| p.as_ref()).to_glib_none().0,
4241            );
4242        }
4243    }
4244
4245    fn is_in_clone_paint(&self) -> bool {
4246        unsafe {
4247            from_glib(ffi::clutter_actor_is_in_clone_paint(
4248                self.as_ref().to_glib_none().0,
4249            ))
4250        }
4251    }
4252
4253    fn is_mapped(&self) -> bool {
4254        unsafe { from_glib(ffi::clutter_actor_is_mapped(self.as_ref().to_glib_none().0)) }
4255    }
4256
4257    fn is_realized(&self) -> bool {
4258        unsafe {
4259            from_glib(ffi::clutter_actor_is_realized(
4260                self.as_ref().to_glib_none().0,
4261            ))
4262        }
4263    }
4264
4265    fn is_rotated(&self) -> bool {
4266        unsafe {
4267            from_glib(ffi::clutter_actor_is_rotated(
4268                self.as_ref().to_glib_none().0,
4269            ))
4270        }
4271    }
4272
4273    fn is_scaled(&self) -> bool {
4274        unsafe { from_glib(ffi::clutter_actor_is_scaled(self.as_ref().to_glib_none().0)) }
4275    }
4276
4277    fn is_visible(&self) -> bool {
4278        unsafe {
4279            from_glib(ffi::clutter_actor_is_visible(
4280                self.as_ref().to_glib_none().0,
4281            ))
4282        }
4283    }
4284
4285    fn map(&self) {
4286        unsafe {
4287            ffi::clutter_actor_map(self.as_ref().to_glib_none().0);
4288        }
4289    }
4290
4291    fn move_by(&self, dx: f32, dy: f32) {
4292        unsafe {
4293            ffi::clutter_actor_move_by(self.as_ref().to_glib_none().0, dx, dy);
4294        }
4295    }
4296
4297    fn needs_expand(&self, orientation: Orientation) -> bool {
4298        unsafe {
4299            from_glib(ffi::clutter_actor_needs_expand(
4300                self.as_ref().to_glib_none().0,
4301                orientation.to_glib(),
4302            ))
4303        }
4304    }
4305
4306    fn paint(&self) {
4307        unsafe {
4308            ffi::clutter_actor_paint(self.as_ref().to_glib_none().0);
4309        }
4310    }
4311
4312    fn queue_redraw(&self) {
4313        unsafe {
4314            ffi::clutter_actor_queue_redraw(self.as_ref().to_glib_none().0);
4315        }
4316    }
4317
4318    fn queue_redraw_with_clip(&self, clip: Option<&cairo::RectangleInt>) {
4319        unsafe {
4320            ffi::clutter_actor_queue_redraw_with_clip(
4321                self.as_ref().to_glib_none().0,
4322                clip.to_glib_none().0,
4323            );
4324        }
4325    }
4326
4327    fn queue_relayout(&self) {
4328        unsafe {
4329            ffi::clutter_actor_queue_relayout(self.as_ref().to_glib_none().0);
4330        }
4331    }
4332
4333    fn remove_action<P: IsA<Action>>(&self, action: &P) {
4334        unsafe {
4335            ffi::clutter_actor_remove_action(
4336                self.as_ref().to_glib_none().0,
4337                action.as_ref().to_glib_none().0,
4338            );
4339        }
4340    }
4341
4342    fn remove_action_by_name(&self, name: &str) {
4343        unsafe {
4344            ffi::clutter_actor_remove_action_by_name(
4345                self.as_ref().to_glib_none().0,
4346                name.to_glib_none().0,
4347            );
4348        }
4349    }
4350
4351    fn remove_all_children(&self) {
4352        unsafe {
4353            ffi::clutter_actor_remove_all_children(self.as_ref().to_glib_none().0);
4354        }
4355    }
4356
4357    fn remove_all_transitions(&self) {
4358        unsafe {
4359            ffi::clutter_actor_remove_all_transitions(self.as_ref().to_glib_none().0);
4360        }
4361    }
4362
4363    fn remove_child<P: IsA<Actor>>(&self, child: &P) {
4364        unsafe {
4365            ffi::clutter_actor_remove_child(
4366                self.as_ref().to_glib_none().0,
4367                child.as_ref().to_glib_none().0,
4368            );
4369        }
4370    }
4371
4372    fn remove_clip(&self) {
4373        unsafe {
4374            ffi::clutter_actor_remove_clip(self.as_ref().to_glib_none().0);
4375        }
4376    }
4377
4378    fn remove_constraint<P: IsA<Constraint>>(&self, constraint: &P) {
4379        unsafe {
4380            ffi::clutter_actor_remove_constraint(
4381                self.as_ref().to_glib_none().0,
4382                constraint.as_ref().to_glib_none().0,
4383            );
4384        }
4385    }
4386
4387    fn remove_constraint_by_name(&self, name: &str) {
4388        unsafe {
4389            ffi::clutter_actor_remove_constraint_by_name(
4390                self.as_ref().to_glib_none().0,
4391                name.to_glib_none().0,
4392            );
4393        }
4394    }
4395
4396    fn remove_effect<P: IsA<Effect>>(&self, effect: &P) {
4397        unsafe {
4398            ffi::clutter_actor_remove_effect(
4399                self.as_ref().to_glib_none().0,
4400                effect.as_ref().to_glib_none().0,
4401            );
4402        }
4403    }
4404
4405    fn remove_effect_by_name(&self, name: &str) {
4406        unsafe {
4407            ffi::clutter_actor_remove_effect_by_name(
4408                self.as_ref().to_glib_none().0,
4409                name.to_glib_none().0,
4410            );
4411        }
4412    }
4413
4414    fn remove_transition(&self, name: &str) {
4415        unsafe {
4416            ffi::clutter_actor_remove_transition(
4417                self.as_ref().to_glib_none().0,
4418                name.to_glib_none().0,
4419            );
4420        }
4421    }
4422
4423    fn replace_child<P: IsA<Actor>, Q: IsA<Actor>>(&self, old_child: &P, new_child: &Q) {
4424        unsafe {
4425            ffi::clutter_actor_replace_child(
4426                self.as_ref().to_glib_none().0,
4427                old_child.as_ref().to_glib_none().0,
4428                new_child.as_ref().to_glib_none().0,
4429            );
4430        }
4431    }
4432
4433    fn restore_easing_state(&self) {
4434        unsafe {
4435            ffi::clutter_actor_restore_easing_state(self.as_ref().to_glib_none().0);
4436        }
4437    }
4438
4439    fn save_easing_state(&self) {
4440        unsafe {
4441            ffi::clutter_actor_save_easing_state(self.as_ref().to_glib_none().0);
4442        }
4443    }
4444
4445    fn set_allocation(&self, box_: &ActorBox, flags: AllocationFlags) {
4446        unsafe {
4447            ffi::clutter_actor_set_allocation(
4448                self.as_ref().to_glib_none().0,
4449                box_.to_glib_none().0,
4450                flags.to_glib(),
4451            );
4452        }
4453    }
4454
4455    fn set_background_color(&self, color: Option<&Color>) {
4456        unsafe {
4457            ffi::clutter_actor_set_background_color(
4458                self.as_ref().to_glib_none().0,
4459                color.to_glib_none().0,
4460            );
4461        }
4462    }
4463
4464    fn set_child_above_sibling<P: IsA<Actor>, Q: IsA<Actor>>(
4465        &self,
4466        child: &P,
4467        sibling: Option<&Q>,
4468    ) {
4469        unsafe {
4470            ffi::clutter_actor_set_child_above_sibling(
4471                self.as_ref().to_glib_none().0,
4472                child.as_ref().to_glib_none().0,
4473                sibling.map(|p| p.as_ref()).to_glib_none().0,
4474            );
4475        }
4476    }
4477
4478    fn set_child_at_index<P: IsA<Actor>>(&self, child: &P, index_: i32) {
4479        unsafe {
4480            ffi::clutter_actor_set_child_at_index(
4481                self.as_ref().to_glib_none().0,
4482                child.as_ref().to_glib_none().0,
4483                index_,
4484            );
4485        }
4486    }
4487
4488    fn set_child_below_sibling<P: IsA<Actor>, Q: IsA<Actor>>(
4489        &self,
4490        child: &P,
4491        sibling: Option<&Q>,
4492    ) {
4493        unsafe {
4494            ffi::clutter_actor_set_child_below_sibling(
4495                self.as_ref().to_glib_none().0,
4496                child.as_ref().to_glib_none().0,
4497                sibling.map(|p| p.as_ref()).to_glib_none().0,
4498            );
4499        }
4500    }
4501
4502    fn set_child_transform(&self, transform: Option<&Matrix>) {
4503        unsafe {
4504            ffi::clutter_actor_set_child_transform(
4505                self.as_ref().to_glib_none().0,
4506                transform.to_glib_none().0,
4507            );
4508        }
4509    }
4510
4511    fn set_clip(&self, xoff: f32, yoff: f32, width: f32, height: f32) {
4512        unsafe {
4513            ffi::clutter_actor_set_clip(self.as_ref().to_glib_none().0, xoff, yoff, width, height);
4514        }
4515    }
4516
4517    fn set_clip_to_allocation(&self, clip_set: bool) {
4518        unsafe {
4519            ffi::clutter_actor_set_clip_to_allocation(
4520                self.as_ref().to_glib_none().0,
4521                clip_set.to_glib(),
4522            );
4523        }
4524    }
4525
4526    fn set_content<P: IsA<Content>>(&self, content: Option<&P>) {
4527        unsafe {
4528            ffi::clutter_actor_set_content(
4529                self.as_ref().to_glib_none().0,
4530                content.map(|p| p.as_ref()).to_glib_none().0,
4531            );
4532        }
4533    }
4534
4535    fn set_content_gravity(&self, gravity: ContentGravity) {
4536        unsafe {
4537            ffi::clutter_actor_set_content_gravity(
4538                self.as_ref().to_glib_none().0,
4539                gravity.to_glib(),
4540            );
4541        }
4542    }
4543
4544    fn set_content_repeat(&self, repeat: ContentRepeat) {
4545        unsafe {
4546            ffi::clutter_actor_set_content_repeat(self.as_ref().to_glib_none().0, repeat.to_glib());
4547        }
4548    }
4549
4550    fn set_content_scaling_filters(&self, min_filter: ScalingFilter, mag_filter: ScalingFilter) {
4551        unsafe {
4552            ffi::clutter_actor_set_content_scaling_filters(
4553                self.as_ref().to_glib_none().0,
4554                min_filter.to_glib(),
4555                mag_filter.to_glib(),
4556            );
4557        }
4558    }
4559
4560    fn set_easing_delay(&self, msecs: u32) {
4561        unsafe {
4562            ffi::clutter_actor_set_easing_delay(self.as_ref().to_glib_none().0, msecs);
4563        }
4564    }
4565
4566    fn set_easing_duration(&self, msecs: u32) {
4567        unsafe {
4568            ffi::clutter_actor_set_easing_duration(self.as_ref().to_glib_none().0, msecs);
4569        }
4570    }
4571
4572    fn set_easing_mode(&self, mode: AnimationMode) {
4573        unsafe {
4574            ffi::clutter_actor_set_easing_mode(self.as_ref().to_glib_none().0, mode.to_glib());
4575        }
4576    }
4577
4578    fn set_fixed_position_set(&self, is_set: bool) {
4579        unsafe {
4580            ffi::clutter_actor_set_fixed_position_set(
4581                self.as_ref().to_glib_none().0,
4582                is_set.to_glib(),
4583            );
4584        }
4585    }
4586
4587    fn set_flags(&self, flags: ActorFlags) {
4588        unsafe {
4589            ffi::clutter_actor_set_flags(self.as_ref().to_glib_none().0, flags.to_glib());
4590        }
4591    }
4592
4593    fn set_height(&self, height: f32) {
4594        unsafe {
4595            ffi::clutter_actor_set_height(self.as_ref().to_glib_none().0, height);
4596        }
4597    }
4598
4599    fn set_layout_manager<P: IsA<LayoutManager>>(&self, manager: Option<&P>) {
4600        unsafe {
4601            ffi::clutter_actor_set_layout_manager(
4602                self.as_ref().to_glib_none().0,
4603                manager.map(|p| p.as_ref()).to_glib_none().0,
4604            );
4605        }
4606    }
4607
4608    fn set_margin(&self, margin: &Margin) {
4609        unsafe {
4610            ffi::clutter_actor_set_margin(self.as_ref().to_glib_none().0, margin.to_glib_none().0);
4611        }
4612    }
4613
4614    fn set_margin_bottom(&self, margin: f32) {
4615        unsafe {
4616            ffi::clutter_actor_set_margin_bottom(self.as_ref().to_glib_none().0, margin);
4617        }
4618    }
4619
4620    fn set_margin_left(&self, margin: f32) {
4621        unsafe {
4622            ffi::clutter_actor_set_margin_left(self.as_ref().to_glib_none().0, margin);
4623        }
4624    }
4625
4626    fn set_margin_right(&self, margin: f32) {
4627        unsafe {
4628            ffi::clutter_actor_set_margin_right(self.as_ref().to_glib_none().0, margin);
4629        }
4630    }
4631
4632    fn set_margin_top(&self, margin: f32) {
4633        unsafe {
4634            ffi::clutter_actor_set_margin_top(self.as_ref().to_glib_none().0, margin);
4635        }
4636    }
4637
4638    fn set_name(&self, name: &str) {
4639        unsafe {
4640            ffi::clutter_actor_set_name(self.as_ref().to_glib_none().0, name.to_glib_none().0);
4641        }
4642    }
4643
4644    fn set_offscreen_redirect(&self, redirect: OffscreenRedirect) {
4645        unsafe {
4646            ffi::clutter_actor_set_offscreen_redirect(
4647                self.as_ref().to_glib_none().0,
4648                redirect.to_glib(),
4649            );
4650        }
4651    }
4652
4653    fn set_opacity(&self, opacity: u8) {
4654        unsafe {
4655            ffi::clutter_actor_set_opacity(self.as_ref().to_glib_none().0, opacity);
4656        }
4657    }
4658
4659    fn set_pivot_point(&self, pivot_x: f32, pivot_y: f32) {
4660        unsafe {
4661            ffi::clutter_actor_set_pivot_point(self.as_ref().to_glib_none().0, pivot_x, pivot_y);
4662        }
4663    }
4664
4665    fn set_pivot_point_z(&self, pivot_z: f32) {
4666        unsafe {
4667            ffi::clutter_actor_set_pivot_point_z(self.as_ref().to_glib_none().0, pivot_z);
4668        }
4669    }
4670
4671    fn set_position(&self, x: f32, y: f32) {
4672        unsafe {
4673            ffi::clutter_actor_set_position(self.as_ref().to_glib_none().0, x, y);
4674        }
4675    }
4676
4677    fn set_reactive(&self, reactive: bool) {
4678        unsafe {
4679            ffi::clutter_actor_set_reactive(self.as_ref().to_glib_none().0, reactive.to_glib());
4680        }
4681    }
4682
4683    fn set_request_mode(&self, mode: RequestMode) {
4684        unsafe {
4685            ffi::clutter_actor_set_request_mode(self.as_ref().to_glib_none().0, mode.to_glib());
4686        }
4687    }
4688
4689    fn set_rotation_angle(&self, axis: RotateAxis, angle: f64) {
4690        unsafe {
4691            ffi::clutter_actor_set_rotation_angle(
4692                self.as_ref().to_glib_none().0,
4693                axis.to_glib(),
4694                angle,
4695            );
4696        }
4697    }
4698
4699    fn set_scale(&self, scale_x: f64, scale_y: f64) {
4700        unsafe {
4701            ffi::clutter_actor_set_scale(self.as_ref().to_glib_none().0, scale_x, scale_y);
4702        }
4703    }
4704
4705    fn set_scale_z(&self, scale_z: f64) {
4706        unsafe {
4707            ffi::clutter_actor_set_scale_z(self.as_ref().to_glib_none().0, scale_z);
4708        }
4709    }
4710
4711    fn set_size(&self, width: f32, height: f32) {
4712        unsafe {
4713            ffi::clutter_actor_set_size(self.as_ref().to_glib_none().0, width, height);
4714        }
4715    }
4716
4717    fn set_text_direction(&self, text_dir: TextDirection) {
4718        unsafe {
4719            ffi::clutter_actor_set_text_direction(
4720                self.as_ref().to_glib_none().0,
4721                text_dir.to_glib(),
4722            );
4723        }
4724    }
4725
4726    fn set_transform(&self, transform: Option<&Matrix>) {
4727        unsafe {
4728            ffi::clutter_actor_set_transform(
4729                self.as_ref().to_glib_none().0,
4730                transform.to_glib_none().0,
4731            );
4732        }
4733    }
4734
4735    fn set_translation(&self, translate_x: f32, translate_y: f32, translate_z: f32) {
4736        unsafe {
4737            ffi::clutter_actor_set_translation(
4738                self.as_ref().to_glib_none().0,
4739                translate_x,
4740                translate_y,
4741                translate_z,
4742            );
4743        }
4744    }
4745
4746    fn set_width(&self, width: f32) {
4747        unsafe {
4748            ffi::clutter_actor_set_width(self.as_ref().to_glib_none().0, width);
4749        }
4750    }
4751
4752    fn set_x(&self, x: f32) {
4753        unsafe {
4754            ffi::clutter_actor_set_x(self.as_ref().to_glib_none().0, x);
4755        }
4756    }
4757
4758    fn set_x_align(&self, x_align: ActorAlign) {
4759        unsafe {
4760            ffi::clutter_actor_set_x_align(self.as_ref().to_glib_none().0, x_align.to_glib());
4761        }
4762    }
4763
4764    fn set_x_expand(&self, expand: bool) {
4765        unsafe {
4766            ffi::clutter_actor_set_x_expand(self.as_ref().to_glib_none().0, expand.to_glib());
4767        }
4768    }
4769
4770    fn set_y(&self, y: f32) {
4771        unsafe {
4772            ffi::clutter_actor_set_y(self.as_ref().to_glib_none().0, y);
4773        }
4774    }
4775
4776    fn set_y_align(&self, y_align: ActorAlign) {
4777        unsafe {
4778            ffi::clutter_actor_set_y_align(self.as_ref().to_glib_none().0, y_align.to_glib());
4779        }
4780    }
4781
4782    fn set_y_expand(&self, expand: bool) {
4783        unsafe {
4784            ffi::clutter_actor_set_y_expand(self.as_ref().to_glib_none().0, expand.to_glib());
4785        }
4786    }
4787
4788    fn set_z_position(&self, z_position: f32) {
4789        unsafe {
4790            ffi::clutter_actor_set_z_position(self.as_ref().to_glib_none().0, z_position);
4791        }
4792    }
4793
4794    fn should_pick_paint(&self) -> bool {
4795        unsafe {
4796            from_glib(ffi::clutter_actor_should_pick_paint(
4797                self.as_ref().to_glib_none().0,
4798            ))
4799        }
4800    }
4801
4802    fn show(&self) {
4803        unsafe {
4804            ffi::clutter_actor_show(self.as_ref().to_glib_none().0);
4805        }
4806    }
4807
4808    fn transform_stage_point(&self, x: f32, y: f32) -> Option<(f32, f32)> {
4809        unsafe {
4810            let mut x_out = mem::MaybeUninit::uninit();
4811            let mut y_out = mem::MaybeUninit::uninit();
4812            let ret = from_glib(ffi::clutter_actor_transform_stage_point(
4813                self.as_ref().to_glib_none().0,
4814                x,
4815                y,
4816                x_out.as_mut_ptr(),
4817                y_out.as_mut_ptr(),
4818            ));
4819            let x_out = x_out.assume_init();
4820            let y_out = y_out.assume_init();
4821            if ret {
4822                Some((x_out, y_out))
4823            } else {
4824                None
4825            }
4826        }
4827    }
4828
4829    fn unmap(&self) {
4830        unsafe {
4831            ffi::clutter_actor_unmap(self.as_ref().to_glib_none().0);
4832        }
4833    }
4834
4835    fn unset_flags(&self, flags: ActorFlags) {
4836        unsafe {
4837            ffi::clutter_actor_unset_flags(self.as_ref().to_glib_none().0, flags.to_glib());
4838        }
4839    }
4840
4841    fn set_property_actions<P: IsA<Action> + SetValueOptional>(&self, actions: Option<&P>) {
4842        unsafe {
4843            gobject_sys::g_object_set_property(
4844                self.to_glib_none().0 as *mut gobject_sys::GObject,
4845                b"actions\0".as_ptr() as *const _,
4846                Value::from(actions).to_glib_none().0,
4847            );
4848        }
4849    }
4850
4851    fn get_property_allocation(&self) -> Option<ActorBox> {
4852        unsafe {
4853            let mut value = Value::from_type(<ActorBox as StaticType>::static_type());
4854            gobject_sys::g_object_get_property(
4855                self.to_glib_none().0 as *mut gobject_sys::GObject,
4856                b"allocation\0".as_ptr() as *const _,
4857                value.to_glib_none_mut().0,
4858            );
4859            value
4860                .get()
4861                .expect("Return Value for property `allocation` getter")
4862        }
4863    }
4864
4865    fn get_property_background_color_set(&self) -> bool {
4866        unsafe {
4867            let mut value = Value::from_type(<bool as StaticType>::static_type());
4868            gobject_sys::g_object_get_property(
4869                self.to_glib_none().0 as *mut gobject_sys::GObject,
4870                b"background-color-set\0".as_ptr() as *const _,
4871                value.to_glib_none_mut().0,
4872            );
4873            value
4874                .get()
4875                .expect("Return Value for property `background-color-set` getter")
4876                .unwrap()
4877        }
4878    }
4879
4880    fn get_property_child_transform_set(&self) -> bool {
4881        unsafe {
4882            let mut value = Value::from_type(<bool as StaticType>::static_type());
4883            gobject_sys::g_object_get_property(
4884                self.to_glib_none().0 as *mut gobject_sys::GObject,
4885                b"child-transform-set\0".as_ptr() as *const _,
4886                value.to_glib_none_mut().0,
4887            );
4888            value
4889                .get()
4890                .expect("Return Value for property `child-transform-set` getter")
4891                .unwrap()
4892        }
4893    }
4894
4895    fn get_property_clip_rect(&self) -> Option<Rect> {
4896        unsafe {
4897            let mut value = Value::from_type(<Rect as StaticType>::static_type());
4898            gobject_sys::g_object_get_property(
4899                self.to_glib_none().0 as *mut gobject_sys::GObject,
4900                b"clip-rect\0".as_ptr() as *const _,
4901                value.to_glib_none_mut().0,
4902            );
4903            value
4904                .get()
4905                .expect("Return Value for property `clip-rect` getter")
4906        }
4907    }
4908
4909    fn set_property_clip_rect(&self, clip_rect: Option<&Rect>) {
4910        unsafe {
4911            gobject_sys::g_object_set_property(
4912                self.to_glib_none().0 as *mut gobject_sys::GObject,
4913                b"clip-rect\0".as_ptr() as *const _,
4914                Value::from(clip_rect).to_glib_none().0,
4915            );
4916        }
4917    }
4918
4919    fn set_property_constraints<P: IsA<Constraint> + SetValueOptional>(
4920        &self,
4921        constraints: Option<&P>,
4922    ) {
4923        unsafe {
4924            gobject_sys::g_object_set_property(
4925                self.to_glib_none().0 as *mut gobject_sys::GObject,
4926                b"constraints\0".as_ptr() as *const _,
4927                Value::from(constraints).to_glib_none().0,
4928            );
4929        }
4930    }
4931
4932    fn set_property_effect<P: IsA<Effect> + SetValueOptional>(&self, effect: Option<&P>) {
4933        unsafe {
4934            gobject_sys::g_object_set_property(
4935                self.to_glib_none().0 as *mut gobject_sys::GObject,
4936                b"effect\0".as_ptr() as *const _,
4937                Value::from(effect).to_glib_none().0,
4938            );
4939        }
4940    }
4941
4942    fn get_property_fixed_x(&self) -> f32 {
4943        unsafe {
4944            let mut value = Value::from_type(<f32 as StaticType>::static_type());
4945            gobject_sys::g_object_get_property(
4946                self.to_glib_none().0 as *mut gobject_sys::GObject,
4947                b"fixed-x\0".as_ptr() as *const _,
4948                value.to_glib_none_mut().0,
4949            );
4950            value
4951                .get()
4952                .expect("Return Value for property `fixed-x` getter")
4953                .unwrap()
4954        }
4955    }
4956
4957    fn set_property_fixed_x(&self, fixed_x: f32) {
4958        unsafe {
4959            gobject_sys::g_object_set_property(
4960                self.to_glib_none().0 as *mut gobject_sys::GObject,
4961                b"fixed-x\0".as_ptr() as *const _,
4962                Value::from(&fixed_x).to_glib_none().0,
4963            );
4964        }
4965    }
4966
4967    fn get_property_fixed_y(&self) -> f32 {
4968        unsafe {
4969            let mut value = Value::from_type(<f32 as StaticType>::static_type());
4970            gobject_sys::g_object_get_property(
4971                self.to_glib_none().0 as *mut gobject_sys::GObject,
4972                b"fixed-y\0".as_ptr() as *const _,
4973                value.to_glib_none_mut().0,
4974            );
4975            value
4976                .get()
4977                .expect("Return Value for property `fixed-y` getter")
4978                .unwrap()
4979        }
4980    }
4981
4982    fn set_property_fixed_y(&self, fixed_y: f32) {
4983        unsafe {
4984            gobject_sys::g_object_set_property(
4985                self.to_glib_none().0 as *mut gobject_sys::GObject,
4986                b"fixed-y\0".as_ptr() as *const _,
4987                Value::from(&fixed_y).to_glib_none().0,
4988            );
4989        }
4990    }
4991
4992    fn get_property_has_clip(&self) -> bool {
4993        unsafe {
4994            let mut value = Value::from_type(<bool as StaticType>::static_type());
4995            gobject_sys::g_object_get_property(
4996                self.to_glib_none().0 as *mut gobject_sys::GObject,
4997                b"has-clip\0".as_ptr() as *const _,
4998                value.to_glib_none_mut().0,
4999            );
5000            value
5001                .get()
5002                .expect("Return Value for property `has-clip` getter")
5003                .unwrap()
5004        }
5005    }
5006
5007    fn get_property_has_pointer(&self) -> bool {
5008        unsafe {
5009            let mut value = Value::from_type(<bool as StaticType>::static_type());
5010            gobject_sys::g_object_get_property(
5011                self.to_glib_none().0 as *mut gobject_sys::GObject,
5012                b"has-pointer\0".as_ptr() as *const _,
5013                value.to_glib_none_mut().0,
5014            );
5015            value
5016                .get()
5017                .expect("Return Value for property `has-pointer` getter")
5018                .unwrap()
5019        }
5020    }
5021
5022    fn get_property_magnification_filter(&self) -> ScalingFilter {
5023        unsafe {
5024            let mut value = Value::from_type(<ScalingFilter as StaticType>::static_type());
5025            gobject_sys::g_object_get_property(
5026                self.to_glib_none().0 as *mut gobject_sys::GObject,
5027                b"magnification-filter\0".as_ptr() as *const _,
5028                value.to_glib_none_mut().0,
5029            );
5030            value
5031                .get()
5032                .expect("Return Value for property `magnification-filter` getter")
5033                .unwrap()
5034        }
5035    }
5036
5037    fn set_property_magnification_filter(&self, magnification_filter: ScalingFilter) {
5038        unsafe {
5039            gobject_sys::g_object_set_property(
5040                self.to_glib_none().0 as *mut gobject_sys::GObject,
5041                b"magnification-filter\0".as_ptr() as *const _,
5042                Value::from(&magnification_filter).to_glib_none().0,
5043            );
5044        }
5045    }
5046
5047    fn get_property_mapped(&self) -> bool {
5048        unsafe {
5049            let mut value = Value::from_type(<bool as StaticType>::static_type());
5050            gobject_sys::g_object_get_property(
5051                self.to_glib_none().0 as *mut gobject_sys::GObject,
5052                b"mapped\0".as_ptr() as *const _,
5053                value.to_glib_none_mut().0,
5054            );
5055            value
5056                .get()
5057                .expect("Return Value for property `mapped` getter")
5058                .unwrap()
5059        }
5060    }
5061
5062    fn get_property_min_height(&self) -> f32 {
5063        unsafe {
5064            let mut value = Value::from_type(<f32 as StaticType>::static_type());
5065            gobject_sys::g_object_get_property(
5066                self.to_glib_none().0 as *mut gobject_sys::GObject,
5067                b"min-height\0".as_ptr() as *const _,
5068                value.to_glib_none_mut().0,
5069            );
5070            value
5071                .get()
5072                .expect("Return Value for property `min-height` getter")
5073                .unwrap()
5074        }
5075    }
5076
5077    fn set_property_min_height(&self, min_height: f32) {
5078        unsafe {
5079            gobject_sys::g_object_set_property(
5080                self.to_glib_none().0 as *mut gobject_sys::GObject,
5081                b"min-height\0".as_ptr() as *const _,
5082                Value::from(&min_height).to_glib_none().0,
5083            );
5084        }
5085    }
5086
5087    fn get_property_min_height_set(&self) -> bool {
5088        unsafe {
5089            let mut value = Value::from_type(<bool as StaticType>::static_type());
5090            gobject_sys::g_object_get_property(
5091                self.to_glib_none().0 as *mut gobject_sys::GObject,
5092                b"min-height-set\0".as_ptr() as *const _,
5093                value.to_glib_none_mut().0,
5094            );
5095            value
5096                .get()
5097                .expect("Return Value for property `min-height-set` getter")
5098                .unwrap()
5099        }
5100    }
5101
5102    fn set_property_min_height_set(&self, min_height_set: bool) {
5103        unsafe {
5104            gobject_sys::g_object_set_property(
5105                self.to_glib_none().0 as *mut gobject_sys::GObject,
5106                b"min-height-set\0".as_ptr() as *const _,
5107                Value::from(&min_height_set).to_glib_none().0,
5108            );
5109        }
5110    }
5111
5112    fn get_property_min_width(&self) -> f32 {
5113        unsafe {
5114            let mut value = Value::from_type(<f32 as StaticType>::static_type());
5115            gobject_sys::g_object_get_property(
5116                self.to_glib_none().0 as *mut gobject_sys::GObject,
5117                b"min-width\0".as_ptr() as *const _,
5118                value.to_glib_none_mut().0,
5119            );
5120            value
5121                .get()
5122                .expect("Return Value for property `min-width` getter")
5123                .unwrap()
5124        }
5125    }
5126
5127    fn set_property_min_width(&self, min_width: f32) {
5128        unsafe {
5129            gobject_sys::g_object_set_property(
5130                self.to_glib_none().0 as *mut gobject_sys::GObject,
5131                b"min-width\0".as_ptr() as *const _,
5132                Value::from(&min_width).to_glib_none().0,
5133            );
5134        }
5135    }
5136
5137    fn get_property_min_width_set(&self) -> bool {
5138        unsafe {
5139            let mut value = Value::from_type(<bool as StaticType>::static_type());
5140            gobject_sys::g_object_get_property(
5141                self.to_glib_none().0 as *mut gobject_sys::GObject,
5142                b"min-width-set\0".as_ptr() as *const _,
5143                value.to_glib_none_mut().0,
5144            );
5145            value
5146                .get()
5147                .expect("Return Value for property `min-width-set` getter")
5148                .unwrap()
5149        }
5150    }
5151
5152    fn set_property_min_width_set(&self, min_width_set: bool) {
5153        unsafe {
5154            gobject_sys::g_object_set_property(
5155                self.to_glib_none().0 as *mut gobject_sys::GObject,
5156                b"min-width-set\0".as_ptr() as *const _,
5157                Value::from(&min_width_set).to_glib_none().0,
5158            );
5159        }
5160    }
5161
5162    fn get_property_minification_filter(&self) -> ScalingFilter {
5163        unsafe {
5164            let mut value = Value::from_type(<ScalingFilter as StaticType>::static_type());
5165            gobject_sys::g_object_get_property(
5166                self.to_glib_none().0 as *mut gobject_sys::GObject,
5167                b"minification-filter\0".as_ptr() as *const _,
5168                value.to_glib_none_mut().0,
5169            );
5170            value
5171                .get()
5172                .expect("Return Value for property `minification-filter` getter")
5173                .unwrap()
5174        }
5175    }
5176
5177    fn set_property_minification_filter(&self, minification_filter: ScalingFilter) {
5178        unsafe {
5179            gobject_sys::g_object_set_property(
5180                self.to_glib_none().0 as *mut gobject_sys::GObject,
5181                b"minification-filter\0".as_ptr() as *const _,
5182                Value::from(&minification_filter).to_glib_none().0,
5183            );
5184        }
5185    }
5186
5187    fn get_property_natural_height(&self) -> f32 {
5188        unsafe {
5189            let mut value = Value::from_type(<f32 as StaticType>::static_type());
5190            gobject_sys::g_object_get_property(
5191                self.to_glib_none().0 as *mut gobject_sys::GObject,
5192                b"natural-height\0".as_ptr() as *const _,
5193                value.to_glib_none_mut().0,
5194            );
5195            value
5196                .get()
5197                .expect("Return Value for property `natural-height` getter")
5198                .unwrap()
5199        }
5200    }
5201
5202    fn set_property_natural_height(&self, natural_height: f32) {
5203        unsafe {
5204            gobject_sys::g_object_set_property(
5205                self.to_glib_none().0 as *mut gobject_sys::GObject,
5206                b"natural-height\0".as_ptr() as *const _,
5207                Value::from(&natural_height).to_glib_none().0,
5208            );
5209        }
5210    }
5211
5212    fn get_property_natural_height_set(&self) -> bool {
5213        unsafe {
5214            let mut value = Value::from_type(<bool as StaticType>::static_type());
5215            gobject_sys::g_object_get_property(
5216                self.to_glib_none().0 as *mut gobject_sys::GObject,
5217                b"natural-height-set\0".as_ptr() as *const _,
5218                value.to_glib_none_mut().0,
5219            );
5220            value
5221                .get()
5222                .expect("Return Value for property `natural-height-set` getter")
5223                .unwrap()
5224        }
5225    }
5226
5227    fn set_property_natural_height_set(&self, natural_height_set: bool) {
5228        unsafe {
5229            gobject_sys::g_object_set_property(
5230                self.to_glib_none().0 as *mut gobject_sys::GObject,
5231                b"natural-height-set\0".as_ptr() as *const _,
5232                Value::from(&natural_height_set).to_glib_none().0,
5233            );
5234        }
5235    }
5236
5237    fn get_property_natural_width(&self) -> f32 {
5238        unsafe {
5239            let mut value = Value::from_type(<f32 as StaticType>::static_type());
5240            gobject_sys::g_object_get_property(
5241                self.to_glib_none().0 as *mut gobject_sys::GObject,
5242                b"natural-width\0".as_ptr() as *const _,
5243                value.to_glib_none_mut().0,
5244            );
5245            value
5246                .get()
5247                .expect("Return Value for property `natural-width` getter")
5248                .unwrap()
5249        }
5250    }
5251
5252    fn set_property_natural_width(&self, natural_width: f32) {
5253        unsafe {
5254            gobject_sys::g_object_set_property(
5255                self.to_glib_none().0 as *mut gobject_sys::GObject,
5256                b"natural-width\0".as_ptr() as *const _,
5257                Value::from(&natural_width).to_glib_none().0,
5258            );
5259        }
5260    }
5261
5262    fn get_property_natural_width_set(&self) -> bool {
5263        unsafe {
5264            let mut value = Value::from_type(<bool as StaticType>::static_type());
5265            gobject_sys::g_object_get_property(
5266                self.to_glib_none().0 as *mut gobject_sys::GObject,
5267                b"natural-width-set\0".as_ptr() as *const _,
5268                value.to_glib_none_mut().0,
5269            );
5270            value
5271                .get()
5272                .expect("Return Value for property `natural-width-set` getter")
5273                .unwrap()
5274        }
5275    }
5276
5277    fn set_property_natural_width_set(&self, natural_width_set: bool) {
5278        unsafe {
5279            gobject_sys::g_object_set_property(
5280                self.to_glib_none().0 as *mut gobject_sys::GObject,
5281                b"natural-width-set\0".as_ptr() as *const _,
5282                Value::from(&natural_width_set).to_glib_none().0,
5283            );
5284        }
5285    }
5286
5287    fn get_property_realized(&self) -> bool {
5288        unsafe {
5289            let mut value = Value::from_type(<bool as StaticType>::static_type());
5290            gobject_sys::g_object_get_property(
5291                self.to_glib_none().0 as *mut gobject_sys::GObject,
5292                b"realized\0".as_ptr() as *const _,
5293                value.to_glib_none_mut().0,
5294            );
5295            value
5296                .get()
5297                .expect("Return Value for property `realized` getter")
5298                .unwrap()
5299        }
5300    }
5301
5302    fn get_property_rotation_angle_x(&self) -> f64 {
5303        unsafe {
5304            let mut value = Value::from_type(<f64 as StaticType>::static_type());
5305            gobject_sys::g_object_get_property(
5306                self.to_glib_none().0 as *mut gobject_sys::GObject,
5307                b"rotation-angle-x\0".as_ptr() as *const _,
5308                value.to_glib_none_mut().0,
5309            );
5310            value
5311                .get()
5312                .expect("Return Value for property `rotation-angle-x` getter")
5313                .unwrap()
5314        }
5315    }
5316
5317    fn set_property_rotation_angle_x(&self, rotation_angle_x: f64) {
5318        unsafe {
5319            gobject_sys::g_object_set_property(
5320                self.to_glib_none().0 as *mut gobject_sys::GObject,
5321                b"rotation-angle-x\0".as_ptr() as *const _,
5322                Value::from(&rotation_angle_x).to_glib_none().0,
5323            );
5324        }
5325    }
5326
5327    fn get_property_rotation_angle_y(&self) -> f64 {
5328        unsafe {
5329            let mut value = Value::from_type(<f64 as StaticType>::static_type());
5330            gobject_sys::g_object_get_property(
5331                self.to_glib_none().0 as *mut gobject_sys::GObject,
5332                b"rotation-angle-y\0".as_ptr() as *const _,
5333                value.to_glib_none_mut().0,
5334            );
5335            value
5336                .get()
5337                .expect("Return Value for property `rotation-angle-y` getter")
5338                .unwrap()
5339        }
5340    }
5341
5342    fn set_property_rotation_angle_y(&self, rotation_angle_y: f64) {
5343        unsafe {
5344            gobject_sys::g_object_set_property(
5345                self.to_glib_none().0 as *mut gobject_sys::GObject,
5346                b"rotation-angle-y\0".as_ptr() as *const _,
5347                Value::from(&rotation_angle_y).to_glib_none().0,
5348            );
5349        }
5350    }
5351
5352    fn get_property_rotation_angle_z(&self) -> f64 {
5353        unsafe {
5354            let mut value = Value::from_type(<f64 as StaticType>::static_type());
5355            gobject_sys::g_object_get_property(
5356                self.to_glib_none().0 as *mut gobject_sys::GObject,
5357                b"rotation-angle-z\0".as_ptr() as *const _,
5358                value.to_glib_none_mut().0,
5359            );
5360            value
5361                .get()
5362                .expect("Return Value for property `rotation-angle-z` getter")
5363                .unwrap()
5364        }
5365    }
5366
5367    fn set_property_rotation_angle_z(&self, rotation_angle_z: f64) {
5368        unsafe {
5369            gobject_sys::g_object_set_property(
5370                self.to_glib_none().0 as *mut gobject_sys::GObject,
5371                b"rotation-angle-z\0".as_ptr() as *const _,
5372                Value::from(&rotation_angle_z).to_glib_none().0,
5373            );
5374        }
5375    }
5376
5377    fn get_property_scale_x(&self) -> f64 {
5378        unsafe {
5379            let mut value = Value::from_type(<f64 as StaticType>::static_type());
5380            gobject_sys::g_object_get_property(
5381                self.to_glib_none().0 as *mut gobject_sys::GObject,
5382                b"scale-x\0".as_ptr() as *const _,
5383                value.to_glib_none_mut().0,
5384            );
5385            value
5386                .get()
5387                .expect("Return Value for property `scale-x` getter")
5388                .unwrap()
5389        }
5390    }
5391
5392    fn set_property_scale_x(&self, scale_x: f64) {
5393        unsafe {
5394            gobject_sys::g_object_set_property(
5395                self.to_glib_none().0 as *mut gobject_sys::GObject,
5396                b"scale-x\0".as_ptr() as *const _,
5397                Value::from(&scale_x).to_glib_none().0,
5398            );
5399        }
5400    }
5401
5402    fn get_property_scale_y(&self) -> f64 {
5403        unsafe {
5404            let mut value = Value::from_type(<f64 as StaticType>::static_type());
5405            gobject_sys::g_object_get_property(
5406                self.to_glib_none().0 as *mut gobject_sys::GObject,
5407                b"scale-y\0".as_ptr() as *const _,
5408                value.to_glib_none_mut().0,
5409            );
5410            value
5411                .get()
5412                .expect("Return Value for property `scale-y` getter")
5413                .unwrap()
5414        }
5415    }
5416
5417    fn set_property_scale_y(&self, scale_y: f64) {
5418        unsafe {
5419            gobject_sys::g_object_set_property(
5420                self.to_glib_none().0 as *mut gobject_sys::GObject,
5421                b"scale-y\0".as_ptr() as *const _,
5422                Value::from(&scale_y).to_glib_none().0,
5423            );
5424        }
5425    }
5426
5427    fn get_property_show_on_set_parent(&self) -> bool {
5428        unsafe {
5429            let mut value = Value::from_type(<bool as StaticType>::static_type());
5430            gobject_sys::g_object_get_property(
5431                self.to_glib_none().0 as *mut gobject_sys::GObject,
5432                b"show-on-set-parent\0".as_ptr() as *const _,
5433                value.to_glib_none_mut().0,
5434            );
5435            value
5436                .get()
5437                .expect("Return Value for property `show-on-set-parent` getter")
5438                .unwrap()
5439        }
5440    }
5441
5442    fn set_property_show_on_set_parent(&self, show_on_set_parent: bool) {
5443        unsafe {
5444            gobject_sys::g_object_set_property(
5445                self.to_glib_none().0 as *mut gobject_sys::GObject,
5446                b"show-on-set-parent\0".as_ptr() as *const _,
5447                Value::from(&show_on_set_parent).to_glib_none().0,
5448            );
5449        }
5450    }
5451
5452    fn get_property_transform_set(&self) -> bool {
5453        unsafe {
5454            let mut value = Value::from_type(<bool as StaticType>::static_type());
5455            gobject_sys::g_object_get_property(
5456                self.to_glib_none().0 as *mut gobject_sys::GObject,
5457                b"transform-set\0".as_ptr() as *const _,
5458                value.to_glib_none_mut().0,
5459            );
5460            value
5461                .get()
5462                .expect("Return Value for property `transform-set` getter")
5463                .unwrap()
5464        }
5465    }
5466
5467    fn get_property_translation_x(&self) -> f32 {
5468        unsafe {
5469            let mut value = Value::from_type(<f32 as StaticType>::static_type());
5470            gobject_sys::g_object_get_property(
5471                self.to_glib_none().0 as *mut gobject_sys::GObject,
5472                b"translation-x\0".as_ptr() as *const _,
5473                value.to_glib_none_mut().0,
5474            );
5475            value
5476                .get()
5477                .expect("Return Value for property `translation-x` getter")
5478                .unwrap()
5479        }
5480    }
5481
5482    fn set_property_translation_x(&self, translation_x: f32) {
5483        unsafe {
5484            gobject_sys::g_object_set_property(
5485                self.to_glib_none().0 as *mut gobject_sys::GObject,
5486                b"translation-x\0".as_ptr() as *const _,
5487                Value::from(&translation_x).to_glib_none().0,
5488            );
5489        }
5490    }
5491
5492    fn get_property_translation_y(&self) -> f32 {
5493        unsafe {
5494            let mut value = Value::from_type(<f32 as StaticType>::static_type());
5495            gobject_sys::g_object_get_property(
5496                self.to_glib_none().0 as *mut gobject_sys::GObject,
5497                b"translation-y\0".as_ptr() as *const _,
5498                value.to_glib_none_mut().0,
5499            );
5500            value
5501                .get()
5502                .expect("Return Value for property `translation-y` getter")
5503                .unwrap()
5504        }
5505    }
5506
5507    fn set_property_translation_y(&self, translation_y: f32) {
5508        unsafe {
5509            gobject_sys::g_object_set_property(
5510                self.to_glib_none().0 as *mut gobject_sys::GObject,
5511                b"translation-y\0".as_ptr() as *const _,
5512                Value::from(&translation_y).to_glib_none().0,
5513            );
5514        }
5515    }
5516
5517    fn get_property_translation_z(&self) -> f32 {
5518        unsafe {
5519            let mut value = Value::from_type(<f32 as StaticType>::static_type());
5520            gobject_sys::g_object_get_property(
5521                self.to_glib_none().0 as *mut gobject_sys::GObject,
5522                b"translation-z\0".as_ptr() as *const _,
5523                value.to_glib_none_mut().0,
5524            );
5525            value
5526                .get()
5527                .expect("Return Value for property `translation-z` getter")
5528                .unwrap()
5529        }
5530    }
5531
5532    fn set_property_translation_z(&self, translation_z: f32) {
5533        unsafe {
5534            gobject_sys::g_object_set_property(
5535                self.to_glib_none().0 as *mut gobject_sys::GObject,
5536                b"translation-z\0".as_ptr() as *const _,
5537                Value::from(&translation_z).to_glib_none().0,
5538            );
5539        }
5540    }
5541
5542    fn get_property_visible(&self) -> bool {
5543        unsafe {
5544            let mut value = Value::from_type(<bool as StaticType>::static_type());
5545            gobject_sys::g_object_get_property(
5546                self.to_glib_none().0 as *mut gobject_sys::GObject,
5547                b"visible\0".as_ptr() as *const _,
5548                value.to_glib_none_mut().0,
5549            );
5550            value
5551                .get()
5552                .expect("Return Value for property `visible` getter")
5553                .unwrap()
5554        }
5555    }
5556
5557    fn set_property_visible(&self, visible: bool) {
5558        unsafe {
5559            gobject_sys::g_object_set_property(
5560                self.to_glib_none().0 as *mut gobject_sys::GObject,
5561                b"visible\0".as_ptr() as *const _,
5562                Value::from(&visible).to_glib_none().0,
5563            );
5564        }
5565    }
5566
5567    fn connect_allocation_changed<F: Fn(&Self, &ActorBox, AllocationFlags) + 'static>(
5568        &self,
5569        f: F,
5570    ) -> SignalHandlerId {
5571        unsafe extern "C" fn allocation_changed_trampoline<
5572            P,
5573            F: Fn(&P, &ActorBox, AllocationFlags) + 'static,
5574        >(
5575            this: *mut ffi::ClutterActor,
5576            box_: *mut ffi::ClutterActorBox,
5577            flags: ffi::ClutterAllocationFlags,
5578            f: glib_sys::gpointer,
5579        ) where
5580            P: IsA<Actor>,
5581        {
5582            let f: &F = &*(f as *const F);
5583            f(
5584                &Actor::from_glib_borrow(this).unsafe_cast_ref(),
5585                &from_glib_borrow(box_),
5586                from_glib(flags),
5587            )
5588        }
5589        unsafe {
5590            let f: Box_<F> = Box_::new(f);
5591            connect_raw(
5592                self.as_ptr() as *mut _,
5593                b"allocation-changed\0".as_ptr() as *const _,
5594                Some(transmute::<_, unsafe extern "C" fn()>(
5595                    allocation_changed_trampoline::<Self, F> as *const (),
5596                )),
5597                Box_::into_raw(f),
5598            )
5599        }
5600    }
5601
5602    fn connect_button_press_event<F: Fn(&Self, &ButtonEvent) -> bool + 'static>(
5603        &self,
5604        f: F,
5605    ) -> SignalHandlerId {
5606        unsafe extern "C" fn button_press_event_trampoline<
5607            P,
5608            F: Fn(&P, &ButtonEvent) -> bool + 'static,
5609        >(
5610            this: *mut ffi::ClutterActor,
5611            event: *mut ffi::ClutterButtonEvent,
5612            f: glib_sys::gpointer,
5613        ) -> glib_sys::gboolean
5614        where
5615            P: IsA<Actor>,
5616        {
5617            let f: &F = &*(f as *const F);
5618            f(
5619                &Actor::from_glib_borrow(this).unsafe_cast_ref(),
5620                &from_glib_borrow(event),
5621            )
5622            .to_glib()
5623        }
5624        unsafe {
5625            let f: Box_<F> = Box_::new(f);
5626            connect_raw(
5627                self.as_ptr() as *mut _,
5628                b"button-press-event\0".as_ptr() as *const _,
5629                Some(transmute::<_, unsafe extern "C" fn()>(
5630                    button_press_event_trampoline::<Self, F> as *const (),
5631                )),
5632                Box_::into_raw(f),
5633            )
5634        }
5635    }
5636
5637    fn connect_button_release_event<F: Fn(&Self, &ButtonEvent) -> bool + 'static>(
5638        &self,
5639        f: F,
5640    ) -> SignalHandlerId {
5641        unsafe extern "C" fn button_release_event_trampoline<
5642            P,
5643            F: Fn(&P, &ButtonEvent) -> bool + 'static,
5644        >(
5645            this: *mut ffi::ClutterActor,
5646            event: *mut ffi::ClutterButtonEvent,
5647            f: glib_sys::gpointer,
5648        ) -> glib_sys::gboolean
5649        where
5650            P: IsA<Actor>,
5651        {
5652            let f: &F = &*(f as *const F);
5653            f(
5654                &Actor::from_glib_borrow(this).unsafe_cast_ref(),
5655                &from_glib_borrow(event),
5656            )
5657            .to_glib()
5658        }
5659        unsafe {
5660            let f: Box_<F> = Box_::new(f);
5661            connect_raw(
5662                self.as_ptr() as *mut _,
5663                b"button-release-event\0".as_ptr() as *const _,
5664                Some(transmute::<_, unsafe extern "C" fn()>(
5665                    button_release_event_trampoline::<Self, F> as *const (),
5666                )),
5667                Box_::into_raw(f),
5668            )
5669        }
5670    }
5671
5672    fn connect_captured_event<F: Fn(&Self, &Event) -> bool + 'static>(
5673        &self,
5674        f: F,
5675    ) -> SignalHandlerId {
5676        unsafe extern "C" fn captured_event_trampoline<P, F: Fn(&P, &Event) -> bool + 'static>(
5677            this: *mut ffi::ClutterActor,
5678            event: *mut ffi::ClutterEvent,
5679            f: glib_sys::gpointer,
5680        ) -> glib_sys::gboolean
5681        where
5682            P: IsA<Actor>,
5683        {
5684            let f: &F = &*(f as *const F);
5685            f(
5686                &Actor::from_glib_borrow(this).unsafe_cast_ref(),
5687                &from_glib_none(event),
5688            )
5689            .to_glib()
5690        }
5691        unsafe {
5692            let f: Box_<F> = Box_::new(f);
5693            connect_raw(
5694                self.as_ptr() as *mut _,
5695                b"captured-event\0".as_ptr() as *const _,
5696                Some(transmute::<_, unsafe extern "C" fn()>(
5697                    captured_event_trampoline::<Self, F> as *const (),
5698                )),
5699                Box_::into_raw(f),
5700            )
5701        }
5702    }
5703
5704    fn connect_destroy<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
5705        unsafe extern "C" fn destroy_trampoline<P, F: Fn(&P) + 'static>(
5706            this: *mut ffi::ClutterActor,
5707            f: glib_sys::gpointer,
5708        ) where
5709            P: IsA<Actor>,
5710        {
5711            let f: &F = &*(f as *const F);
5712            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
5713        }
5714        unsafe {
5715            let f: Box_<F> = Box_::new(f);
5716            connect_raw(
5717                self.as_ptr() as *mut _,
5718                b"destroy\0".as_ptr() as *const _,
5719                Some(transmute::<_, unsafe extern "C" fn()>(
5720                    destroy_trampoline::<Self, F> as *const (),
5721                )),
5722                Box_::into_raw(f),
5723            )
5724        }
5725    }
5726
5727    fn connect_enter_event<F: Fn(&Self, &CrossingEvent) -> bool + 'static>(
5728        &self,
5729        f: F,
5730    ) -> SignalHandlerId {
5731        unsafe extern "C" fn enter_event_trampoline<
5732            P,
5733            F: Fn(&P, &CrossingEvent) -> bool + 'static,
5734        >(
5735            this: *mut ffi::ClutterActor,
5736            event: *mut ffi::ClutterCrossingEvent,
5737            f: glib_sys::gpointer,
5738        ) -> glib_sys::gboolean
5739        where
5740            P: IsA<Actor>,
5741        {
5742            let f: &F = &*(f as *const F);
5743            f(
5744                &Actor::from_glib_borrow(this).unsafe_cast_ref(),
5745                &from_glib_borrow(event),
5746            )
5747            .to_glib()
5748        }
5749        unsafe {
5750            let f: Box_<F> = Box_::new(f);
5751            connect_raw(
5752                self.as_ptr() as *mut _,
5753                b"enter-event\0".as_ptr() as *const _,
5754                Some(transmute::<_, unsafe extern "C" fn()>(
5755                    enter_event_trampoline::<Self, F> as *const (),
5756                )),
5757                Box_::into_raw(f),
5758            )
5759        }
5760    }
5761
5762    fn connect_event<F: Fn(&Self, &Event) -> bool + 'static>(&self, f: F) -> SignalHandlerId {
5763        unsafe extern "C" fn event_trampoline<P, F: Fn(&P, &Event) -> bool + 'static>(
5764            this: *mut ffi::ClutterActor,
5765            event: *mut ffi::ClutterEvent,
5766            f: glib_sys::gpointer,
5767        ) -> glib_sys::gboolean
5768        where
5769            P: IsA<Actor>,
5770        {
5771            let f: &F = &*(f as *const F);
5772            f(
5773                &Actor::from_glib_borrow(this).unsafe_cast_ref(),
5774                &from_glib_none(event),
5775            )
5776            .to_glib()
5777        }
5778        unsafe {
5779            let f: Box_<F> = Box_::new(f);
5780            connect_raw(
5781                self.as_ptr() as *mut _,
5782                b"event\0".as_ptr() as *const _,
5783                Some(transmute::<_, unsafe extern "C" fn()>(
5784                    event_trampoline::<Self, F> as *const (),
5785                )),
5786                Box_::into_raw(f),
5787            )
5788        }
5789    }
5790
5791    fn connect_hide<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
5792        unsafe extern "C" fn hide_trampoline<P, F: Fn(&P) + 'static>(
5793            this: *mut ffi::ClutterActor,
5794            f: glib_sys::gpointer,
5795        ) where
5796            P: IsA<Actor>,
5797        {
5798            let f: &F = &*(f as *const F);
5799            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
5800        }
5801        unsafe {
5802            let f: Box_<F> = Box_::new(f);
5803            connect_raw(
5804                self.as_ptr() as *mut _,
5805                b"hide\0".as_ptr() as *const _,
5806                Some(transmute::<_, unsafe extern "C" fn()>(
5807                    hide_trampoline::<Self, F> as *const (),
5808                )),
5809                Box_::into_raw(f),
5810            )
5811        }
5812    }
5813
5814    fn connect_key_focus_in<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
5815        unsafe extern "C" fn key_focus_in_trampoline<P, F: Fn(&P) + 'static>(
5816            this: *mut ffi::ClutterActor,
5817            f: glib_sys::gpointer,
5818        ) where
5819            P: IsA<Actor>,
5820        {
5821            let f: &F = &*(f as *const F);
5822            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
5823        }
5824        unsafe {
5825            let f: Box_<F> = Box_::new(f);
5826            connect_raw(
5827                self.as_ptr() as *mut _,
5828                b"key-focus-in\0".as_ptr() as *const _,
5829                Some(transmute::<_, unsafe extern "C" fn()>(
5830                    key_focus_in_trampoline::<Self, F> as *const (),
5831                )),
5832                Box_::into_raw(f),
5833            )
5834        }
5835    }
5836
5837    fn connect_key_focus_out<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
5838        unsafe extern "C" fn key_focus_out_trampoline<P, F: Fn(&P) + 'static>(
5839            this: *mut ffi::ClutterActor,
5840            f: glib_sys::gpointer,
5841        ) where
5842            P: IsA<Actor>,
5843        {
5844            let f: &F = &*(f as *const F);
5845            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
5846        }
5847        unsafe {
5848            let f: Box_<F> = Box_::new(f);
5849            connect_raw(
5850                self.as_ptr() as *mut _,
5851                b"key-focus-out\0".as_ptr() as *const _,
5852                Some(transmute::<_, unsafe extern "C" fn()>(
5853                    key_focus_out_trampoline::<Self, F> as *const (),
5854                )),
5855                Box_::into_raw(f),
5856            )
5857        }
5858    }
5859
5860    fn connect_key_press_event<F: Fn(&Self, &KeyEvent) -> bool + 'static>(
5861        &self,
5862        f: F,
5863    ) -> SignalHandlerId {
5864        unsafe extern "C" fn key_press_event_trampoline<P, F: Fn(&P, &KeyEvent) -> bool + 'static>(
5865            this: *mut ffi::ClutterActor,
5866            event: *mut ffi::ClutterKeyEvent,
5867            f: glib_sys::gpointer,
5868        ) -> glib_sys::gboolean
5869        where
5870            P: IsA<Actor>,
5871        {
5872            let f: &F = &*(f as *const F);
5873            f(
5874                &Actor::from_glib_borrow(this).unsafe_cast_ref(),
5875                &from_glib_borrow(event),
5876            )
5877            .to_glib()
5878        }
5879        unsafe {
5880            let f: Box_<F> = Box_::new(f);
5881            connect_raw(
5882                self.as_ptr() as *mut _,
5883                b"key-press-event\0".as_ptr() as *const _,
5884                Some(transmute::<_, unsafe extern "C" fn()>(
5885                    key_press_event_trampoline::<Self, F> as *const (),
5886                )),
5887                Box_::into_raw(f),
5888            )
5889        }
5890    }
5891
5892    fn connect_key_release_event<F: Fn(&Self, &KeyEvent) -> bool + 'static>(
5893        &self,
5894        f: F,
5895    ) -> SignalHandlerId {
5896        unsafe extern "C" fn key_release_event_trampoline<
5897            P,
5898            F: Fn(&P, &KeyEvent) -> bool + 'static,
5899        >(
5900            this: *mut ffi::ClutterActor,
5901            event: *mut ffi::ClutterKeyEvent,
5902            f: glib_sys::gpointer,
5903        ) -> glib_sys::gboolean
5904        where
5905            P: IsA<Actor>,
5906        {
5907            let f: &F = &*(f as *const F);
5908            f(
5909                &Actor::from_glib_borrow(this).unsafe_cast_ref(),
5910                &from_glib_borrow(event),
5911            )
5912            .to_glib()
5913        }
5914        unsafe {
5915            let f: Box_<F> = Box_::new(f);
5916            connect_raw(
5917                self.as_ptr() as *mut _,
5918                b"key-release-event\0".as_ptr() as *const _,
5919                Some(transmute::<_, unsafe extern "C" fn()>(
5920                    key_release_event_trampoline::<Self, F> as *const (),
5921                )),
5922                Box_::into_raw(f),
5923            )
5924        }
5925    }
5926
5927    fn connect_leave_event<F: Fn(&Self, &CrossingEvent) -> bool + 'static>(
5928        &self,
5929        f: F,
5930    ) -> SignalHandlerId {
5931        unsafe extern "C" fn leave_event_trampoline<
5932            P,
5933            F: Fn(&P, &CrossingEvent) -> bool + 'static,
5934        >(
5935            this: *mut ffi::ClutterActor,
5936            event: *mut ffi::ClutterCrossingEvent,
5937            f: glib_sys::gpointer,
5938        ) -> glib_sys::gboolean
5939        where
5940            P: IsA<Actor>,
5941        {
5942            let f: &F = &*(f as *const F);
5943            f(
5944                &Actor::from_glib_borrow(this).unsafe_cast_ref(),
5945                &from_glib_borrow(event),
5946            )
5947            .to_glib()
5948        }
5949        unsafe {
5950            let f: Box_<F> = Box_::new(f);
5951            connect_raw(
5952                self.as_ptr() as *mut _,
5953                b"leave-event\0".as_ptr() as *const _,
5954                Some(transmute::<_, unsafe extern "C" fn()>(
5955                    leave_event_trampoline::<Self, F> as *const (),
5956                )),
5957                Box_::into_raw(f),
5958            )
5959        }
5960    }
5961
5962    fn connect_motion_event<F: Fn(&Self, &MotionEvent) -> bool + 'static>(
5963        &self,
5964        f: F,
5965    ) -> SignalHandlerId {
5966        unsafe extern "C" fn motion_event_trampoline<P, F: Fn(&P, &MotionEvent) -> bool + 'static>(
5967            this: *mut ffi::ClutterActor,
5968            event: *mut ffi::ClutterMotionEvent,
5969            f: glib_sys::gpointer,
5970        ) -> glib_sys::gboolean
5971        where
5972            P: IsA<Actor>,
5973        {
5974            let f: &F = &*(f as *const F);
5975            f(
5976                &Actor::from_glib_borrow(this).unsafe_cast_ref(),
5977                &from_glib_borrow(event),
5978            )
5979            .to_glib()
5980        }
5981        unsafe {
5982            let f: Box_<F> = Box_::new(f);
5983            connect_raw(
5984                self.as_ptr() as *mut _,
5985                b"motion-event\0".as_ptr() as *const _,
5986                Some(transmute::<_, unsafe extern "C" fn()>(
5987                    motion_event_trampoline::<Self, F> as *const (),
5988                )),
5989                Box_::into_raw(f),
5990            )
5991        }
5992    }
5993
5994    fn connect_parent_set<F: Fn(&Self, Option<&Actor>) + 'static>(&self, f: F) -> SignalHandlerId {
5995        unsafe extern "C" fn parent_set_trampoline<P, F: Fn(&P, Option<&Actor>) + 'static>(
5996            this: *mut ffi::ClutterActor,
5997            old_parent: *mut ffi::ClutterActor,
5998            f: glib_sys::gpointer,
5999        ) where
6000            P: IsA<Actor>,
6001        {
6002            let f: &F = &*(f as *const F);
6003            f(
6004                &Actor::from_glib_borrow(this).unsafe_cast_ref(),
6005                Option::<Actor>::from_glib_borrow(old_parent)
6006                    .as_ref()
6007                    .as_ref(),
6008            )
6009        }
6010        unsafe {
6011            let f: Box_<F> = Box_::new(f);
6012            connect_raw(
6013                self.as_ptr() as *mut _,
6014                b"parent-set\0".as_ptr() as *const _,
6015                Some(transmute::<_, unsafe extern "C" fn()>(
6016                    parent_set_trampoline::<Self, F> as *const (),
6017                )),
6018                Box_::into_raw(f),
6019            )
6020        }
6021    }
6022
6023    fn connect_queue_redraw<F: Fn(&Self, &Actor) + 'static>(&self, f: F) -> SignalHandlerId {
6024        unsafe extern "C" fn queue_redraw_trampoline<P, F: Fn(&P, &Actor) + 'static>(
6025            this: *mut ffi::ClutterActor,
6026            origin: *mut ffi::ClutterActor,
6027            f: glib_sys::gpointer,
6028        ) where
6029            P: IsA<Actor>,
6030        {
6031            let f: &F = &*(f as *const F);
6032            f(
6033                &Actor::from_glib_borrow(this).unsafe_cast_ref(),
6034                &from_glib_borrow(origin),
6035            )
6036        }
6037        unsafe {
6038            let f: Box_<F> = Box_::new(f);
6039            connect_raw(
6040                self.as_ptr() as *mut _,
6041                b"queue-redraw\0".as_ptr() as *const _,
6042                Some(transmute::<_, unsafe extern "C" fn()>(
6043                    queue_redraw_trampoline::<Self, F> as *const (),
6044                )),
6045                Box_::into_raw(f),
6046            )
6047        }
6048    }
6049
6050    fn connect_queue_relayout<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
6051        unsafe extern "C" fn queue_relayout_trampoline<P, F: Fn(&P) + 'static>(
6052            this: *mut ffi::ClutterActor,
6053            f: glib_sys::gpointer,
6054        ) where
6055            P: IsA<Actor>,
6056        {
6057            let f: &F = &*(f as *const F);
6058            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6059        }
6060        unsafe {
6061            let f: Box_<F> = Box_::new(f);
6062            connect_raw(
6063                self.as_ptr() as *mut _,
6064                b"queue-relayout\0".as_ptr() as *const _,
6065                Some(transmute::<_, unsafe extern "C" fn()>(
6066                    queue_relayout_trampoline::<Self, F> as *const (),
6067                )),
6068                Box_::into_raw(f),
6069            )
6070        }
6071    }
6072
6073    fn connect_scroll_event<F: Fn(&Self, &ScrollEvent) -> bool + 'static>(
6074        &self,
6075        f: F,
6076    ) -> SignalHandlerId {
6077        unsafe extern "C" fn scroll_event_trampoline<P, F: Fn(&P, &ScrollEvent) -> bool + 'static>(
6078            this: *mut ffi::ClutterActor,
6079            event: *mut ffi::ClutterScrollEvent,
6080            f: glib_sys::gpointer,
6081        ) -> glib_sys::gboolean
6082        where
6083            P: IsA<Actor>,
6084        {
6085            let f: &F = &*(f as *const F);
6086            f(
6087                &Actor::from_glib_borrow(this).unsafe_cast_ref(),
6088                &from_glib_borrow(event),
6089            )
6090            .to_glib()
6091        }
6092        unsafe {
6093            let f: Box_<F> = Box_::new(f);
6094            connect_raw(
6095                self.as_ptr() as *mut _,
6096                b"scroll-event\0".as_ptr() as *const _,
6097                Some(transmute::<_, unsafe extern "C" fn()>(
6098                    scroll_event_trampoline::<Self, F> as *const (),
6099                )),
6100                Box_::into_raw(f),
6101            )
6102        }
6103    }
6104
6105    fn connect_show<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
6106        unsafe extern "C" fn show_trampoline<P, F: Fn(&P) + 'static>(
6107            this: *mut ffi::ClutterActor,
6108            f: glib_sys::gpointer,
6109        ) where
6110            P: IsA<Actor>,
6111        {
6112            let f: &F = &*(f as *const F);
6113            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6114        }
6115        unsafe {
6116            let f: Box_<F> = Box_::new(f);
6117            connect_raw(
6118                self.as_ptr() as *mut _,
6119                b"show\0".as_ptr() as *const _,
6120                Some(transmute::<_, unsafe extern "C" fn()>(
6121                    show_trampoline::<Self, F> as *const (),
6122                )),
6123                Box_::into_raw(f),
6124            )
6125        }
6126    }
6127
6128    fn connect_touch_event<F: Fn(&Self, &Event) -> bool + 'static>(&self, f: F) -> SignalHandlerId {
6129        unsafe extern "C" fn touch_event_trampoline<P, F: Fn(&P, &Event) -> bool + 'static>(
6130            this: *mut ffi::ClutterActor,
6131            event: *mut ffi::ClutterEvent,
6132            f: glib_sys::gpointer,
6133        ) -> glib_sys::gboolean
6134        where
6135            P: IsA<Actor>,
6136        {
6137            let f: &F = &*(f as *const F);
6138            f(
6139                &Actor::from_glib_borrow(this).unsafe_cast_ref(),
6140                &from_glib_none(event),
6141            )
6142            .to_glib()
6143        }
6144        unsafe {
6145            let f: Box_<F> = Box_::new(f);
6146            connect_raw(
6147                self.as_ptr() as *mut _,
6148                b"touch-event\0".as_ptr() as *const _,
6149                Some(transmute::<_, unsafe extern "C" fn()>(
6150                    touch_event_trampoline::<Self, F> as *const (),
6151                )),
6152                Box_::into_raw(f),
6153            )
6154        }
6155    }
6156
6157    fn connect_transition_stopped<F: Fn(&Self, &str, bool) + 'static>(
6158        &self,
6159        f: F,
6160    ) -> SignalHandlerId {
6161        unsafe extern "C" fn transition_stopped_trampoline<P, F: Fn(&P, &str, bool) + 'static>(
6162            this: *mut ffi::ClutterActor,
6163            name: *mut libc::c_char,
6164            is_finished: glib_sys::gboolean,
6165            f: glib_sys::gpointer,
6166        ) where
6167            P: IsA<Actor>,
6168        {
6169            let f: &F = &*(f as *const F);
6170            f(
6171                &Actor::from_glib_borrow(this).unsafe_cast_ref(),
6172                &GString::from_glib_borrow(name),
6173                from_glib(is_finished),
6174            )
6175        }
6176        unsafe {
6177            let f: Box_<F> = Box_::new(f);
6178            connect_raw(
6179                self.as_ptr() as *mut _,
6180                b"transition-stopped\0".as_ptr() as *const _,
6181                Some(transmute::<_, unsafe extern "C" fn()>(
6182                    transition_stopped_trampoline::<Self, F> as *const (),
6183                )),
6184                Box_::into_raw(f),
6185            )
6186        }
6187    }
6188
6189    fn connect_transitions_completed<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
6190        unsafe extern "C" fn transitions_completed_trampoline<P, F: Fn(&P) + 'static>(
6191            this: *mut ffi::ClutterActor,
6192            f: glib_sys::gpointer,
6193        ) where
6194            P: IsA<Actor>,
6195        {
6196            let f: &F = &*(f as *const F);
6197            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6198        }
6199        unsafe {
6200            let f: Box_<F> = Box_::new(f);
6201            connect_raw(
6202                self.as_ptr() as *mut _,
6203                b"transitions-completed\0".as_ptr() as *const _,
6204                Some(transmute::<_, unsafe extern "C" fn()>(
6205                    transitions_completed_trampoline::<Self, F> as *const (),
6206                )),
6207                Box_::into_raw(f),
6208            )
6209        }
6210    }
6211
6212    fn connect_property_actions_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
6213        unsafe extern "C" fn notify_actions_trampoline<P, F: Fn(&P) + 'static>(
6214            this: *mut ffi::ClutterActor,
6215            _param_spec: glib_sys::gpointer,
6216            f: glib_sys::gpointer,
6217        ) where
6218            P: IsA<Actor>,
6219        {
6220            let f: &F = &*(f as *const F);
6221            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6222        }
6223        unsafe {
6224            let f: Box_<F> = Box_::new(f);
6225            connect_raw(
6226                self.as_ptr() as *mut _,
6227                b"notify::actions\0".as_ptr() as *const _,
6228                Some(transmute::<_, unsafe extern "C" fn()>(
6229                    notify_actions_trampoline::<Self, F> as *const (),
6230                )),
6231                Box_::into_raw(f),
6232            )
6233        }
6234    }
6235
6236    fn connect_property_allocation_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
6237        unsafe extern "C" fn notify_allocation_trampoline<P, F: Fn(&P) + 'static>(
6238            this: *mut ffi::ClutterActor,
6239            _param_spec: glib_sys::gpointer,
6240            f: glib_sys::gpointer,
6241        ) where
6242            P: IsA<Actor>,
6243        {
6244            let f: &F = &*(f as *const F);
6245            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6246        }
6247        unsafe {
6248            let f: Box_<F> = Box_::new(f);
6249            connect_raw(
6250                self.as_ptr() as *mut _,
6251                b"notify::allocation\0".as_ptr() as *const _,
6252                Some(transmute::<_, unsafe extern "C" fn()>(
6253                    notify_allocation_trampoline::<Self, F> as *const (),
6254                )),
6255                Box_::into_raw(f),
6256            )
6257        }
6258    }
6259
6260    fn connect_property_background_color_notify<F: Fn(&Self) + 'static>(
6261        &self,
6262        f: F,
6263    ) -> SignalHandlerId {
6264        unsafe extern "C" fn notify_background_color_trampoline<P, F: Fn(&P) + 'static>(
6265            this: *mut ffi::ClutterActor,
6266            _param_spec: glib_sys::gpointer,
6267            f: glib_sys::gpointer,
6268        ) where
6269            P: IsA<Actor>,
6270        {
6271            let f: &F = &*(f as *const F);
6272            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6273        }
6274        unsafe {
6275            let f: Box_<F> = Box_::new(f);
6276            connect_raw(
6277                self.as_ptr() as *mut _,
6278                b"notify::background-color\0".as_ptr() as *const _,
6279                Some(transmute::<_, unsafe extern "C" fn()>(
6280                    notify_background_color_trampoline::<Self, F> as *const (),
6281                )),
6282                Box_::into_raw(f),
6283            )
6284        }
6285    }
6286
6287    fn connect_property_background_color_set_notify<F: Fn(&Self) + 'static>(
6288        &self,
6289        f: F,
6290    ) -> SignalHandlerId {
6291        unsafe extern "C" fn notify_background_color_set_trampoline<P, F: Fn(&P) + 'static>(
6292            this: *mut ffi::ClutterActor,
6293            _param_spec: glib_sys::gpointer,
6294            f: glib_sys::gpointer,
6295        ) where
6296            P: IsA<Actor>,
6297        {
6298            let f: &F = &*(f as *const F);
6299            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6300        }
6301        unsafe {
6302            let f: Box_<F> = Box_::new(f);
6303            connect_raw(
6304                self.as_ptr() as *mut _,
6305                b"notify::background-color-set\0".as_ptr() as *const _,
6306                Some(transmute::<_, unsafe extern "C" fn()>(
6307                    notify_background_color_set_trampoline::<Self, F> as *const (),
6308                )),
6309                Box_::into_raw(f),
6310            )
6311        }
6312    }
6313
6314    fn connect_property_child_transform_notify<F: Fn(&Self) + 'static>(
6315        &self,
6316        f: F,
6317    ) -> SignalHandlerId {
6318        unsafe extern "C" fn notify_child_transform_trampoline<P, F: Fn(&P) + 'static>(
6319            this: *mut ffi::ClutterActor,
6320            _param_spec: glib_sys::gpointer,
6321            f: glib_sys::gpointer,
6322        ) where
6323            P: IsA<Actor>,
6324        {
6325            let f: &F = &*(f as *const F);
6326            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6327        }
6328        unsafe {
6329            let f: Box_<F> = Box_::new(f);
6330            connect_raw(
6331                self.as_ptr() as *mut _,
6332                b"notify::child-transform\0".as_ptr() as *const _,
6333                Some(transmute::<_, unsafe extern "C" fn()>(
6334                    notify_child_transform_trampoline::<Self, F> as *const (),
6335                )),
6336                Box_::into_raw(f),
6337            )
6338        }
6339    }
6340
6341    fn connect_property_child_transform_set_notify<F: Fn(&Self) + 'static>(
6342        &self,
6343        f: F,
6344    ) -> SignalHandlerId {
6345        unsafe extern "C" fn notify_child_transform_set_trampoline<P, F: Fn(&P) + 'static>(
6346            this: *mut ffi::ClutterActor,
6347            _param_spec: glib_sys::gpointer,
6348            f: glib_sys::gpointer,
6349        ) where
6350            P: IsA<Actor>,
6351        {
6352            let f: &F = &*(f as *const F);
6353            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6354        }
6355        unsafe {
6356            let f: Box_<F> = Box_::new(f);
6357            connect_raw(
6358                self.as_ptr() as *mut _,
6359                b"notify::child-transform-set\0".as_ptr() as *const _,
6360                Some(transmute::<_, unsafe extern "C" fn()>(
6361                    notify_child_transform_set_trampoline::<Self, F> as *const (),
6362                )),
6363                Box_::into_raw(f),
6364            )
6365        }
6366    }
6367
6368    fn connect_property_clip_rect_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
6369        unsafe extern "C" fn notify_clip_rect_trampoline<P, F: Fn(&P) + 'static>(
6370            this: *mut ffi::ClutterActor,
6371            _param_spec: glib_sys::gpointer,
6372            f: glib_sys::gpointer,
6373        ) where
6374            P: IsA<Actor>,
6375        {
6376            let f: &F = &*(f as *const F);
6377            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6378        }
6379        unsafe {
6380            let f: Box_<F> = Box_::new(f);
6381            connect_raw(
6382                self.as_ptr() as *mut _,
6383                b"notify::clip-rect\0".as_ptr() as *const _,
6384                Some(transmute::<_, unsafe extern "C" fn()>(
6385                    notify_clip_rect_trampoline::<Self, F> as *const (),
6386                )),
6387                Box_::into_raw(f),
6388            )
6389        }
6390    }
6391
6392    fn connect_property_clip_to_allocation_notify<F: Fn(&Self) + 'static>(
6393        &self,
6394        f: F,
6395    ) -> SignalHandlerId {
6396        unsafe extern "C" fn notify_clip_to_allocation_trampoline<P, F: Fn(&P) + 'static>(
6397            this: *mut ffi::ClutterActor,
6398            _param_spec: glib_sys::gpointer,
6399            f: glib_sys::gpointer,
6400        ) where
6401            P: IsA<Actor>,
6402        {
6403            let f: &F = &*(f as *const F);
6404            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6405        }
6406        unsafe {
6407            let f: Box_<F> = Box_::new(f);
6408            connect_raw(
6409                self.as_ptr() as *mut _,
6410                b"notify::clip-to-allocation\0".as_ptr() as *const _,
6411                Some(transmute::<_, unsafe extern "C" fn()>(
6412                    notify_clip_to_allocation_trampoline::<Self, F> as *const (),
6413                )),
6414                Box_::into_raw(f),
6415            )
6416        }
6417    }
6418
6419    fn connect_property_constraints_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
6420        unsafe extern "C" fn notify_constraints_trampoline<P, F: Fn(&P) + 'static>(
6421            this: *mut ffi::ClutterActor,
6422            _param_spec: glib_sys::gpointer,
6423            f: glib_sys::gpointer,
6424        ) where
6425            P: IsA<Actor>,
6426        {
6427            let f: &F = &*(f as *const F);
6428            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6429        }
6430        unsafe {
6431            let f: Box_<F> = Box_::new(f);
6432            connect_raw(
6433                self.as_ptr() as *mut _,
6434                b"notify::constraints\0".as_ptr() as *const _,
6435                Some(transmute::<_, unsafe extern "C" fn()>(
6436                    notify_constraints_trampoline::<Self, F> as *const (),
6437                )),
6438                Box_::into_raw(f),
6439            )
6440        }
6441    }
6442
6443    fn connect_property_content_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
6444        unsafe extern "C" fn notify_content_trampoline<P, F: Fn(&P) + 'static>(
6445            this: *mut ffi::ClutterActor,
6446            _param_spec: glib_sys::gpointer,
6447            f: glib_sys::gpointer,
6448        ) where
6449            P: IsA<Actor>,
6450        {
6451            let f: &F = &*(f as *const F);
6452            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6453        }
6454        unsafe {
6455            let f: Box_<F> = Box_::new(f);
6456            connect_raw(
6457                self.as_ptr() as *mut _,
6458                b"notify::content\0".as_ptr() as *const _,
6459                Some(transmute::<_, unsafe extern "C" fn()>(
6460                    notify_content_trampoline::<Self, F> as *const (),
6461                )),
6462                Box_::into_raw(f),
6463            )
6464        }
6465    }
6466
6467    fn connect_property_content_box_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
6468        unsafe extern "C" fn notify_content_box_trampoline<P, F: Fn(&P) + 'static>(
6469            this: *mut ffi::ClutterActor,
6470            _param_spec: glib_sys::gpointer,
6471            f: glib_sys::gpointer,
6472        ) where
6473            P: IsA<Actor>,
6474        {
6475            let f: &F = &*(f as *const F);
6476            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6477        }
6478        unsafe {
6479            let f: Box_<F> = Box_::new(f);
6480            connect_raw(
6481                self.as_ptr() as *mut _,
6482                b"notify::content-box\0".as_ptr() as *const _,
6483                Some(transmute::<_, unsafe extern "C" fn()>(
6484                    notify_content_box_trampoline::<Self, F> as *const (),
6485                )),
6486                Box_::into_raw(f),
6487            )
6488        }
6489    }
6490
6491    fn connect_property_content_gravity_notify<F: Fn(&Self) + 'static>(
6492        &self,
6493        f: F,
6494    ) -> SignalHandlerId {
6495        unsafe extern "C" fn notify_content_gravity_trampoline<P, F: Fn(&P) + 'static>(
6496            this: *mut ffi::ClutterActor,
6497            _param_spec: glib_sys::gpointer,
6498            f: glib_sys::gpointer,
6499        ) where
6500            P: IsA<Actor>,
6501        {
6502            let f: &F = &*(f as *const F);
6503            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6504        }
6505        unsafe {
6506            let f: Box_<F> = Box_::new(f);
6507            connect_raw(
6508                self.as_ptr() as *mut _,
6509                b"notify::content-gravity\0".as_ptr() as *const _,
6510                Some(transmute::<_, unsafe extern "C" fn()>(
6511                    notify_content_gravity_trampoline::<Self, F> as *const (),
6512                )),
6513                Box_::into_raw(f),
6514            )
6515        }
6516    }
6517
6518    fn connect_property_content_repeat_notify<F: Fn(&Self) + 'static>(
6519        &self,
6520        f: F,
6521    ) -> SignalHandlerId {
6522        unsafe extern "C" fn notify_content_repeat_trampoline<P, F: Fn(&P) + 'static>(
6523            this: *mut ffi::ClutterActor,
6524            _param_spec: glib_sys::gpointer,
6525            f: glib_sys::gpointer,
6526        ) where
6527            P: IsA<Actor>,
6528        {
6529            let f: &F = &*(f as *const F);
6530            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6531        }
6532        unsafe {
6533            let f: Box_<F> = Box_::new(f);
6534            connect_raw(
6535                self.as_ptr() as *mut _,
6536                b"notify::content-repeat\0".as_ptr() as *const _,
6537                Some(transmute::<_, unsafe extern "C" fn()>(
6538                    notify_content_repeat_trampoline::<Self, F> as *const (),
6539                )),
6540                Box_::into_raw(f),
6541            )
6542        }
6543    }
6544
6545    fn connect_property_effect_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
6546        unsafe extern "C" fn notify_effect_trampoline<P, F: Fn(&P) + 'static>(
6547            this: *mut ffi::ClutterActor,
6548            _param_spec: glib_sys::gpointer,
6549            f: glib_sys::gpointer,
6550        ) where
6551            P: IsA<Actor>,
6552        {
6553            let f: &F = &*(f as *const F);
6554            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6555        }
6556        unsafe {
6557            let f: Box_<F> = Box_::new(f);
6558            connect_raw(
6559                self.as_ptr() as *mut _,
6560                b"notify::effect\0".as_ptr() as *const _,
6561                Some(transmute::<_, unsafe extern "C" fn()>(
6562                    notify_effect_trampoline::<Self, F> as *const (),
6563                )),
6564                Box_::into_raw(f),
6565            )
6566        }
6567    }
6568
6569    fn connect_property_first_child_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
6570        unsafe extern "C" fn notify_first_child_trampoline<P, F: Fn(&P) + 'static>(
6571            this: *mut ffi::ClutterActor,
6572            _param_spec: glib_sys::gpointer,
6573            f: glib_sys::gpointer,
6574        ) where
6575            P: IsA<Actor>,
6576        {
6577            let f: &F = &*(f as *const F);
6578            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6579        }
6580        unsafe {
6581            let f: Box_<F> = Box_::new(f);
6582            connect_raw(
6583                self.as_ptr() as *mut _,
6584                b"notify::first-child\0".as_ptr() as *const _,
6585                Some(transmute::<_, unsafe extern "C" fn()>(
6586                    notify_first_child_trampoline::<Self, F> as *const (),
6587                )),
6588                Box_::into_raw(f),
6589            )
6590        }
6591    }
6592
6593    fn connect_property_fixed_position_set_notify<F: Fn(&Self) + 'static>(
6594        &self,
6595        f: F,
6596    ) -> SignalHandlerId {
6597        unsafe extern "C" fn notify_fixed_position_set_trampoline<P, F: Fn(&P) + 'static>(
6598            this: *mut ffi::ClutterActor,
6599            _param_spec: glib_sys::gpointer,
6600            f: glib_sys::gpointer,
6601        ) where
6602            P: IsA<Actor>,
6603        {
6604            let f: &F = &*(f as *const F);
6605            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6606        }
6607        unsafe {
6608            let f: Box_<F> = Box_::new(f);
6609            connect_raw(
6610                self.as_ptr() as *mut _,
6611                b"notify::fixed-position-set\0".as_ptr() as *const _,
6612                Some(transmute::<_, unsafe extern "C" fn()>(
6613                    notify_fixed_position_set_trampoline::<Self, F> as *const (),
6614                )),
6615                Box_::into_raw(f),
6616            )
6617        }
6618    }
6619
6620    fn connect_property_fixed_x_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
6621        unsafe extern "C" fn notify_fixed_x_trampoline<P, F: Fn(&P) + 'static>(
6622            this: *mut ffi::ClutterActor,
6623            _param_spec: glib_sys::gpointer,
6624            f: glib_sys::gpointer,
6625        ) where
6626            P: IsA<Actor>,
6627        {
6628            let f: &F = &*(f as *const F);
6629            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6630        }
6631        unsafe {
6632            let f: Box_<F> = Box_::new(f);
6633            connect_raw(
6634                self.as_ptr() as *mut _,
6635                b"notify::fixed-x\0".as_ptr() as *const _,
6636                Some(transmute::<_, unsafe extern "C" fn()>(
6637                    notify_fixed_x_trampoline::<Self, F> as *const (),
6638                )),
6639                Box_::into_raw(f),
6640            )
6641        }
6642    }
6643
6644    fn connect_property_fixed_y_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
6645        unsafe extern "C" fn notify_fixed_y_trampoline<P, F: Fn(&P) + 'static>(
6646            this: *mut ffi::ClutterActor,
6647            _param_spec: glib_sys::gpointer,
6648            f: glib_sys::gpointer,
6649        ) where
6650            P: IsA<Actor>,
6651        {
6652            let f: &F = &*(f as *const F);
6653            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6654        }
6655        unsafe {
6656            let f: Box_<F> = Box_::new(f);
6657            connect_raw(
6658                self.as_ptr() as *mut _,
6659                b"notify::fixed-y\0".as_ptr() as *const _,
6660                Some(transmute::<_, unsafe extern "C" fn()>(
6661                    notify_fixed_y_trampoline::<Self, F> as *const (),
6662                )),
6663                Box_::into_raw(f),
6664            )
6665        }
6666    }
6667
6668    fn connect_property_has_clip_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
6669        unsafe extern "C" fn notify_has_clip_trampoline<P, F: Fn(&P) + 'static>(
6670            this: *mut ffi::ClutterActor,
6671            _param_spec: glib_sys::gpointer,
6672            f: glib_sys::gpointer,
6673        ) where
6674            P: IsA<Actor>,
6675        {
6676            let f: &F = &*(f as *const F);
6677            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6678        }
6679        unsafe {
6680            let f: Box_<F> = Box_::new(f);
6681            connect_raw(
6682                self.as_ptr() as *mut _,
6683                b"notify::has-clip\0".as_ptr() as *const _,
6684                Some(transmute::<_, unsafe extern "C" fn()>(
6685                    notify_has_clip_trampoline::<Self, F> as *const (),
6686                )),
6687                Box_::into_raw(f),
6688            )
6689        }
6690    }
6691
6692    fn connect_property_has_pointer_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
6693        unsafe extern "C" fn notify_has_pointer_trampoline<P, F: Fn(&P) + 'static>(
6694            this: *mut ffi::ClutterActor,
6695            _param_spec: glib_sys::gpointer,
6696            f: glib_sys::gpointer,
6697        ) where
6698            P: IsA<Actor>,
6699        {
6700            let f: &F = &*(f as *const F);
6701            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6702        }
6703        unsafe {
6704            let f: Box_<F> = Box_::new(f);
6705            connect_raw(
6706                self.as_ptr() as *mut _,
6707                b"notify::has-pointer\0".as_ptr() as *const _,
6708                Some(transmute::<_, unsafe extern "C" fn()>(
6709                    notify_has_pointer_trampoline::<Self, F> as *const (),
6710                )),
6711                Box_::into_raw(f),
6712            )
6713        }
6714    }
6715
6716    fn connect_property_height_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
6717        unsafe extern "C" fn notify_height_trampoline<P, F: Fn(&P) + 'static>(
6718            this: *mut ffi::ClutterActor,
6719            _param_spec: glib_sys::gpointer,
6720            f: glib_sys::gpointer,
6721        ) where
6722            P: IsA<Actor>,
6723        {
6724            let f: &F = &*(f as *const F);
6725            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6726        }
6727        unsafe {
6728            let f: Box_<F> = Box_::new(f);
6729            connect_raw(
6730                self.as_ptr() as *mut _,
6731                b"notify::height\0".as_ptr() as *const _,
6732                Some(transmute::<_, unsafe extern "C" fn()>(
6733                    notify_height_trampoline::<Self, F> as *const (),
6734                )),
6735                Box_::into_raw(f),
6736            )
6737        }
6738    }
6739
6740    fn connect_property_last_child_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
6741        unsafe extern "C" fn notify_last_child_trampoline<P, F: Fn(&P) + 'static>(
6742            this: *mut ffi::ClutterActor,
6743            _param_spec: glib_sys::gpointer,
6744            f: glib_sys::gpointer,
6745        ) where
6746            P: IsA<Actor>,
6747        {
6748            let f: &F = &*(f as *const F);
6749            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6750        }
6751        unsafe {
6752            let f: Box_<F> = Box_::new(f);
6753            connect_raw(
6754                self.as_ptr() as *mut _,
6755                b"notify::last-child\0".as_ptr() as *const _,
6756                Some(transmute::<_, unsafe extern "C" fn()>(
6757                    notify_last_child_trampoline::<Self, F> as *const (),
6758                )),
6759                Box_::into_raw(f),
6760            )
6761        }
6762    }
6763
6764    fn connect_property_layout_manager_notify<F: Fn(&Self) + 'static>(
6765        &self,
6766        f: F,
6767    ) -> SignalHandlerId {
6768        unsafe extern "C" fn notify_layout_manager_trampoline<P, F: Fn(&P) + 'static>(
6769            this: *mut ffi::ClutterActor,
6770            _param_spec: glib_sys::gpointer,
6771            f: glib_sys::gpointer,
6772        ) where
6773            P: IsA<Actor>,
6774        {
6775            let f: &F = &*(f as *const F);
6776            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6777        }
6778        unsafe {
6779            let f: Box_<F> = Box_::new(f);
6780            connect_raw(
6781                self.as_ptr() as *mut _,
6782                b"notify::layout-manager\0".as_ptr() as *const _,
6783                Some(transmute::<_, unsafe extern "C" fn()>(
6784                    notify_layout_manager_trampoline::<Self, F> as *const (),
6785                )),
6786                Box_::into_raw(f),
6787            )
6788        }
6789    }
6790
6791    fn connect_property_magnification_filter_notify<F: Fn(&Self) + 'static>(
6792        &self,
6793        f: F,
6794    ) -> SignalHandlerId {
6795        unsafe extern "C" fn notify_magnification_filter_trampoline<P, F: Fn(&P) + 'static>(
6796            this: *mut ffi::ClutterActor,
6797            _param_spec: glib_sys::gpointer,
6798            f: glib_sys::gpointer,
6799        ) where
6800            P: IsA<Actor>,
6801        {
6802            let f: &F = &*(f as *const F);
6803            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6804        }
6805        unsafe {
6806            let f: Box_<F> = Box_::new(f);
6807            connect_raw(
6808                self.as_ptr() as *mut _,
6809                b"notify::magnification-filter\0".as_ptr() as *const _,
6810                Some(transmute::<_, unsafe extern "C" fn()>(
6811                    notify_magnification_filter_trampoline::<Self, F> as *const (),
6812                )),
6813                Box_::into_raw(f),
6814            )
6815        }
6816    }
6817
6818    fn connect_property_mapped_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
6819        unsafe extern "C" fn notify_mapped_trampoline<P, F: Fn(&P) + 'static>(
6820            this: *mut ffi::ClutterActor,
6821            _param_spec: glib_sys::gpointer,
6822            f: glib_sys::gpointer,
6823        ) where
6824            P: IsA<Actor>,
6825        {
6826            let f: &F = &*(f as *const F);
6827            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6828        }
6829        unsafe {
6830            let f: Box_<F> = Box_::new(f);
6831            connect_raw(
6832                self.as_ptr() as *mut _,
6833                b"notify::mapped\0".as_ptr() as *const _,
6834                Some(transmute::<_, unsafe extern "C" fn()>(
6835                    notify_mapped_trampoline::<Self, F> as *const (),
6836                )),
6837                Box_::into_raw(f),
6838            )
6839        }
6840    }
6841
6842    fn connect_property_margin_bottom_notify<F: Fn(&Self) + 'static>(
6843        &self,
6844        f: F,
6845    ) -> SignalHandlerId {
6846        unsafe extern "C" fn notify_margin_bottom_trampoline<P, F: Fn(&P) + 'static>(
6847            this: *mut ffi::ClutterActor,
6848            _param_spec: glib_sys::gpointer,
6849            f: glib_sys::gpointer,
6850        ) where
6851            P: IsA<Actor>,
6852        {
6853            let f: &F = &*(f as *const F);
6854            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6855        }
6856        unsafe {
6857            let f: Box_<F> = Box_::new(f);
6858            connect_raw(
6859                self.as_ptr() as *mut _,
6860                b"notify::margin-bottom\0".as_ptr() as *const _,
6861                Some(transmute::<_, unsafe extern "C" fn()>(
6862                    notify_margin_bottom_trampoline::<Self, F> as *const (),
6863                )),
6864                Box_::into_raw(f),
6865            )
6866        }
6867    }
6868
6869    fn connect_property_margin_left_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
6870        unsafe extern "C" fn notify_margin_left_trampoline<P, F: Fn(&P) + 'static>(
6871            this: *mut ffi::ClutterActor,
6872            _param_spec: glib_sys::gpointer,
6873            f: glib_sys::gpointer,
6874        ) where
6875            P: IsA<Actor>,
6876        {
6877            let f: &F = &*(f as *const F);
6878            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6879        }
6880        unsafe {
6881            let f: Box_<F> = Box_::new(f);
6882            connect_raw(
6883                self.as_ptr() as *mut _,
6884                b"notify::margin-left\0".as_ptr() as *const _,
6885                Some(transmute::<_, unsafe extern "C" fn()>(
6886                    notify_margin_left_trampoline::<Self, F> as *const (),
6887                )),
6888                Box_::into_raw(f),
6889            )
6890        }
6891    }
6892
6893    fn connect_property_margin_right_notify<F: Fn(&Self) + 'static>(
6894        &self,
6895        f: F,
6896    ) -> SignalHandlerId {
6897        unsafe extern "C" fn notify_margin_right_trampoline<P, F: Fn(&P) + 'static>(
6898            this: *mut ffi::ClutterActor,
6899            _param_spec: glib_sys::gpointer,
6900            f: glib_sys::gpointer,
6901        ) where
6902            P: IsA<Actor>,
6903        {
6904            let f: &F = &*(f as *const F);
6905            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6906        }
6907        unsafe {
6908            let f: Box_<F> = Box_::new(f);
6909            connect_raw(
6910                self.as_ptr() as *mut _,
6911                b"notify::margin-right\0".as_ptr() as *const _,
6912                Some(transmute::<_, unsafe extern "C" fn()>(
6913                    notify_margin_right_trampoline::<Self, F> as *const (),
6914                )),
6915                Box_::into_raw(f),
6916            )
6917        }
6918    }
6919
6920    fn connect_property_margin_top_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
6921        unsafe extern "C" fn notify_margin_top_trampoline<P, F: Fn(&P) + 'static>(
6922            this: *mut ffi::ClutterActor,
6923            _param_spec: glib_sys::gpointer,
6924            f: glib_sys::gpointer,
6925        ) where
6926            P: IsA<Actor>,
6927        {
6928            let f: &F = &*(f as *const F);
6929            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6930        }
6931        unsafe {
6932            let f: Box_<F> = Box_::new(f);
6933            connect_raw(
6934                self.as_ptr() as *mut _,
6935                b"notify::margin-top\0".as_ptr() as *const _,
6936                Some(transmute::<_, unsafe extern "C" fn()>(
6937                    notify_margin_top_trampoline::<Self, F> as *const (),
6938                )),
6939                Box_::into_raw(f),
6940            )
6941        }
6942    }
6943
6944    fn connect_property_min_height_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
6945        unsafe extern "C" fn notify_min_height_trampoline<P, F: Fn(&P) + 'static>(
6946            this: *mut ffi::ClutterActor,
6947            _param_spec: glib_sys::gpointer,
6948            f: glib_sys::gpointer,
6949        ) where
6950            P: IsA<Actor>,
6951        {
6952            let f: &F = &*(f as *const F);
6953            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6954        }
6955        unsafe {
6956            let f: Box_<F> = Box_::new(f);
6957            connect_raw(
6958                self.as_ptr() as *mut _,
6959                b"notify::min-height\0".as_ptr() as *const _,
6960                Some(transmute::<_, unsafe extern "C" fn()>(
6961                    notify_min_height_trampoline::<Self, F> as *const (),
6962                )),
6963                Box_::into_raw(f),
6964            )
6965        }
6966    }
6967
6968    fn connect_property_min_height_set_notify<F: Fn(&Self) + 'static>(
6969        &self,
6970        f: F,
6971    ) -> SignalHandlerId {
6972        unsafe extern "C" fn notify_min_height_set_trampoline<P, F: Fn(&P) + 'static>(
6973            this: *mut ffi::ClutterActor,
6974            _param_spec: glib_sys::gpointer,
6975            f: glib_sys::gpointer,
6976        ) where
6977            P: IsA<Actor>,
6978        {
6979            let f: &F = &*(f as *const F);
6980            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
6981        }
6982        unsafe {
6983            let f: Box_<F> = Box_::new(f);
6984            connect_raw(
6985                self.as_ptr() as *mut _,
6986                b"notify::min-height-set\0".as_ptr() as *const _,
6987                Some(transmute::<_, unsafe extern "C" fn()>(
6988                    notify_min_height_set_trampoline::<Self, F> as *const (),
6989                )),
6990                Box_::into_raw(f),
6991            )
6992        }
6993    }
6994
6995    fn connect_property_min_width_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
6996        unsafe extern "C" fn notify_min_width_trampoline<P, F: Fn(&P) + 'static>(
6997            this: *mut ffi::ClutterActor,
6998            _param_spec: glib_sys::gpointer,
6999            f: glib_sys::gpointer,
7000        ) where
7001            P: IsA<Actor>,
7002        {
7003            let f: &F = &*(f as *const F);
7004            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7005        }
7006        unsafe {
7007            let f: Box_<F> = Box_::new(f);
7008            connect_raw(
7009                self.as_ptr() as *mut _,
7010                b"notify::min-width\0".as_ptr() as *const _,
7011                Some(transmute::<_, unsafe extern "C" fn()>(
7012                    notify_min_width_trampoline::<Self, F> as *const (),
7013                )),
7014                Box_::into_raw(f),
7015            )
7016        }
7017    }
7018
7019    fn connect_property_min_width_set_notify<F: Fn(&Self) + 'static>(
7020        &self,
7021        f: F,
7022    ) -> SignalHandlerId {
7023        unsafe extern "C" fn notify_min_width_set_trampoline<P, F: Fn(&P) + 'static>(
7024            this: *mut ffi::ClutterActor,
7025            _param_spec: glib_sys::gpointer,
7026            f: glib_sys::gpointer,
7027        ) where
7028            P: IsA<Actor>,
7029        {
7030            let f: &F = &*(f as *const F);
7031            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7032        }
7033        unsafe {
7034            let f: Box_<F> = Box_::new(f);
7035            connect_raw(
7036                self.as_ptr() as *mut _,
7037                b"notify::min-width-set\0".as_ptr() as *const _,
7038                Some(transmute::<_, unsafe extern "C" fn()>(
7039                    notify_min_width_set_trampoline::<Self, F> as *const (),
7040                )),
7041                Box_::into_raw(f),
7042            )
7043        }
7044    }
7045
7046    fn connect_property_minification_filter_notify<F: Fn(&Self) + 'static>(
7047        &self,
7048        f: F,
7049    ) -> SignalHandlerId {
7050        unsafe extern "C" fn notify_minification_filter_trampoline<P, F: Fn(&P) + 'static>(
7051            this: *mut ffi::ClutterActor,
7052            _param_spec: glib_sys::gpointer,
7053            f: glib_sys::gpointer,
7054        ) where
7055            P: IsA<Actor>,
7056        {
7057            let f: &F = &*(f as *const F);
7058            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7059        }
7060        unsafe {
7061            let f: Box_<F> = Box_::new(f);
7062            connect_raw(
7063                self.as_ptr() as *mut _,
7064                b"notify::minification-filter\0".as_ptr() as *const _,
7065                Some(transmute::<_, unsafe extern "C" fn()>(
7066                    notify_minification_filter_trampoline::<Self, F> as *const (),
7067                )),
7068                Box_::into_raw(f),
7069            )
7070        }
7071    }
7072
7073    fn connect_property_name_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
7074        unsafe extern "C" fn notify_name_trampoline<P, F: Fn(&P) + 'static>(
7075            this: *mut ffi::ClutterActor,
7076            _param_spec: glib_sys::gpointer,
7077            f: glib_sys::gpointer,
7078        ) where
7079            P: IsA<Actor>,
7080        {
7081            let f: &F = &*(f as *const F);
7082            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7083        }
7084        unsafe {
7085            let f: Box_<F> = Box_::new(f);
7086            connect_raw(
7087                self.as_ptr() as *mut _,
7088                b"notify::name\0".as_ptr() as *const _,
7089                Some(transmute::<_, unsafe extern "C" fn()>(
7090                    notify_name_trampoline::<Self, F> as *const (),
7091                )),
7092                Box_::into_raw(f),
7093            )
7094        }
7095    }
7096
7097    fn connect_property_natural_height_notify<F: Fn(&Self) + 'static>(
7098        &self,
7099        f: F,
7100    ) -> SignalHandlerId {
7101        unsafe extern "C" fn notify_natural_height_trampoline<P, F: Fn(&P) + 'static>(
7102            this: *mut ffi::ClutterActor,
7103            _param_spec: glib_sys::gpointer,
7104            f: glib_sys::gpointer,
7105        ) where
7106            P: IsA<Actor>,
7107        {
7108            let f: &F = &*(f as *const F);
7109            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7110        }
7111        unsafe {
7112            let f: Box_<F> = Box_::new(f);
7113            connect_raw(
7114                self.as_ptr() as *mut _,
7115                b"notify::natural-height\0".as_ptr() as *const _,
7116                Some(transmute::<_, unsafe extern "C" fn()>(
7117                    notify_natural_height_trampoline::<Self, F> as *const (),
7118                )),
7119                Box_::into_raw(f),
7120            )
7121        }
7122    }
7123
7124    fn connect_property_natural_height_set_notify<F: Fn(&Self) + 'static>(
7125        &self,
7126        f: F,
7127    ) -> SignalHandlerId {
7128        unsafe extern "C" fn notify_natural_height_set_trampoline<P, F: Fn(&P) + 'static>(
7129            this: *mut ffi::ClutterActor,
7130            _param_spec: glib_sys::gpointer,
7131            f: glib_sys::gpointer,
7132        ) where
7133            P: IsA<Actor>,
7134        {
7135            let f: &F = &*(f as *const F);
7136            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7137        }
7138        unsafe {
7139            let f: Box_<F> = Box_::new(f);
7140            connect_raw(
7141                self.as_ptr() as *mut _,
7142                b"notify::natural-height-set\0".as_ptr() as *const _,
7143                Some(transmute::<_, unsafe extern "C" fn()>(
7144                    notify_natural_height_set_trampoline::<Self, F> as *const (),
7145                )),
7146                Box_::into_raw(f),
7147            )
7148        }
7149    }
7150
7151    fn connect_property_natural_width_notify<F: Fn(&Self) + 'static>(
7152        &self,
7153        f: F,
7154    ) -> SignalHandlerId {
7155        unsafe extern "C" fn notify_natural_width_trampoline<P, F: Fn(&P) + 'static>(
7156            this: *mut ffi::ClutterActor,
7157            _param_spec: glib_sys::gpointer,
7158            f: glib_sys::gpointer,
7159        ) where
7160            P: IsA<Actor>,
7161        {
7162            let f: &F = &*(f as *const F);
7163            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7164        }
7165        unsafe {
7166            let f: Box_<F> = Box_::new(f);
7167            connect_raw(
7168                self.as_ptr() as *mut _,
7169                b"notify::natural-width\0".as_ptr() as *const _,
7170                Some(transmute::<_, unsafe extern "C" fn()>(
7171                    notify_natural_width_trampoline::<Self, F> as *const (),
7172                )),
7173                Box_::into_raw(f),
7174            )
7175        }
7176    }
7177
7178    fn connect_property_natural_width_set_notify<F: Fn(&Self) + 'static>(
7179        &self,
7180        f: F,
7181    ) -> SignalHandlerId {
7182        unsafe extern "C" fn notify_natural_width_set_trampoline<P, F: Fn(&P) + 'static>(
7183            this: *mut ffi::ClutterActor,
7184            _param_spec: glib_sys::gpointer,
7185            f: glib_sys::gpointer,
7186        ) where
7187            P: IsA<Actor>,
7188        {
7189            let f: &F = &*(f as *const F);
7190            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7191        }
7192        unsafe {
7193            let f: Box_<F> = Box_::new(f);
7194            connect_raw(
7195                self.as_ptr() as *mut _,
7196                b"notify::natural-width-set\0".as_ptr() as *const _,
7197                Some(transmute::<_, unsafe extern "C" fn()>(
7198                    notify_natural_width_set_trampoline::<Self, F> as *const (),
7199                )),
7200                Box_::into_raw(f),
7201            )
7202        }
7203    }
7204
7205    fn connect_property_offscreen_redirect_notify<F: Fn(&Self) + 'static>(
7206        &self,
7207        f: F,
7208    ) -> SignalHandlerId {
7209        unsafe extern "C" fn notify_offscreen_redirect_trampoline<P, F: Fn(&P) + 'static>(
7210            this: *mut ffi::ClutterActor,
7211            _param_spec: glib_sys::gpointer,
7212            f: glib_sys::gpointer,
7213        ) where
7214            P: IsA<Actor>,
7215        {
7216            let f: &F = &*(f as *const F);
7217            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7218        }
7219        unsafe {
7220            let f: Box_<F> = Box_::new(f);
7221            connect_raw(
7222                self.as_ptr() as *mut _,
7223                b"notify::offscreen-redirect\0".as_ptr() as *const _,
7224                Some(transmute::<_, unsafe extern "C" fn()>(
7225                    notify_offscreen_redirect_trampoline::<Self, F> as *const (),
7226                )),
7227                Box_::into_raw(f),
7228            )
7229        }
7230    }
7231
7232    fn connect_property_opacity_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
7233        unsafe extern "C" fn notify_opacity_trampoline<P, F: Fn(&P) + 'static>(
7234            this: *mut ffi::ClutterActor,
7235            _param_spec: glib_sys::gpointer,
7236            f: glib_sys::gpointer,
7237        ) where
7238            P: IsA<Actor>,
7239        {
7240            let f: &F = &*(f as *const F);
7241            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7242        }
7243        unsafe {
7244            let f: Box_<F> = Box_::new(f);
7245            connect_raw(
7246                self.as_ptr() as *mut _,
7247                b"notify::opacity\0".as_ptr() as *const _,
7248                Some(transmute::<_, unsafe extern "C" fn()>(
7249                    notify_opacity_trampoline::<Self, F> as *const (),
7250                )),
7251                Box_::into_raw(f),
7252            )
7253        }
7254    }
7255
7256    fn connect_property_pivot_point_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
7257        unsafe extern "C" fn notify_pivot_point_trampoline<P, F: Fn(&P) + 'static>(
7258            this: *mut ffi::ClutterActor,
7259            _param_spec: glib_sys::gpointer,
7260            f: glib_sys::gpointer,
7261        ) where
7262            P: IsA<Actor>,
7263        {
7264            let f: &F = &*(f as *const F);
7265            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7266        }
7267        unsafe {
7268            let f: Box_<F> = Box_::new(f);
7269            connect_raw(
7270                self.as_ptr() as *mut _,
7271                b"notify::pivot-point\0".as_ptr() as *const _,
7272                Some(transmute::<_, unsafe extern "C" fn()>(
7273                    notify_pivot_point_trampoline::<Self, F> as *const (),
7274                )),
7275                Box_::into_raw(f),
7276            )
7277        }
7278    }
7279
7280    fn connect_property_pivot_point_z_notify<F: Fn(&Self) + 'static>(
7281        &self,
7282        f: F,
7283    ) -> SignalHandlerId {
7284        unsafe extern "C" fn notify_pivot_point_z_trampoline<P, F: Fn(&P) + 'static>(
7285            this: *mut ffi::ClutterActor,
7286            _param_spec: glib_sys::gpointer,
7287            f: glib_sys::gpointer,
7288        ) where
7289            P: IsA<Actor>,
7290        {
7291            let f: &F = &*(f as *const F);
7292            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7293        }
7294        unsafe {
7295            let f: Box_<F> = Box_::new(f);
7296            connect_raw(
7297                self.as_ptr() as *mut _,
7298                b"notify::pivot-point-z\0".as_ptr() as *const _,
7299                Some(transmute::<_, unsafe extern "C" fn()>(
7300                    notify_pivot_point_z_trampoline::<Self, F> as *const (),
7301                )),
7302                Box_::into_raw(f),
7303            )
7304        }
7305    }
7306
7307    fn connect_property_position_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
7308        unsafe extern "C" fn notify_position_trampoline<P, F: Fn(&P) + 'static>(
7309            this: *mut ffi::ClutterActor,
7310            _param_spec: glib_sys::gpointer,
7311            f: glib_sys::gpointer,
7312        ) where
7313            P: IsA<Actor>,
7314        {
7315            let f: &F = &*(f as *const F);
7316            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7317        }
7318        unsafe {
7319            let f: Box_<F> = Box_::new(f);
7320            connect_raw(
7321                self.as_ptr() as *mut _,
7322                b"notify::position\0".as_ptr() as *const _,
7323                Some(transmute::<_, unsafe extern "C" fn()>(
7324                    notify_position_trampoline::<Self, F> as *const (),
7325                )),
7326                Box_::into_raw(f),
7327            )
7328        }
7329    }
7330
7331    fn connect_property_reactive_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
7332        unsafe extern "C" fn notify_reactive_trampoline<P, F: Fn(&P) + 'static>(
7333            this: *mut ffi::ClutterActor,
7334            _param_spec: glib_sys::gpointer,
7335            f: glib_sys::gpointer,
7336        ) where
7337            P: IsA<Actor>,
7338        {
7339            let f: &F = &*(f as *const F);
7340            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7341        }
7342        unsafe {
7343            let f: Box_<F> = Box_::new(f);
7344            connect_raw(
7345                self.as_ptr() as *mut _,
7346                b"notify::reactive\0".as_ptr() as *const _,
7347                Some(transmute::<_, unsafe extern "C" fn()>(
7348                    notify_reactive_trampoline::<Self, F> as *const (),
7349                )),
7350                Box_::into_raw(f),
7351            )
7352        }
7353    }
7354
7355    fn connect_property_realized_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
7356        unsafe extern "C" fn notify_realized_trampoline<P, F: Fn(&P) + 'static>(
7357            this: *mut ffi::ClutterActor,
7358            _param_spec: glib_sys::gpointer,
7359            f: glib_sys::gpointer,
7360        ) where
7361            P: IsA<Actor>,
7362        {
7363            let f: &F = &*(f as *const F);
7364            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7365        }
7366        unsafe {
7367            let f: Box_<F> = Box_::new(f);
7368            connect_raw(
7369                self.as_ptr() as *mut _,
7370                b"notify::realized\0".as_ptr() as *const _,
7371                Some(transmute::<_, unsafe extern "C" fn()>(
7372                    notify_realized_trampoline::<Self, F> as *const (),
7373                )),
7374                Box_::into_raw(f),
7375            )
7376        }
7377    }
7378
7379    fn connect_property_request_mode_notify<F: Fn(&Self) + 'static>(
7380        &self,
7381        f: F,
7382    ) -> SignalHandlerId {
7383        unsafe extern "C" fn notify_request_mode_trampoline<P, F: Fn(&P) + 'static>(
7384            this: *mut ffi::ClutterActor,
7385            _param_spec: glib_sys::gpointer,
7386            f: glib_sys::gpointer,
7387        ) where
7388            P: IsA<Actor>,
7389        {
7390            let f: &F = &*(f as *const F);
7391            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7392        }
7393        unsafe {
7394            let f: Box_<F> = Box_::new(f);
7395            connect_raw(
7396                self.as_ptr() as *mut _,
7397                b"notify::request-mode\0".as_ptr() as *const _,
7398                Some(transmute::<_, unsafe extern "C" fn()>(
7399                    notify_request_mode_trampoline::<Self, F> as *const (),
7400                )),
7401                Box_::into_raw(f),
7402            )
7403        }
7404    }
7405
7406    fn connect_property_rotation_angle_x_notify<F: Fn(&Self) + 'static>(
7407        &self,
7408        f: F,
7409    ) -> SignalHandlerId {
7410        unsafe extern "C" fn notify_rotation_angle_x_trampoline<P, F: Fn(&P) + 'static>(
7411            this: *mut ffi::ClutterActor,
7412            _param_spec: glib_sys::gpointer,
7413            f: glib_sys::gpointer,
7414        ) where
7415            P: IsA<Actor>,
7416        {
7417            let f: &F = &*(f as *const F);
7418            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7419        }
7420        unsafe {
7421            let f: Box_<F> = Box_::new(f);
7422            connect_raw(
7423                self.as_ptr() as *mut _,
7424                b"notify::rotation-angle-x\0".as_ptr() as *const _,
7425                Some(transmute::<_, unsafe extern "C" fn()>(
7426                    notify_rotation_angle_x_trampoline::<Self, F> as *const (),
7427                )),
7428                Box_::into_raw(f),
7429            )
7430        }
7431    }
7432
7433    fn connect_property_rotation_angle_y_notify<F: Fn(&Self) + 'static>(
7434        &self,
7435        f: F,
7436    ) -> SignalHandlerId {
7437        unsafe extern "C" fn notify_rotation_angle_y_trampoline<P, F: Fn(&P) + 'static>(
7438            this: *mut ffi::ClutterActor,
7439            _param_spec: glib_sys::gpointer,
7440            f: glib_sys::gpointer,
7441        ) where
7442            P: IsA<Actor>,
7443        {
7444            let f: &F = &*(f as *const F);
7445            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7446        }
7447        unsafe {
7448            let f: Box_<F> = Box_::new(f);
7449            connect_raw(
7450                self.as_ptr() as *mut _,
7451                b"notify::rotation-angle-y\0".as_ptr() as *const _,
7452                Some(transmute::<_, unsafe extern "C" fn()>(
7453                    notify_rotation_angle_y_trampoline::<Self, F> as *const (),
7454                )),
7455                Box_::into_raw(f),
7456            )
7457        }
7458    }
7459
7460    fn connect_property_rotation_angle_z_notify<F: Fn(&Self) + 'static>(
7461        &self,
7462        f: F,
7463    ) -> SignalHandlerId {
7464        unsafe extern "C" fn notify_rotation_angle_z_trampoline<P, F: Fn(&P) + 'static>(
7465            this: *mut ffi::ClutterActor,
7466            _param_spec: glib_sys::gpointer,
7467            f: glib_sys::gpointer,
7468        ) where
7469            P: IsA<Actor>,
7470        {
7471            let f: &F = &*(f as *const F);
7472            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7473        }
7474        unsafe {
7475            let f: Box_<F> = Box_::new(f);
7476            connect_raw(
7477                self.as_ptr() as *mut _,
7478                b"notify::rotation-angle-z\0".as_ptr() as *const _,
7479                Some(transmute::<_, unsafe extern "C" fn()>(
7480                    notify_rotation_angle_z_trampoline::<Self, F> as *const (),
7481                )),
7482                Box_::into_raw(f),
7483            )
7484        }
7485    }
7486
7487    fn connect_property_scale_x_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
7488        unsafe extern "C" fn notify_scale_x_trampoline<P, F: Fn(&P) + 'static>(
7489            this: *mut ffi::ClutterActor,
7490            _param_spec: glib_sys::gpointer,
7491            f: glib_sys::gpointer,
7492        ) where
7493            P: IsA<Actor>,
7494        {
7495            let f: &F = &*(f as *const F);
7496            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7497        }
7498        unsafe {
7499            let f: Box_<F> = Box_::new(f);
7500            connect_raw(
7501                self.as_ptr() as *mut _,
7502                b"notify::scale-x\0".as_ptr() as *const _,
7503                Some(transmute::<_, unsafe extern "C" fn()>(
7504                    notify_scale_x_trampoline::<Self, F> as *const (),
7505                )),
7506                Box_::into_raw(f),
7507            )
7508        }
7509    }
7510
7511    fn connect_property_scale_y_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
7512        unsafe extern "C" fn notify_scale_y_trampoline<P, F: Fn(&P) + 'static>(
7513            this: *mut ffi::ClutterActor,
7514            _param_spec: glib_sys::gpointer,
7515            f: glib_sys::gpointer,
7516        ) where
7517            P: IsA<Actor>,
7518        {
7519            let f: &F = &*(f as *const F);
7520            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7521        }
7522        unsafe {
7523            let f: Box_<F> = Box_::new(f);
7524            connect_raw(
7525                self.as_ptr() as *mut _,
7526                b"notify::scale-y\0".as_ptr() as *const _,
7527                Some(transmute::<_, unsafe extern "C" fn()>(
7528                    notify_scale_y_trampoline::<Self, F> as *const (),
7529                )),
7530                Box_::into_raw(f),
7531            )
7532        }
7533    }
7534
7535    fn connect_property_scale_z_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
7536        unsafe extern "C" fn notify_scale_z_trampoline<P, F: Fn(&P) + 'static>(
7537            this: *mut ffi::ClutterActor,
7538            _param_spec: glib_sys::gpointer,
7539            f: glib_sys::gpointer,
7540        ) where
7541            P: IsA<Actor>,
7542        {
7543            let f: &F = &*(f as *const F);
7544            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7545        }
7546        unsafe {
7547            let f: Box_<F> = Box_::new(f);
7548            connect_raw(
7549                self.as_ptr() as *mut _,
7550                b"notify::scale-z\0".as_ptr() as *const _,
7551                Some(transmute::<_, unsafe extern "C" fn()>(
7552                    notify_scale_z_trampoline::<Self, F> as *const (),
7553                )),
7554                Box_::into_raw(f),
7555            )
7556        }
7557    }
7558
7559    fn connect_property_show_on_set_parent_notify<F: Fn(&Self) + 'static>(
7560        &self,
7561        f: F,
7562    ) -> SignalHandlerId {
7563        unsafe extern "C" fn notify_show_on_set_parent_trampoline<P, F: Fn(&P) + 'static>(
7564            this: *mut ffi::ClutterActor,
7565            _param_spec: glib_sys::gpointer,
7566            f: glib_sys::gpointer,
7567        ) where
7568            P: IsA<Actor>,
7569        {
7570            let f: &F = &*(f as *const F);
7571            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7572        }
7573        unsafe {
7574            let f: Box_<F> = Box_::new(f);
7575            connect_raw(
7576                self.as_ptr() as *mut _,
7577                b"notify::show-on-set-parent\0".as_ptr() as *const _,
7578                Some(transmute::<_, unsafe extern "C" fn()>(
7579                    notify_show_on_set_parent_trampoline::<Self, F> as *const (),
7580                )),
7581                Box_::into_raw(f),
7582            )
7583        }
7584    }
7585
7586    fn connect_property_size_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
7587        unsafe extern "C" fn notify_size_trampoline<P, F: Fn(&P) + 'static>(
7588            this: *mut ffi::ClutterActor,
7589            _param_spec: glib_sys::gpointer,
7590            f: glib_sys::gpointer,
7591        ) where
7592            P: IsA<Actor>,
7593        {
7594            let f: &F = &*(f as *const F);
7595            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7596        }
7597        unsafe {
7598            let f: Box_<F> = Box_::new(f);
7599            connect_raw(
7600                self.as_ptr() as *mut _,
7601                b"notify::size\0".as_ptr() as *const _,
7602                Some(transmute::<_, unsafe extern "C" fn()>(
7603                    notify_size_trampoline::<Self, F> as *const (),
7604                )),
7605                Box_::into_raw(f),
7606            )
7607        }
7608    }
7609
7610    fn connect_property_text_direction_notify<F: Fn(&Self) + 'static>(
7611        &self,
7612        f: F,
7613    ) -> SignalHandlerId {
7614        unsafe extern "C" fn notify_text_direction_trampoline<P, F: Fn(&P) + 'static>(
7615            this: *mut ffi::ClutterActor,
7616            _param_spec: glib_sys::gpointer,
7617            f: glib_sys::gpointer,
7618        ) where
7619            P: IsA<Actor>,
7620        {
7621            let f: &F = &*(f as *const F);
7622            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7623        }
7624        unsafe {
7625            let f: Box_<F> = Box_::new(f);
7626            connect_raw(
7627                self.as_ptr() as *mut _,
7628                b"notify::text-direction\0".as_ptr() as *const _,
7629                Some(transmute::<_, unsafe extern "C" fn()>(
7630                    notify_text_direction_trampoline::<Self, F> as *const (),
7631                )),
7632                Box_::into_raw(f),
7633            )
7634        }
7635    }
7636
7637    fn connect_property_transform_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
7638        unsafe extern "C" fn notify_transform_trampoline<P, F: Fn(&P) + 'static>(
7639            this: *mut ffi::ClutterActor,
7640            _param_spec: glib_sys::gpointer,
7641            f: glib_sys::gpointer,
7642        ) where
7643            P: IsA<Actor>,
7644        {
7645            let f: &F = &*(f as *const F);
7646            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7647        }
7648        unsafe {
7649            let f: Box_<F> = Box_::new(f);
7650            connect_raw(
7651                self.as_ptr() as *mut _,
7652                b"notify::transform\0".as_ptr() as *const _,
7653                Some(transmute::<_, unsafe extern "C" fn()>(
7654                    notify_transform_trampoline::<Self, F> as *const (),
7655                )),
7656                Box_::into_raw(f),
7657            )
7658        }
7659    }
7660
7661    fn connect_property_transform_set_notify<F: Fn(&Self) + 'static>(
7662        &self,
7663        f: F,
7664    ) -> SignalHandlerId {
7665        unsafe extern "C" fn notify_transform_set_trampoline<P, F: Fn(&P) + 'static>(
7666            this: *mut ffi::ClutterActor,
7667            _param_spec: glib_sys::gpointer,
7668            f: glib_sys::gpointer,
7669        ) where
7670            P: IsA<Actor>,
7671        {
7672            let f: &F = &*(f as *const F);
7673            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7674        }
7675        unsafe {
7676            let f: Box_<F> = Box_::new(f);
7677            connect_raw(
7678                self.as_ptr() as *mut _,
7679                b"notify::transform-set\0".as_ptr() as *const _,
7680                Some(transmute::<_, unsafe extern "C" fn()>(
7681                    notify_transform_set_trampoline::<Self, F> as *const (),
7682                )),
7683                Box_::into_raw(f),
7684            )
7685        }
7686    }
7687
7688    fn connect_property_translation_x_notify<F: Fn(&Self) + 'static>(
7689        &self,
7690        f: F,
7691    ) -> SignalHandlerId {
7692        unsafe extern "C" fn notify_translation_x_trampoline<P, F: Fn(&P) + 'static>(
7693            this: *mut ffi::ClutterActor,
7694            _param_spec: glib_sys::gpointer,
7695            f: glib_sys::gpointer,
7696        ) where
7697            P: IsA<Actor>,
7698        {
7699            let f: &F = &*(f as *const F);
7700            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7701        }
7702        unsafe {
7703            let f: Box_<F> = Box_::new(f);
7704            connect_raw(
7705                self.as_ptr() as *mut _,
7706                b"notify::translation-x\0".as_ptr() as *const _,
7707                Some(transmute::<_, unsafe extern "C" fn()>(
7708                    notify_translation_x_trampoline::<Self, F> as *const (),
7709                )),
7710                Box_::into_raw(f),
7711            )
7712        }
7713    }
7714
7715    fn connect_property_translation_y_notify<F: Fn(&Self) + 'static>(
7716        &self,
7717        f: F,
7718    ) -> SignalHandlerId {
7719        unsafe extern "C" fn notify_translation_y_trampoline<P, F: Fn(&P) + 'static>(
7720            this: *mut ffi::ClutterActor,
7721            _param_spec: glib_sys::gpointer,
7722            f: glib_sys::gpointer,
7723        ) where
7724            P: IsA<Actor>,
7725        {
7726            let f: &F = &*(f as *const F);
7727            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7728        }
7729        unsafe {
7730            let f: Box_<F> = Box_::new(f);
7731            connect_raw(
7732                self.as_ptr() as *mut _,
7733                b"notify::translation-y\0".as_ptr() as *const _,
7734                Some(transmute::<_, unsafe extern "C" fn()>(
7735                    notify_translation_y_trampoline::<Self, F> as *const (),
7736                )),
7737                Box_::into_raw(f),
7738            )
7739        }
7740    }
7741
7742    fn connect_property_translation_z_notify<F: Fn(&Self) + 'static>(
7743        &self,
7744        f: F,
7745    ) -> SignalHandlerId {
7746        unsafe extern "C" fn notify_translation_z_trampoline<P, F: Fn(&P) + 'static>(
7747            this: *mut ffi::ClutterActor,
7748            _param_spec: glib_sys::gpointer,
7749            f: glib_sys::gpointer,
7750        ) where
7751            P: IsA<Actor>,
7752        {
7753            let f: &F = &*(f as *const F);
7754            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7755        }
7756        unsafe {
7757            let f: Box_<F> = Box_::new(f);
7758            connect_raw(
7759                self.as_ptr() as *mut _,
7760                b"notify::translation-z\0".as_ptr() as *const _,
7761                Some(transmute::<_, unsafe extern "C" fn()>(
7762                    notify_translation_z_trampoline::<Self, F> as *const (),
7763                )),
7764                Box_::into_raw(f),
7765            )
7766        }
7767    }
7768
7769    fn connect_property_visible_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
7770        unsafe extern "C" fn notify_visible_trampoline<P, F: Fn(&P) + 'static>(
7771            this: *mut ffi::ClutterActor,
7772            _param_spec: glib_sys::gpointer,
7773            f: glib_sys::gpointer,
7774        ) where
7775            P: IsA<Actor>,
7776        {
7777            let f: &F = &*(f as *const F);
7778            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7779        }
7780        unsafe {
7781            let f: Box_<F> = Box_::new(f);
7782            connect_raw(
7783                self.as_ptr() as *mut _,
7784                b"notify::visible\0".as_ptr() as *const _,
7785                Some(transmute::<_, unsafe extern "C" fn()>(
7786                    notify_visible_trampoline::<Self, F> as *const (),
7787                )),
7788                Box_::into_raw(f),
7789            )
7790        }
7791    }
7792
7793    fn connect_property_width_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
7794        unsafe extern "C" fn notify_width_trampoline<P, F: Fn(&P) + 'static>(
7795            this: *mut ffi::ClutterActor,
7796            _param_spec: glib_sys::gpointer,
7797            f: glib_sys::gpointer,
7798        ) where
7799            P: IsA<Actor>,
7800        {
7801            let f: &F = &*(f as *const F);
7802            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7803        }
7804        unsafe {
7805            let f: Box_<F> = Box_::new(f);
7806            connect_raw(
7807                self.as_ptr() as *mut _,
7808                b"notify::width\0".as_ptr() as *const _,
7809                Some(transmute::<_, unsafe extern "C" fn()>(
7810                    notify_width_trampoline::<Self, F> as *const (),
7811                )),
7812                Box_::into_raw(f),
7813            )
7814        }
7815    }
7816
7817    fn connect_property_x_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
7818        unsafe extern "C" fn notify_x_trampoline<P, F: Fn(&P) + 'static>(
7819            this: *mut ffi::ClutterActor,
7820            _param_spec: glib_sys::gpointer,
7821            f: glib_sys::gpointer,
7822        ) where
7823            P: IsA<Actor>,
7824        {
7825            let f: &F = &*(f as *const F);
7826            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7827        }
7828        unsafe {
7829            let f: Box_<F> = Box_::new(f);
7830            connect_raw(
7831                self.as_ptr() as *mut _,
7832                b"notify::x\0".as_ptr() as *const _,
7833                Some(transmute::<_, unsafe extern "C" fn()>(
7834                    notify_x_trampoline::<Self, F> as *const (),
7835                )),
7836                Box_::into_raw(f),
7837            )
7838        }
7839    }
7840
7841    fn connect_property_x_align_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
7842        unsafe extern "C" fn notify_x_align_trampoline<P, F: Fn(&P) + 'static>(
7843            this: *mut ffi::ClutterActor,
7844            _param_spec: glib_sys::gpointer,
7845            f: glib_sys::gpointer,
7846        ) where
7847            P: IsA<Actor>,
7848        {
7849            let f: &F = &*(f as *const F);
7850            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7851        }
7852        unsafe {
7853            let f: Box_<F> = Box_::new(f);
7854            connect_raw(
7855                self.as_ptr() as *mut _,
7856                b"notify::x-align\0".as_ptr() as *const _,
7857                Some(transmute::<_, unsafe extern "C" fn()>(
7858                    notify_x_align_trampoline::<Self, F> as *const (),
7859                )),
7860                Box_::into_raw(f),
7861            )
7862        }
7863    }
7864
7865    fn connect_property_x_expand_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
7866        unsafe extern "C" fn notify_x_expand_trampoline<P, F: Fn(&P) + 'static>(
7867            this: *mut ffi::ClutterActor,
7868            _param_spec: glib_sys::gpointer,
7869            f: glib_sys::gpointer,
7870        ) where
7871            P: IsA<Actor>,
7872        {
7873            let f: &F = &*(f as *const F);
7874            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7875        }
7876        unsafe {
7877            let f: Box_<F> = Box_::new(f);
7878            connect_raw(
7879                self.as_ptr() as *mut _,
7880                b"notify::x-expand\0".as_ptr() as *const _,
7881                Some(transmute::<_, unsafe extern "C" fn()>(
7882                    notify_x_expand_trampoline::<Self, F> as *const (),
7883                )),
7884                Box_::into_raw(f),
7885            )
7886        }
7887    }
7888
7889    fn connect_property_y_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
7890        unsafe extern "C" fn notify_y_trampoline<P, F: Fn(&P) + 'static>(
7891            this: *mut ffi::ClutterActor,
7892            _param_spec: glib_sys::gpointer,
7893            f: glib_sys::gpointer,
7894        ) where
7895            P: IsA<Actor>,
7896        {
7897            let f: &F = &*(f as *const F);
7898            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7899        }
7900        unsafe {
7901            let f: Box_<F> = Box_::new(f);
7902            connect_raw(
7903                self.as_ptr() as *mut _,
7904                b"notify::y\0".as_ptr() as *const _,
7905                Some(transmute::<_, unsafe extern "C" fn()>(
7906                    notify_y_trampoline::<Self, F> as *const (),
7907                )),
7908                Box_::into_raw(f),
7909            )
7910        }
7911    }
7912
7913    fn connect_property_y_align_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
7914        unsafe extern "C" fn notify_y_align_trampoline<P, F: Fn(&P) + 'static>(
7915            this: *mut ffi::ClutterActor,
7916            _param_spec: glib_sys::gpointer,
7917            f: glib_sys::gpointer,
7918        ) where
7919            P: IsA<Actor>,
7920        {
7921            let f: &F = &*(f as *const F);
7922            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7923        }
7924        unsafe {
7925            let f: Box_<F> = Box_::new(f);
7926            connect_raw(
7927                self.as_ptr() as *mut _,
7928                b"notify::y-align\0".as_ptr() as *const _,
7929                Some(transmute::<_, unsafe extern "C" fn()>(
7930                    notify_y_align_trampoline::<Self, F> as *const (),
7931                )),
7932                Box_::into_raw(f),
7933            )
7934        }
7935    }
7936
7937    fn connect_property_y_expand_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
7938        unsafe extern "C" fn notify_y_expand_trampoline<P, F: Fn(&P) + 'static>(
7939            this: *mut ffi::ClutterActor,
7940            _param_spec: glib_sys::gpointer,
7941            f: glib_sys::gpointer,
7942        ) where
7943            P: IsA<Actor>,
7944        {
7945            let f: &F = &*(f as *const F);
7946            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7947        }
7948        unsafe {
7949            let f: Box_<F> = Box_::new(f);
7950            connect_raw(
7951                self.as_ptr() as *mut _,
7952                b"notify::y-expand\0".as_ptr() as *const _,
7953                Some(transmute::<_, unsafe extern "C" fn()>(
7954                    notify_y_expand_trampoline::<Self, F> as *const (),
7955                )),
7956                Box_::into_raw(f),
7957            )
7958        }
7959    }
7960
7961    fn connect_property_z_position_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
7962        unsafe extern "C" fn notify_z_position_trampoline<P, F: Fn(&P) + 'static>(
7963            this: *mut ffi::ClutterActor,
7964            _param_spec: glib_sys::gpointer,
7965            f: glib_sys::gpointer,
7966        ) where
7967            P: IsA<Actor>,
7968        {
7969            let f: &F = &*(f as *const F);
7970            f(&Actor::from_glib_borrow(this).unsafe_cast_ref())
7971        }
7972        unsafe {
7973            let f: Box_<F> = Box_::new(f);
7974            connect_raw(
7975                self.as_ptr() as *mut _,
7976                b"notify::z-position\0".as_ptr() as *const _,
7977                Some(transmute::<_, unsafe extern "C" fn()>(
7978                    notify_z_position_trampoline::<Self, F> as *const (),
7979                )),
7980                Box_::into_raw(f),
7981            )
7982        }
7983    }
7984}
7985
7986impl fmt::Display for Actor {
7987    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
7988        write!(f, "Actor")
7989    }
7990}