1#![allow(deprecated)]
5
6use crate::{ffi, StyleContext};
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")]
466 #[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
467 #[doc(alias = "gtk_snapshot_push_mask")]
468 fn push_mask(&self, mask_mode: gsk::MaskMode) {
469 unsafe {
470 ffi::gtk_snapshot_push_mask(self.as_ref().to_glib_none().0, mask_mode.into_glib());
471 }
472 }
473
474 #[doc(alias = "gtk_snapshot_push_opacity")]
475 fn push_opacity(&self, opacity: f64) {
476 unsafe {
477 ffi::gtk_snapshot_push_opacity(self.as_ref().to_glib_none().0, opacity);
478 }
479 }
480
481 #[doc(alias = "gtk_snapshot_push_repeat")]
482 fn push_repeat(&self, bounds: &graphene::Rect, child_bounds: Option<&graphene::Rect>) {
483 unsafe {
484 ffi::gtk_snapshot_push_repeat(
485 self.as_ref().to_glib_none().0,
486 bounds.to_glib_none().0,
487 child_bounds.to_glib_none().0,
488 );
489 }
490 }
491
492 #[doc(alias = "gtk_snapshot_push_rounded_clip")]
493 fn push_rounded_clip(&self, bounds: &gsk::RoundedRect) {
494 unsafe {
495 ffi::gtk_snapshot_push_rounded_clip(
496 self.as_ref().to_glib_none().0,
497 bounds.to_glib_none().0,
498 );
499 }
500 }
501
502 #[doc(alias = "gtk_snapshot_push_shadow")]
503 fn push_shadow(&self, shadow: &[gsk::Shadow]) {
504 let n_shadows = shadow.len() as _;
505 unsafe {
506 ffi::gtk_snapshot_push_shadow(
507 self.as_ref().to_glib_none().0,
508 shadow.to_glib_none().0,
509 n_shadows,
510 );
511 }
512 }
513
514 #[cfg(feature = "v4_14")]
515 #[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
516 #[doc(alias = "gtk_snapshot_push_stroke")]
517 fn push_stroke(&self, path: &gsk::Path, stroke: &gsk::Stroke) {
518 unsafe {
519 ffi::gtk_snapshot_push_stroke(
520 self.as_ref().to_glib_none().0,
521 path.to_glib_none().0,
522 stroke.to_glib_none().0,
523 );
524 }
525 }
526
527 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
528 #[allow(deprecated)]
529 #[doc(alias = "gtk_snapshot_render_background")]
530 fn render_background(
531 &self,
532 context: &impl IsA<StyleContext>,
533 x: f64,
534 y: f64,
535 width: f64,
536 height: f64,
537 ) {
538 unsafe {
539 ffi::gtk_snapshot_render_background(
540 self.as_ref().to_glib_none().0,
541 context.as_ref().to_glib_none().0,
542 x,
543 y,
544 width,
545 height,
546 );
547 }
548 }
549
550 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
551 #[allow(deprecated)]
552 #[doc(alias = "gtk_snapshot_render_focus")]
553 fn render_focus(
554 &self,
555 context: &impl IsA<StyleContext>,
556 x: f64,
557 y: f64,
558 width: f64,
559 height: f64,
560 ) {
561 unsafe {
562 ffi::gtk_snapshot_render_focus(
563 self.as_ref().to_glib_none().0,
564 context.as_ref().to_glib_none().0,
565 x,
566 y,
567 width,
568 height,
569 );
570 }
571 }
572
573 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
574 #[allow(deprecated)]
575 #[doc(alias = "gtk_snapshot_render_frame")]
576 fn render_frame(
577 &self,
578 context: &impl IsA<StyleContext>,
579 x: f64,
580 y: f64,
581 width: f64,
582 height: f64,
583 ) {
584 unsafe {
585 ffi::gtk_snapshot_render_frame(
586 self.as_ref().to_glib_none().0,
587 context.as_ref().to_glib_none().0,
588 x,
589 y,
590 width,
591 height,
592 );
593 }
594 }
595
596 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
597 #[allow(deprecated)]
598 #[doc(alias = "gtk_snapshot_render_insertion_cursor")]
599 fn render_insertion_cursor(
600 &self,
601 context: &impl IsA<StyleContext>,
602 x: f64,
603 y: f64,
604 layout: &pango::Layout,
605 index: i32,
606 direction: pango::Direction,
607 ) {
608 unsafe {
609 ffi::gtk_snapshot_render_insertion_cursor(
610 self.as_ref().to_glib_none().0,
611 context.as_ref().to_glib_none().0,
612 x,
613 y,
614 layout.to_glib_none().0,
615 index,
616 direction.into_glib(),
617 );
618 }
619 }
620
621 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
622 #[allow(deprecated)]
623 #[doc(alias = "gtk_snapshot_render_layout")]
624 fn render_layout(
625 &self,
626 context: &impl IsA<StyleContext>,
627 x: f64,
628 y: f64,
629 layout: &pango::Layout,
630 ) {
631 unsafe {
632 ffi::gtk_snapshot_render_layout(
633 self.as_ref().to_glib_none().0,
634 context.as_ref().to_glib_none().0,
635 x,
636 y,
637 layout.to_glib_none().0,
638 );
639 }
640 }
641
642 #[doc(alias = "gtk_snapshot_restore")]
643 fn restore(&self) {
644 unsafe {
645 ffi::gtk_snapshot_restore(self.as_ref().to_glib_none().0);
646 }
647 }
648
649 #[doc(alias = "gtk_snapshot_rotate")]
650 fn rotate(&self, angle: f32) {
651 unsafe {
652 ffi::gtk_snapshot_rotate(self.as_ref().to_glib_none().0, angle);
653 }
654 }
655
656 #[doc(alias = "gtk_snapshot_rotate_3d")]
657 fn rotate_3d(&self, angle: f32, axis: &graphene::Vec3) {
658 unsafe {
659 ffi::gtk_snapshot_rotate_3d(
660 self.as_ref().to_glib_none().0,
661 angle,
662 axis.to_glib_none().0,
663 );
664 }
665 }
666
667 #[doc(alias = "gtk_snapshot_save")]
668 fn save(&self) {
669 unsafe {
670 ffi::gtk_snapshot_save(self.as_ref().to_glib_none().0);
671 }
672 }
673
674 #[doc(alias = "gtk_snapshot_scale")]
675 fn scale(&self, factor_x: f32, factor_y: f32) {
676 unsafe {
677 ffi::gtk_snapshot_scale(self.as_ref().to_glib_none().0, factor_x, factor_y);
678 }
679 }
680
681 #[doc(alias = "gtk_snapshot_scale_3d")]
682 fn scale_3d(&self, factor_x: f32, factor_y: f32, factor_z: f32) {
683 unsafe {
684 ffi::gtk_snapshot_scale_3d(
685 self.as_ref().to_glib_none().0,
686 factor_x,
687 factor_y,
688 factor_z,
689 );
690 }
691 }
692
693 #[doc(alias = "gtk_snapshot_transform")]
694 fn transform(&self, transform: Option<&gsk::Transform>) {
695 unsafe {
696 ffi::gtk_snapshot_transform(self.as_ref().to_glib_none().0, transform.to_glib_none().0);
697 }
698 }
699
700 #[doc(alias = "gtk_snapshot_transform_matrix")]
701 fn transform_matrix(&self, matrix: &graphene::Matrix) {
702 unsafe {
703 ffi::gtk_snapshot_transform_matrix(
704 self.as_ref().to_glib_none().0,
705 matrix.to_glib_none().0,
706 );
707 }
708 }
709
710 #[doc(alias = "gtk_snapshot_translate")]
711 fn translate(&self, point: &graphene::Point) {
712 unsafe {
713 ffi::gtk_snapshot_translate(self.as_ref().to_glib_none().0, point.to_glib_none().0);
714 }
715 }
716
717 #[doc(alias = "gtk_snapshot_translate_3d")]
718 fn translate_3d(&self, point: &graphene::Point3D) {
719 unsafe {
720 ffi::gtk_snapshot_translate_3d(self.as_ref().to_glib_none().0, point.to_glib_none().0);
721 }
722 }
723}
724
725impl<O: IsA<Snapshot>> SnapshotExt for O {}