summaryrefslogtreecommitdiffhomepage
path: root/Public/Developer/System.Core/Headers/Window.h
blob: 846d5cff79f52180c3b6b88cdc381df89815c42a (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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/* -------------------------------------------

    Copyright Mahrouss Logic

------------------------------------------- */

#pragma once

#include <System.Core/Headers/Defines.h>

/*************************************************************
 * 
 * File: Window.hxx 
 * Purpose: Window Manager API for NewOS.
 * Date: 3/26/24
 * 
 * Copyright Mahrouss Logic, all rights reserved.
 * 
 *************************************************************/

struct _WmPoint;
struct _WindowPort;

#ifdef __SINGLE_PRECISION__
typedef float PositionType;
#else
typedef double PositionType;
#endif

typedef QWordType DCRef;

/// @brief A point, can represent the size, position of a window.
typedef struct _WmPoint {
  PositionType X, Y;
} WmPoint;

/// @brief Window port type, can be used to control the window.
typedef struct _WindowPort {
  WordType windowPort;
  WordType windowKind;
  BooleanType windowVisible;
  BooleanType windowMaximized;
  BooleanType windowMinimized;
  BooleanType windowMoving;
  BooleanType windowDisableClose;
  BooleanType windowDisableMinimize;
  WmPoint windowPosition;
  WmPoint windowSize;
  BooleanType windowInvalidate;
  DWordType windowClearColor;
  struct _WindowPort* menuPort;
  struct _WindowPort* parentPort;
} WindowPort;

typedef struct _ControlPort {
  WordType controlPort;
  WordType controlKind;
  BooleanType controlVisible;
  BooleanType controlMoving;
  WmPoint controlPosition;
  WindowPort* parentPort;
} ControlPort;

typedef UInt32Type ColorRef;

/***********************************************************************************/
/// Color utils.
/***********************************************************************************/

CA_EXTERN_C const ColorRef kRgbRed;
CA_EXTERN_C const ColorRef kRgbGreen;
CA_EXTERN_C const ColorRef kRgbBlue;
CA_EXTERN_C const ColorRef kRgbBlack;
CA_EXTERN_C const ColorRef kRgbWhite;

/***********************************************************************************/
/// Color macro.
/***********************************************************************************/

#define WmMakeColorRef(R, G, B) (ColorRef)(0x##R##G##B)

#define kControlKindWindow   0
#define kControlKindDialog   1
#define kControlKindMenu     2
#define kControlKindButton   3
#define kControlKindLabel    4
#define kControlKindDropdown 5
#define kControlKindIcon     6
#define kControlKindRadio    7
#define kControlKindCheck    7

/// @brief Creates a new control
/// @param id the control rsrc fork.
/// @return 
CA_EXTERN_C ControlPort* WmCreateControl(DWordType id);

/// @brief Releases the control
/// @param id the control ref.
/// @return 
CA_EXTERN_C VoidType WmReleaseControl(ControlPort* id);

/// @brief Moves a control inside a ControlPort.
/// @param id the control ref.
/// @param where where to move at.
/// @return 
CA_EXTERN_C Int32Type WmSetControlPosition(ControlPort* id, WmPoint where);

/// @brief Enable control.
/// @param id 
/// @param enabled 
/// @return 
CA_EXTERN_C Int32Type WmSetControlEnabled(ControlPort* id, BooleanType enabled);

/// @brief Make control visible.
/// @param id 
/// @param visible 
/// @return 
CA_EXTERN_C Int32Type WmMakeControlVisible(ControlPort* id, BooleanType visible);

/// @brief Creates a new window.
/// @param name the window name
/// @param rsrcId the window fork rsrc id.
/// @return the window graphics port.
CA_EXTERN_C WindowPort* WmCreateWindow(const CharacterTypeUTF8* name, const DWordType rsrcId);

/// @brief Creates a new menu
/// @param name the menu's name
/// @param rsrcId the menu fork rsrc id.
/// @return the menu graphics port.
CA_EXTERN_C WindowPort* WmCreateMenu(const CharacterTypeUTF8* name, const DWordType rsrcId);

/// @brief Releases the window.
/// @param port the window port.
/// @return void
CA_EXTERN_C VoidType WmReleaseWindow(WindowPort* port);

/// @brief Releases the menu
/// @param port the menu port.
/// @return void
CA_EXTERN_C VoidType WmReleaseMenu(WindowPort* port);

/// @brief Moves a window on the desktop. (menu arent movable, will return kErrIncompatible is menu is provided.)
/// @param id the gfx port.
/// @param where to move.
/// @return error code.
CA_EXTERN_C Int32Type WmMoveWindow(WindowPort* id, WmPoint where);

enum {
  kWmErrIncompatible = 0x74,
  kWmErrOutOfMemory,
  kWmErrInvalidArg,
  kWmErrNotImplemented,
};