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 #[doc(alias = "gtk_snapshot_append_radial_gradient")]
180 fn append_radial_gradient(
181 &self,
182 bounds: &graphene::Rect,
183 center: &graphene::Point,
184 hradius: f32,
185 vradius: f32,
186 start: f32,
187 end: f32,
188 stops: &[gsk::ColorStop],
189 ) {
190 let n_stops = stops.len() as _;
191 unsafe {
192 ffi::gtk_snapshot_append_radial_gradient(
193 self.as_ref().to_glib_none().0,
194 bounds.to_glib_none().0,
195 center.to_glib_none().0,
196 hradius,
197 vradius,
198 start,
199 end,
200 stops.to_glib_none().0,
201 n_stops,
202 );
203 }
204 }
205
206 #[doc(alias = "gtk_snapshot_append_repeating_linear_gradient")]
207 fn append_repeating_linear_gradient(
208 &self,
209 bounds: &graphene::Rect,
210 start_point: &graphene::Point,
211 end_point: &graphene::Point,
212 stops: &[gsk::ColorStop],
213 ) {
214 let n_stops = stops.len() as _;
215 unsafe {
216 ffi::gtk_snapshot_append_repeating_linear_gradient(
217 self.as_ref().to_glib_none().0,
218 bounds.to_glib_none().0,
219 start_point.to_glib_none().0,
220 end_point.to_glib_none().0,
221 stops.to_glib_none().0,
222 n_stops,
223 );
224 }
225 }
226
227 #[doc(alias = "gtk_snapshot_append_repeating_radial_gradient")]
228 fn append_repeating_radial_gradient(
229 &self,
230 bounds: &graphene::Rect,
231 center: &graphene::Point,
232 hradius: f32,
233 vradius: f32,
234 start: f32,
235 end: f32,
236 stops: &[gsk::ColorStop],
237 ) {
238 let n_stops = stops.len() as _;
239 unsafe {
240 ffi::gtk_snapshot_append_repeating_radial_gradient(
241 self.as_ref().to_glib_none().0,
242 bounds.to_glib_none().0,
243 center.to_glib_none().0,
244 hradius,
245 vradius,
246 start,
247 end,
248 stops.to_glib_none().0,
249 n_stops,
250 );
251 }
252 }
253
254 #[cfg(feature = "v4_10")]
255 #[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
256 #[doc(alias = "gtk_snapshot_append_scaled_texture")]
257 fn append_scaled_texture(
258 &self,
259 texture: &impl IsA<gdk::Texture>,
260 filter: gsk::ScalingFilter,
261 bounds: &graphene::Rect,
262 ) {
263 unsafe {
264 ffi::gtk_snapshot_append_scaled_texture(
265 self.as_ref().to_glib_none().0,
266 texture.as_ref().to_glib_none().0,
267 filter.into_glib(),
268 bounds.to_glib_none().0,
269 );
270 }
271 }
272
273 #[cfg(feature = "v4_14")]
274 #[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
275 #[doc(alias = "gtk_snapshot_append_stroke")]
276 fn append_stroke(&self, path: &gsk::Path, stroke: &gsk::Stroke, color: &gdk::RGBA) {
277 unsafe {
278 ffi::gtk_snapshot_append_stroke(
279 self.as_ref().to_glib_none().0,
280 path.to_glib_none().0,
281 stroke.to_glib_none().0,
282 color.to_glib_none().0,
283 );
284 }
285 }
286
287 #[doc(alias = "gtk_snapshot_append_texture")]
288 fn append_texture(&self, texture: &impl IsA<gdk::Texture>, bounds: &graphene::Rect) {
289 unsafe {
290 ffi::gtk_snapshot_append_texture(
291 self.as_ref().to_glib_none().0,
292 texture.as_ref().to_glib_none().0,
293 bounds.to_glib_none().0,
294 );
295 }
296 }
297
298 #[doc(alias = "gtk_snapshot_free_to_node")]
299 #[doc(alias = "free_to_node")]
300 fn to_node(self) -> Option<gsk::RenderNode> {
301 unsafe {
302 from_glib_full(ffi::gtk_snapshot_free_to_node(
303 self.upcast().into_glib_ptr(),
304 ))
305 }
306 }
307
308 #[doc(alias = "gtk_snapshot_free_to_paintable")]
309 #[doc(alias = "free_to_paintable")]
310 fn to_paintable(self, size: Option<&graphene::Size>) -> Option<gdk::Paintable> {
311 unsafe {
312 from_glib_full(ffi::gtk_snapshot_free_to_paintable(
313 self.upcast().into_glib_ptr(),
314 size.to_glib_none().0,
315 ))
316 }
317 }
318
319 #[cfg_attr(feature = "v4_16", deprecated = "Since 4.16")]
320 #[allow(deprecated)]
321 #[doc(alias = "gtk_snapshot_gl_shader_pop_texture")]
322 fn gl_shader_pop_texture(&self) {
323 unsafe {
324 ffi::gtk_snapshot_gl_shader_pop_texture(self.as_ref().to_glib_none().0);
325 }
326 }
327
328 #[doc(alias = "gtk_snapshot_perspective")]
329 fn perspective(&self, depth: f32) {
330 unsafe {
331 ffi::gtk_snapshot_perspective(self.as_ref().to_glib_none().0, depth);
332 }
333 }
334
335 #[doc(alias = "gtk_snapshot_pop")]
336 fn pop(&self) {
337 unsafe {
338 ffi::gtk_snapshot_pop(self.as_ref().to_glib_none().0);
339 }
340 }
341
342 #[doc(alias = "gtk_snapshot_push_blend")]
343 fn push_blend(&self, blend_mode: gsk::BlendMode) {
344 unsafe {
345 ffi::gtk_snapshot_push_blend(self.as_ref().to_glib_none().0, blend_mode.into_glib());
346 }
347 }
348
349 #[doc(alias = "gtk_snapshot_push_blur")]
350 fn push_blur(&self, radius: f64) {
351 unsafe {
352 ffi::gtk_snapshot_push_blur(self.as_ref().to_glib_none().0, radius);
353 }
354 }
355
356 #[doc(alias = "gtk_snapshot_push_clip")]
357 fn push_clip(&self, bounds: &graphene::Rect) {
358 unsafe {
359 ffi::gtk_snapshot_push_clip(self.as_ref().to_glib_none().0, bounds.to_glib_none().0);
360 }
361 }
362
363 #[doc(alias = "gtk_snapshot_push_color_matrix")]
364 fn push_color_matrix(&self, color_matrix: &graphene::Matrix, color_offset: &graphene::Vec4) {
365 unsafe {
366 ffi::gtk_snapshot_push_color_matrix(
367 self.as_ref().to_glib_none().0,
368 color_matrix.to_glib_none().0,
369 color_offset.to_glib_none().0,
370 );
371 }
372 }
373
374 #[cfg(feature = "v4_20")]
375 #[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
376 #[doc(alias = "gtk_snapshot_push_component_transfer")]
377 fn push_component_transfer(
378 &self,
379 red: &gsk::ComponentTransfer,
380 green: &gsk::ComponentTransfer,
381 blue: &gsk::ComponentTransfer,
382 alpha: &gsk::ComponentTransfer,
383 ) {
384 unsafe {
385 ffi::gtk_snapshot_push_component_transfer(
386 self.as_ref().to_glib_none().0,
387 red.to_glib_none().0,
388 green.to_glib_none().0,
389 blue.to_glib_none().0,
390 alpha.to_glib_none().0,
391 );
392 }
393 }
394
395 #[doc(alias = "gtk_snapshot_push_cross_fade")]
396 fn push_cross_fade(&self, progress: f64) {
397 unsafe {
398 ffi::gtk_snapshot_push_cross_fade(self.as_ref().to_glib_none().0, progress);
399 }
400 }
401
402 #[cfg(feature = "v4_14")]
403 #[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
404 #[doc(alias = "gtk_snapshot_push_fill")]
405 fn push_fill(&self, path: &gsk::Path, fill_rule: gsk::FillRule) {
406 unsafe {
407 ffi::gtk_snapshot_push_fill(
408 self.as_ref().to_glib_none().0,
409 path.to_glib_none().0,
410 fill_rule.into_glib(),
411 );
412 }
413 }
414
415 #[cfg_attr(feature = "v4_16", deprecated = "Since 4.16")]
416 #[allow(deprecated)]
417 #[doc(alias = "gtk_snapshot_push_gl_shader")]
418 fn push_gl_shader(
419 &self,
420 shader: &gsk::GLShader,
421 bounds: &graphene::Rect,
422 take_args: glib::Bytes,
423 ) {
424 unsafe {
425 ffi::gtk_snapshot_push_gl_shader(
426 self.as_ref().to_glib_none().0,
427 shader.to_glib_none().0,
428 bounds.to_glib_none().0,
429 take_args.into_glib_ptr(),
430 );
431 }
432 }
433
434 #[cfg(feature = "v4_10")]
435 #[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
436 #[doc(alias = "gtk_snapshot_push_mask")]
437 fn push_mask(&self, mask_mode: gsk::MaskMode) {
438 unsafe {
439 ffi::gtk_snapshot_push_mask(self.as_ref().to_glib_none().0, mask_mode.into_glib());
440 }
441 }
442
443 #[doc(alias = "gtk_snapshot_push_opacity")]
444 fn push_opacity(&self, opacity: f64) {
445 unsafe {
446 ffi::gtk_snapshot_push_opacity(self.as_ref().to_glib_none().0, opacity);
447 }
448 }
449
450 #[doc(alias = "gtk_snapshot_push_repeat")]
451 fn push_repeat(&self, bounds: &graphene::Rect, child_bounds: Option<&graphene::Rect>) {
452 unsafe {
453 ffi::gtk_snapshot_push_repeat(
454 self.as_ref().to_glib_none().0,
455 bounds.to_glib_none().0,
456 child_bounds.to_glib_none().0,
457 );
458 }
459 }
460
461 #[doc(alias = "gtk_snapshot_push_rounded_clip")]
462 fn push_rounded_clip(&self, bounds: &gsk::RoundedRect) {
463 unsafe {
464 ffi::gtk_snapshot_push_rounded_clip(
465 self.as_ref().to_glib_none().0,
466 bounds.to_glib_none().0,
467 );
468 }
469 }
470
471 #[doc(alias = "gtk_snapshot_push_shadow")]
472 fn push_shadow(&self, shadow: &[gsk::Shadow]) {
473 let n_shadows = shadow.len() as _;
474 unsafe {
475 ffi::gtk_snapshot_push_shadow(
476 self.as_ref().to_glib_none().0,
477 shadow.to_glib_none().0,
478 n_shadows,
479 );
480 }
481 }
482
483 #[cfg(feature = "v4_14")]
484 #[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
485 #[doc(alias = "gtk_snapshot_push_stroke")]
486 fn push_stroke(&self, path: &gsk::Path, stroke: &gsk::Stroke) {
487 unsafe {
488 ffi::gtk_snapshot_push_stroke(
489 self.as_ref().to_glib_none().0,
490 path.to_glib_none().0,
491 stroke.to_glib_none().0,
492 );
493 }
494 }
495
496 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
497 #[allow(deprecated)]
498 #[doc(alias = "gtk_snapshot_render_background")]
499 fn render_background(
500 &self,
501 context: &impl IsA<StyleContext>,
502 x: f64,
503 y: f64,
504 width: f64,
505 height: f64,
506 ) {
507 unsafe {
508 ffi::gtk_snapshot_render_background(
509 self.as_ref().to_glib_none().0,
510 context.as_ref().to_glib_none().0,
511 x,
512 y,
513 width,
514 height,
515 );
516 }
517 }
518
519 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
520 #[allow(deprecated)]
521 #[doc(alias = "gtk_snapshot_render_focus")]
522 fn render_focus(
523 &self,
524 context: &impl IsA<StyleContext>,
525 x: f64,
526 y: f64,
527 width: f64,
528 height: f64,
529 ) {
530 unsafe {
531 ffi::gtk_snapshot_render_focus(
532 self.as_ref().to_glib_none().0,
533 context.as_ref().to_glib_none().0,
534 x,
535 y,
536 width,
537 height,
538 );
539 }
540 }
541
542 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
543 #[allow(deprecated)]
544 #[doc(alias = "gtk_snapshot_render_frame")]
545 fn render_frame(
546 &self,
547 context: &impl IsA<StyleContext>,
548 x: f64,
549 y: f64,
550 width: f64,
551 height: f64,
552 ) {
553 unsafe {
554 ffi::gtk_snapshot_render_frame(
555 self.as_ref().to_glib_none().0,
556 context.as_ref().to_glib_none().0,
557 x,
558 y,
559 width,
560 height,
561 );
562 }
563 }
564
565 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
566 #[allow(deprecated)]
567 #[doc(alias = "gtk_snapshot_render_insertion_cursor")]
568 fn render_insertion_cursor(
569 &self,
570 context: &impl IsA<StyleContext>,
571 x: f64,
572 y: f64,
573 layout: &pango::Layout,
574 index: i32,
575 direction: pango::Direction,
576 ) {
577 unsafe {
578 ffi::gtk_snapshot_render_insertion_cursor(
579 self.as_ref().to_glib_none().0,
580 context.as_ref().to_glib_none().0,
581 x,
582 y,
583 layout.to_glib_none().0,
584 index,
585 direction.into_glib(),
586 );
587 }
588 }
589
590 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
591 #[allow(deprecated)]
592 #[doc(alias = "gtk_snapshot_render_layout")]
593 fn render_layout(
594 &self,
595 context: &impl IsA<StyleContext>,
596 x: f64,
597 y: f64,
598 layout: &pango::Layout,
599 ) {
600 unsafe {
601 ffi::gtk_snapshot_render_layout(
602 self.as_ref().to_glib_none().0,
603 context.as_ref().to_glib_none().0,
604 x,
605 y,
606 layout.to_glib_none().0,
607 );
608 }
609 }
610
611 #[doc(alias = "gtk_snapshot_restore")]
612 fn restore(&self) {
613 unsafe {
614 ffi::gtk_snapshot_restore(self.as_ref().to_glib_none().0);
615 }
616 }
617
618 #[doc(alias = "gtk_snapshot_rotate")]
619 fn rotate(&self, angle: f32) {
620 unsafe {
621 ffi::gtk_snapshot_rotate(self.as_ref().to_glib_none().0, angle);
622 }
623 }
624
625 #[doc(alias = "gtk_snapshot_rotate_3d")]
626 fn rotate_3d(&self, angle: f32, axis: &graphene::Vec3) {
627 unsafe {
628 ffi::gtk_snapshot_rotate_3d(
629 self.as_ref().to_glib_none().0,
630 angle,
631 axis.to_glib_none().0,
632 );
633 }
634 }
635
636 #[doc(alias = "gtk_snapshot_save")]
637 fn save(&self) {
638 unsafe {
639 ffi::gtk_snapshot_save(self.as_ref().to_glib_none().0);
640 }
641 }
642
643 #[doc(alias = "gtk_snapshot_scale")]
644 fn scale(&self, factor_x: f32, factor_y: f32) {
645 unsafe {
646 ffi::gtk_snapshot_scale(self.as_ref().to_glib_none().0, factor_x, factor_y);
647 }
648 }
649
650 #[doc(alias = "gtk_snapshot_scale_3d")]
651 fn scale_3d(&self, factor_x: f32, factor_y: f32, factor_z: f32) {
652 unsafe {
653 ffi::gtk_snapshot_scale_3d(
654 self.as_ref().to_glib_none().0,
655 factor_x,
656 factor_y,
657 factor_z,
658 );
659 }
660 }
661
662 #[doc(alias = "gtk_snapshot_transform")]
663 fn transform(&self, transform: Option<&gsk::Transform>) {
664 unsafe {
665 ffi::gtk_snapshot_transform(self.as_ref().to_glib_none().0, transform.to_glib_none().0);
666 }
667 }
668
669 #[doc(alias = "gtk_snapshot_transform_matrix")]
670 fn transform_matrix(&self, matrix: &graphene::Matrix) {
671 unsafe {
672 ffi::gtk_snapshot_transform_matrix(
673 self.as_ref().to_glib_none().0,
674 matrix.to_glib_none().0,
675 );
676 }
677 }
678
679 #[doc(alias = "gtk_snapshot_translate")]
680 fn translate(&self, point: &graphene::Point) {
681 unsafe {
682 ffi::gtk_snapshot_translate(self.as_ref().to_glib_none().0, point.to_glib_none().0);
683 }
684 }
685
686 #[doc(alias = "gtk_snapshot_translate_3d")]
687 fn translate_3d(&self, point: &graphene::Point3D) {
688 unsafe {
689 ffi::gtk_snapshot_translate_3d(self.as_ref().to_glib_none().0, point.to_glib_none().0);
690 }
691 }
692}
693
694impl<O: IsA<Snapshot>> SnapshotExt for O {}