summaryrefslogtreecommitdiff
path: root/gsk/vulkan/gskvulkanclipprivate.h
blob: 697671ace930f8dc9a2d3bb5adf7956864162657 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#pragma once

#include <gdk/gdk.h>
#include <graphene.h>
#include <gsk/gskroundedrect.h>

G_BEGIN_DECLS

typedef enum {
  /* The whole area is clipped, no drawing is necessary.
   * This can't be handled by return values because for return
   * values we return if clips could even be computed.
   */
  GSK_VULKAN_CLIP_ALL_CLIPPED,
  /* No clipping is necessary, but the clip rect is set
   * to the actual bounds of the underlying framebuffer
   */
  GSK_VULKAN_CLIP_NONE,
  /* The clip is a rectangular area */
  GSK_VULKAN_CLIP_RECT,
  /* The clip is a rounded rectangle, and for every corner
   * corner.width == corner.height is true
   */
  GSK_VULKAN_CLIP_ROUNDED_CIRCULAR,
  /* The clip is a rounded rectangle */
  GSK_VULKAN_CLIP_ROUNDED
} GskVulkanClipComplexity;

typedef struct _GskVulkanClip GskVulkanClip;

struct _GskVulkanClip
{
  GskVulkanClipComplexity type;
  GskRoundedRect          rect;
};

void                    gsk_vulkan_clip_init_empty                      (GskVulkanClip          *clip,
                                                                         const graphene_rect_t  *rect);
void                    gsk_vulkan_clip_init_rect                       (GskVulkanClip          *clip,
                                                                         const graphene_rect_t  *rect);

gboolean                gsk_vulkan_clip_intersect_rect                  (GskVulkanClip          *dest,
                                                                         const GskVulkanClip    *src,
                                                                         const graphene_rect_t  *rect) G_GNUC_WARN_UNUSED_RESULT;
gboolean                gsk_vulkan_clip_intersect_rounded_rect          (GskVulkanClip          *dest,
                                                                         const GskVulkanClip    *src,
                                                                         const GskRoundedRect   *rounded) G_GNUC_WARN_UNUSED_RESULT;
void                    gsk_vulkan_clip_scale                           (GskVulkanClip          *dest,
                                                                         const GskVulkanClip    *src,
                                                                         float                   scale_x,
                                                                         float                   scale_y);
gboolean                gsk_vulkan_clip_transform                       (GskVulkanClip          *dest,
                                                                         const GskVulkanClip    *src,
                                                                         GskTransform           *transform,
                                                                         const graphene_rect_t  *viewport) G_GNUC_WARN_UNUSED_RESULT;

gboolean                gsk_vulkan_clip_contains_rect                   (const GskVulkanClip    *self,
                                                                         const graphene_rect_t  *rect) G_GNUC_WARN_UNUSED_RESULT;

G_END_DECLS