1 /+
2 +            Copyright 2022 – 2023 Aya Partridge
3 +          Copyright 2018 - 2022 Michael D. Parker
4 + Distributed under the Boost Software License, Version 1.0.
5 +     (See accompanying file LICENSE_1_0.txt or copy at
6 +           http://www.boost.org/LICENSE_1_0.txt)
7 +/
8 module sdl.shape;
9 
10 import bindbc.sdl.config;
11 import bindbc.sdl.codegen;
12 
13 import sdl.pixels: SDL_Color;
14 import sdl.stdinc: SDL_bool;
15 import sdl.surface: SDL_Surface;
16 import sdl.video: SDL_Window, SDL_WindowFlags;
17 
18 enum{
19 	SDL_NONSHAPEABLE_WINDOW     = -1,
20 	SDL_INVALID_SHAPE_ARGUMENT  = -2,
21 	SDL_WINDOW_LACKS_SHAPE      = -3,
22 }
23 
24 alias WindowShapeMode = int;
25 enum: WindowShapeMode{
26 	ShapeModeDefault               = 0,
27 	ShapeModeBinarizeAlpha         = 1,
28 	ShapeModeReverseBinarizeAlpha  = 2,
29 	ShapeModeColorKey              = 3,
30 	
31 	ShapeModeColourKey             = ShapeModeColorKey,
32 }
33 
34 enum SDL_SHAPEMODEALPHA(WindowShapeMode mode) = (mode == ShapeModeDefault || mode == ShapeModeBinarizeAlpha || mode == ShapeModeReverseBinarizeAlpha);
35 
36 union SDL_WindowShapeParams{
37 	ubyte binarizationCutoff;
38 	SDL_Color colorKey;
39 	alias colourKey = colorKey;
40 }
41 
42 struct SDL_WindowShapeMode{
43 	WindowShapeMode mode;
44 	SDL_WindowShapeParams parameters;
45 }
46 
47 mixin(joinFnBinds((){
48 	string[][] ret;
49 	ret ~= makeFnBinds([
50 		[q{SDL_Window*}, q{SDL_CreateShapedWindow}, q{const(char)* title, uint x, uint y, uint w, uint h, SDL_WindowFlags flags}],
51 		[q{SDL_bool}, q{SDL_IsShapedWindow}, q{const(SDL_Window)* window}],
52 		[q{int}, q{SDL_SetWindowShape}, q{SDL_Window* window, SDL_Surface* shape, SDL_WindowShapeMode* shape_mode}],
53 		[q{int}, q{SDL_GetShapedWindowMode}, q{SDL_Window* window, SDL_WindowShapeMode* shape_mode}],
54 	]);
55 	return ret;
56 }()));