1#![allow(deprecated)]
5
6use crate::{StyleContext, ffi};
7use glib::{prelude::*, translate::*};
8
9glib::wrapper! {
10 #[doc(alias = "GtkSnapshot")]
11 pub struct Snapshot(Object<ffi::GtkSnapshot, ffi::GtkSnapshotClass>) @extends gdk::Snapshot;
12
13 match fn {
14 type_ => || ffi::gtk_snapshot_get_type(),
15 }
16}
17
18impl Snapshot {
19 pub const NONE: Option<&'static Snapshot> = None;
20
21 #[doc(alias = "gtk_snapshot_new")]
22 pub fn new() -> Snapshot {
23 assert_initialized_main_thread!();
24 unsafe { from_glib_full(ffi::gtk_snapshot_new()) }
25 }
26}
27
28impl Default for Snapshot {
29 fn default() -> Self {
30 Self::new()
31 }
32}
33
34pub trait SnapshotExt: IsA<Snapshot> + 'static {
35 #[doc(alias = "gtk_snapshot_append_cairo")]
36 fn append_cairo(&self, bounds: &graphene::Rect) -> cairo::Context {
37 unsafe {
38 from_glib_full(ffi::gtk_snapshot_append_cairo(
39 self.as_ref().to_glib_none().0,
40 bounds.to_glib_none().0,
41 ))
42 }
43 }
44
45 #[doc(alias = "gtk_snapshot_append_color")]
46 fn append_color(&self, color: &gdk::RGBA, bounds: &graphene::Rect) {
47 unsafe {
48 ffi::gtk_snapshot_append_color(
49 self.as_ref().to_glib_none().0,
50 color.to_glib_none().0,
51 bounds.to_glib_none().0,
52 );
53 }
54 }
55
56 #[doc(alias = "gtk_snapshot_append_conic_gradient")]
57 fn append_conic_gradient(
58 &self,
59 bounds: &graphene::Rect,
60 center: &graphene::Point,
61 rotation: f32,
62 stops: &[gsk::ColorStop],
63 ) {
64 let n_stops = stops.len() as _;
65 unsafe {
66 ffi::gtk_snapshot_append_conic_gradient(
67 self.as_ref().to_glib_none().0,
68 bounds.to_glib_none().0,
69 center.to_glib_none().0,
70 rotation,
71 stops.to_glib_none().0,
72 n_stops,
73 );
74 }
75 }
76
77 #[cfg(feature = "v4_14")]
78 #[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
79 #[doc(alias = "gtk_snapshot_append_fill")]
80 fn append_fill(&self, path: &gsk::Path, fill_rule: gsk::FillRule, color: &gdk::RGBA) {
81 unsafe {
82 ffi::gtk_snapshot_append_fill(
83 self.as_ref().to_glib_none().0,
84 path.to_glib_none().0,
85 fill_rule.into_glib(),
86 color.to_glib_none().0,
87 );
88 }
89 }
90
91 #[doc(alias = "gtk_snapshot_append_inset_shadow")]
92 fn append_inset_shadow(
93 &self,
94 outline: &gsk::RoundedRect,
95 color: &gdk::RGBA,
96 dx: f32,
97 dy: f32,
98 spread: f32,
99 blur_radius: f32,
100 ) {
101 unsafe {
102 ffi::gtk_snapshot_append_inset_shadow(
103 self.as_ref().to_glib_none().0,
104 outline.to_glib_none().0,
105 color.to_glib_none().0,
106 dx,
107 dy,
108 spread,
109 blur_radius,
110 );
111 }
112 }
113
114 #[doc(alias = "gtk_snapshot_append_layout")]
115 fn append_layout(&self, layout: &pango::Layout, color: &gdk::RGBA) {
116 unsafe {
117 ffi::gtk_snapshot_append_layout(
118 self.as_ref().to_glib_none().0,
119 layout.to_glib_none().0,
120 color.to_glib_none().0,
121 );
122 }
123 }
124
125 #[doc(alias = "gtk_snapshot_append_linear_gradient")]
126 fn append_linear_gradient(
127 &self,
128 bounds: &graphene::Rect,
129 start_point: &graphene::Point,
130 end_point: &graphene::Point,
131 stops: &[gsk::ColorStop],
132 ) {
133 let n_stops = stops.len() as _;
134 unsafe {
135 ffi::gtk_snapshot_append_linear_gradient(
136 self.as_ref().to_glib_none().0,
137 bounds.to_glib_none().0,
138 start_point.to_glib_none().0,
139 end_point.to_glib_none().0,
140 stops.to_glib_none().0,
141 n_stops,
142 );
143 }
144 }
145
146 #[doc(alias = "gtk_snapshot_append_node")]
147 fn append_node(&self, node: impl AsRef<gsk::RenderNode>) {
148 unsafe {
149 ffi::gtk_snapshot_append_node(
150 self.as_ref().to_glib_none().0,
151 node.as_ref().to_glib_none().0,
152 );
153 }
154 }
155
156 #[doc(alias = "gtk_snapshot_append_outset_shadow")]
157 fn append_outset_shadow(
158 &self,
159 outline: &gsk::RoundedRect,
160 color: &gdk::RGBA,
161 dx: f32,
162 dy: f32,
163 spread: f32,
164 blur_radius: f32,
165 ) {
166 unsafe {
167 ffi::gtk_snapshot_append_outset_shadow(
168 self.as_ref().to_glib_none().0,
169 outline.to_glib_none().0,
170 color.to_glib_none().0,
171 dx,
172 dy,
173 spread,
174 blur_radius,
175 );
176 }
177 }
178
179 #[cfg(feature = "v4_22")]
180 #[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
181 #[doc(alias = "gtk_snapshot_append_paste")]
182 fn append_paste(&self, bounds: &graphene::Rect, nth: usize) {
183 unsafe {
184 ffi::gtk_snapshot_append_paste(
185 self.as_ref().to_glib_none().0,
186 bounds.to_glib_none().0,
187 nth,
188 );
189 }
190 }
191
192 #[doc(alias = "gtk_snapshot_append_radial_gradient")]
193 fn append_radial_gradient(
194 &self,
195 bounds: &graphene::Rect,
196 center: &graphene::Point,
197 hradius: f32,
198 vradius: f32,
199 start: f32,
200 end: f32,
201 stops: &[gsk::ColorStop],
202 ) {
203 let n_stops = stops.len() as _;
204 unsafe {
205 ffi::gtk_snapshot_append_radial_gradient(
206 self.as_ref().to_glib_none().0,
207 bounds.to_glib_none().0,
208 center.to_glib_none().0,
209 hradius,
210 vradius,
211 start,
212 end,
213 stops.to_glib_none().0,
214 n_stops,
215 );
216 }
217 }
218
219 #[doc(alias = "gtk_snapshot_append_repeating_linear_gradient")]
220 fn append_repeating_linear_gradient(
221 &self,
222 bounds: &graphene::Rect,
223 start_point: &graphene::Point,
224 end_point: &graphene::Point,
225 stops: &[gsk::ColorStop],
226 ) {
227 let n_stops = stops.len() as _;
228 unsafe {
229 ffi::gtk_snapshot_append_repeating_linear_gradient(
230 self.as_ref().to_glib_none().0,
231 bounds.to_glib_none().0,
232 start_point.to_glib_none().0,
233 end_point.to_glib_none().0,
234 stops.to_glib_none().0,
235 n_stops,
236 );
237 }
238 }
239
240 #[doc(alias = "gtk_snapshot_append_repeating_radial_gradient")]
241 fn append_repeating_radial_gradient(
242 &self,
243 bounds: &graphene::Rect,
244 center: &graphene::Point,
245 hradius: f32,
246 vradius: f32,
247 start: f32,
248 end: f32,
249 stops: &[gsk::ColorStop],
250 ) {
251 let n_stops = stops.len() as _;
252 unsafe {
253 ffi::gtk_snapshot_append_repeating_radial_gradient(
254 self.as_ref().to_glib_none().0,
255 bounds.to_glib_none().0,
256 center.to_glib_none().0,
257 hradius,
258 vradius,
259 start,
260 end,
261 stops.to_glib_none().0,
262 n_stops,
263 );
264 }
265 }
266
267 #[cfg(feature = "v4_10")]
268 #[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
269 #[doc(alias = "gtk_snapshot_append_scaled_texture")]
270 fn append_scaled_texture(
271 &self,
272 texture: &impl IsA<gdk::Texture>,
273 filter: gsk::ScalingFilter,
274 bounds: &graphene::Rect,
275 ) {
276 unsafe {
277 ffi::gtk_snapshot_append_scaled_texture(
278 self.as_ref().to_glib_none().0,
279 texture.as_ref().to_glib_none().0,
280 filter.into_glib(),
281 bounds.to_glib_none().0,
282 );
283 }
284 }
285
286 #[cfg(feature = "v4_14")]
287 #[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
288 #[doc(alias = "gtk_snapshot_append_stroke")]
289 fn append_stroke(&self, path: &gsk::Path, stroke: &gsk::Stroke, color: &gdk::RGBA) {
290 unsafe {
291 ffi::gtk_snapshot_append_stroke(
292 self.as_ref().to_glib_none().0,
293 path.to_glib_none().0,
294 stroke.to_glib_none().0,
295 color.to_glib_none().0,
296 );
297 }
298 }
299
300 #[doc(alias = "gtk_snapshot_append_texture")]
301 fn append_texture(&self, texture: &impl IsA<gdk::Texture>, bounds: &graphene::Rect) {
302 unsafe {
303 ffi::gtk_snapshot_append_texture(
304 self.as_ref().to_glib_none().0,
305 texture.as_ref().to_glib_none().0,
306 bounds.to_glib_none().0,
307 );
308 }
309 }
310
311 #[doc(alias = "gtk_snapshot_free_to_node")]
312 #[doc(alias = "free_to_node")]
313 fn to_node(self) -> Option<gsk::RenderNode> {
314 unsafe {
315 from_glib_full(ffi::gtk_snapshot_free_to_node(
316 self.upcast().into_glib_ptr(),
317 ))
318 }
319 }
320
321 #[doc(alias = "gtk_snapshot_free_to_paintable")]
322 #[doc(alias = "free_to_paintable")]
323 fn to_paintable(self, size: Option<&graphene::Size>) -> Option<gdk::Paintable> {
324 unsafe {
325 from_glib_full(ffi::gtk_snapshot_free_to_paintable(
326 self.upcast().into_glib_ptr(),
327 size.to_glib_none().0,
328 ))
329 }
330 }
331
332 #[cfg_attr(feature = "v4_16", deprecated = "Since 4.16")]
333 #[allow(deprecated)]
334 #[doc(alias = "gtk_snapshot_gl_shader_pop_texture")]
335 fn gl_shader_pop_texture(&self) {
336 unsafe {
337 ffi::gtk_snapshot_gl_shader_pop_texture(self.as_ref().to_glib_none().0);
338 }
339 }
340
341 #[doc(alias = "gtk_snapshot_perspective")]
342 fn perspective(&self, depth: f32) {
343 unsafe {
344 ffi::gtk_snapshot_perspective(self.as_ref().to_glib_none().0, depth);
345 }
346 }
347
348 #[doc(alias = "gtk_snapshot_pop")]
349 fn pop(&self) {
350 unsafe {
351 ffi::gtk_snapshot_pop(self.as_ref().to_glib_none().0);
352 }
353 }
354
355 #[doc(alias = "gtk_snapshot_push_blend")]
356 fn push_blend(&self, blend_mode: gsk::BlendMode) {
357 unsafe {
358 ffi::gtk_snapshot_push_blend(self.as_ref().to_glib_none().0, blend_mode.into_glib());
359 }
360 }
361
362 #[doc(alias = "gtk_snapshot_push_blur")]
363 fn push_blur(&self, radius: f64) {
364 unsafe {
365 ffi::gtk_snapshot_push_blur(self.as_ref().to_glib_none().0, radius);
366 }
367 }
368
369 #[doc(alias = "gtk_snapshot_push_clip")]
370 fn push_clip(&self, bounds: &graphene::Rect) {
371 unsafe {
372 ffi::gtk_snapshot_push_clip(self.as_ref().to_glib_none().0, bounds.to_glib_none().0);
373 }
374 }
375
376 #[doc(alias = "gtk_snapshot_push_color_matrix")]
377 fn push_color_matrix(&self, color_matrix: &graphene::Matrix, color_offset: &graphene::Vec4) {
378 unsafe {
379 ffi::gtk_snapshot_push_color_matrix(
380 self.as_ref().to_glib_none().0,
381 color_matrix.to_glib_none().0,
382 color_offset.to_glib_none().0,
383 );
384 }
385 }
386
387 #[cfg(feature = "v4_20")]
388 #[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
389 #[doc(alias = "gtk_snapshot_push_component_transfer")]
390 fn push_component_transfer(
391 &self,
392 red: &gsk::ComponentTransfer,
393 green: &gsk::ComponentTransfer,
394 blue: &gsk::ComponentTransfer,
395 alpha: &gsk::ComponentTransfer,
396 ) {
397 unsafe {
398 ffi::gtk_snapshot_push_component_transfer(
399 self.as_ref().to_glib_none().0,
400 red.to_glib_none().0,
401 green.to_glib_none().0,
402 blue.to_glib_none().0,
403 alpha.to_glib_none().0,
404 );
405 }
406 }
407
408 #[cfg(feature = "v4_22")]
409 #[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
410 #[doc(alias = "gtk_snapshot_push_composite")]
411 fn push_composite(&self, op: gsk::PorterDuff) {
412 unsafe {
413 ffi::gtk_snapshot_push_composite(self.as_ref().to_glib_none().0, op.into_glib());
414 }
415 }
416
417 #[cfg(feature = "v4_22")]
418 #[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
419 #[doc(alias = "gtk_snapshot_push_copy")]
420 fn push_copy(&self) {
421 unsafe {
422 ffi::gtk_snapshot_push_copy(self.as_ref().to_glib_none().0);
423 }
424 }
425
426 #[doc(alias = "gtk_snapshot_push_cross_fade")]
427 fn push_cross_fade(&self, progress: f64) {
428 unsafe {
429 ffi::gtk_snapshot_push_cross_fade(self.as_ref().to_glib_none().0, progress);
430 }
431 }
432
433 #[cfg(feature = "v4_14")]
434 #[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
435 #[doc(alias = "gtk_snapshot_push_fill")]
436 fn push_fill(&self, path: &gsk::Path, fill_rule: gsk::FillRule) {
437 unsafe {
438 ffi::gtk_snapshot_push_fill(
439 self.as_ref().to_glib_none().0,
440 path.to_glib_none().0,
441 fill_rule.into_glib(),
442 );
443 }
444 }
445
446 #[cfg_attr(feature = "v4_16", deprecated = "Since 4.16")]
447 #[allow(deprecated)]
448 #[doc(alias = "gtk_snapshot_push_gl_shader")]
449 fn push_gl_shader(
450 &self,
451 shader: &gsk::GLShader,
452 bounds: &graphene::Rect,
453 take_args: glib::Bytes,
454 ) {
455 unsafe {
456 ffi::gtk_snapshot_push_gl_shader(
457 self.as_ref().to_glib_none().0,
458 shader.to_glib_none().0,
459 bounds.to_glib_none().0,
460 take_args.into_glib_ptr(),
461 );
462 }
463 }
464
465 #[cfg(feature = "v4_10")]
473 #[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
474 #[doc(alias = "gtk_snapshot_push_mask")]
475 fn push_mask(&self, mask_mode: gsk::MaskMode) {
476 unsafe {
477 ffi::gtk_snapshot_push_mask(self.as_ref().to_glib_none().0, mask_mode.into_glib());
478 }
479 }
480
481 #[doc(alias = "gtk_snapshot_push_opacity")]
482 fn push_opacity(&self, opacity: f64) {
483 unsafe {
484 ffi::gtk_snapshot_push_opacity(self.as_ref().to_glib_none().0, opacity);
485 }
486 }
487
488 #[doc(alias = "gtk_snapshot_push_repeat")]
489 fn push_repeat(&self, bounds: &graphene::Rect, child_bounds: Option<&graphene::Rect>) {
490 unsafe {
491 ffi::gtk_snapshot_push_repeat(
492 self.as_ref().to_glib_none().0,
493 bounds.to_glib_none().0,
494 child_bounds.to_glib_none().0,
495 );
496 }
497 }
498
499 #[doc(alias = "gtk_snapshot_push_rounded_clip")]
500 fn push_rounded_clip(&self, bounds: &gsk::RoundedRect) {
501 unsafe {
502 ffi::gtk_snapshot_push_rounded_clip(
503 self.as_ref().to_glib_none().0,
504 bounds.to_glib_none().0,
505 );
506 }
507 }
508
509 #[doc(alias = "gtk_snapshot_push_shadow")]
510 fn push_shadow(&self, shadow: &[gsk::Shadow]) {
511 let n_shadows = shadow.len() as _;
512 unsafe {
513 ffi::gtk_snapshot_push_shadow(
514 self.as_ref().to_glib_none().0,
515 shadow.to_glib_none().0,
516 n_shadows,
517 );
518 }
519 }
520
521 #[cfg(feature = "v4_14")]
522 #[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
523 #[doc(alias = "gtk_snapshot_push_stroke")]
524 fn push_stroke(&self, path: &gsk::Path, stroke: &gsk::Stroke) {
525 unsafe {
526 ffi::gtk_snapshot_push_stroke(
527 self.as_ref().to_glib_none().0,
528 path.to_glib_none().0,
529 stroke.to_glib_none().0,
530 );
531 }
532 }
533
534 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
535 #[allow(deprecated)]
536 #[doc(alias = "gtk_snapshot_render_background")]
537 fn render_background(
538 &self,
539 context: &impl IsA<StyleContext>,
540 x: f64,
541 y: f64,
542 width: f64,
543 height: f64,
544 ) {
545 unsafe {
546 ffi::gtk_snapshot_render_background(
547 self.as_ref().to_glib_none().0,
548 context.as_ref().to_glib_none().0,
549 x,
550 y,
551 width,
552 height,
553 );
554 }
555 }
556
557 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
558 #[allow(deprecated)]
559 #[doc(alias = "gtk_snapshot_render_focus")]
560 fn render_focus(
561 &self,
562 context: &impl IsA<StyleContext>,
563 x: f64,
564 y: f64,
565 width: f64,
566 height: f64,
567 ) {
568 unsafe {
569 ffi::gtk_snapshot_render_focus(
570 self.as_ref().to_glib_none().0,
571 context.as_ref().to_glib_none().0,
572 x,
573 y,
574 width,
575 height,
576 );
577 }
578 }
579
580 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
581 #[allow(deprecated)]
582 #[doc(alias = "gtk_snapshot_render_frame")]
583 fn render_frame(
584 &self,
585 context: &impl IsA<StyleContext>,
586 x: f64,
587 y: f64,
588 width: f64,
589 height: f64,
590 ) {
591 unsafe {
592 ffi::gtk_snapshot_render_frame(
593 self.as_ref().to_glib_none().0,
594 context.as_ref().to_glib_none().0,
595 x,
596 y,
597 width,
598 height,
599 );
600 }
601 }
602
603 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
604 #[allow(deprecated)]
605 #[doc(alias = "gtk_snapshot_render_insertion_cursor")]
606 fn render_insertion_cursor(
607 &self,
608 context: &impl IsA<StyleContext>,
609 x: f64,
610 y: f64,
611 layout: &pango::Layout,
612 index: i32,
613 direction: pango::Direction,
614 ) {
615 unsafe {
616 ffi::gtk_snapshot_render_insertion_cursor(
617 self.as_ref().to_glib_none().0,
618 context.as_ref().to_glib_none().0,
619 x,
620 y,
621 layout.to_glib_none().0,
622 index,
623 direction.into_glib(),
624 );
625 }
626 }
627
628 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
629 #[allow(deprecated)]
630 #[doc(alias = "gtk_snapshot_render_layout")]
631 fn render_layout(
632 &self,
633 context: &impl IsA<StyleContext>,
634 x: f64,
635 y: f64,
636 layout: &pango::Layout,
637 ) {
638 unsafe {
639 ffi::gtk_snapshot_render_layout(
640 self.as_ref().to_glib_none().0,
641 context.as_ref().to_glib_none().0,
642 x,
643 y,
644 layout.to_glib_none().0,
645 );
646 }
647 }
648
649 #[doc(alias = "gtk_snapshot_restore")]
650 fn restore(&self) {
651 unsafe {
652 ffi::gtk_snapshot_restore(self.as_ref().to_glib_none().0);
653 }
654 }
655
656 #[doc(alias = "gtk_snapshot_rotate")]
657 fn rotate(&self, angle: f32) {
658 unsafe {
659 ffi::gtk_snapshot_rotate(self.as_ref().to_glib_none().0, angle);
660 }
661 }
662
663 #[doc(alias = "gtk_snapshot_rotate_3d")]
664 fn rotate_3d(&self, angle: f32, axis: &graphene::Vec3) {
665 unsafe {
666 ffi::gtk_snapshot_rotate_3d(
667 self.as_ref().to_glib_none().0,
668 angle,
669 axis.to_glib_none().0,
670 );
671 }
672 }
673
674 #[doc(alias = "gtk_snapshot_save")]
675 fn save(&self) {
676 unsafe {
677 ffi::gtk_snapshot_save(self.as_ref().to_glib_none().0);
678 }
679 }
680
681 #[doc(alias = "gtk_snapshot_scale")]
682 fn scale(&self, factor_x: f32, factor_y: f32) {
683 unsafe {
684 ffi::gtk_snapshot_scale(self.as_ref().to_glib_none().0, factor_x, factor_y);
685 }
686 }
687
688 #[doc(alias = "gtk_snapshot_scale_3d")]
689 fn scale_3d(&self, factor_x: f32, factor_y: f32, factor_z: f32) {
690 unsafe {
691 ffi::gtk_snapshot_scale_3d(
692 self.as_ref().to_glib_none().0,
693 factor_x,
694 factor_y,
695 factor_z,
696 );
697 }
698 }
699
700 #[doc(alias = "gtk_snapshot_transform")]
701 fn transform(&self, transform: Option<&gsk::Transform>) {
702 unsafe {
703 ffi::gtk_snapshot_transform(self.as_ref().to_glib_none().0, transform.to_glib_none().0);
704 }
705 }
706
707 #[doc(alias = "gtk_snapshot_transform_matrix")]
708 fn transform_matrix(&self, matrix: &graphene::Matrix) {
709 unsafe {
710 ffi::gtk_snapshot_transform_matrix(
711 self.as_ref().to_glib_none().0,
712 matrix.to_glib_none().0,
713 );
714 }
715 }
716
717 #[doc(alias = "gtk_snapshot_translate")]
718 fn translate(&self, point: &graphene::Point) {
719 unsafe {
720 ffi::gtk_snapshot_translate(self.as_ref().to_glib_none().0, point.to_glib_none().0);
721 }
722 }
723
724 #[doc(alias = "gtk_snapshot_translate_3d")]
725 fn translate_3d(&self, point: &graphene::Point3D) {
726 unsafe {
727 ffi::gtk_snapshot_translate_3d(self.as_ref().to_glib_none().0, point.to_glib_none().0);
728 }
729 }
730}
731
732impl<O: IsA<Snapshot>> SnapshotExt for O {}