summaryrefslogtreecommitdiffhomepage
path: root/Public/Developer/System.Core/Headers/Window.h
blob: 831c87bb2dc87a97a608b753748160048444b77c (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
/* -------------------------------------------

    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;
  WordType menuPort;
  WordType parentPort;
  DCRef windowDeviceContext;
} WindowPort;

typedef UInt32Type ColorRef;

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

const ColorRef kRgbRed = 0x000000FF;
const ColorRef kRgbGreen = 0x0000FF00;
const ColorRef kRgbBlue = 0x00FF0000;
const ColorRef kRgbBlack = 0x00000000;
const ColorRef kRgbWhite = 0xFFFFFFFF;

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

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

#define kGraphicsKindWindow   0
#define kGraphicsKindDialog   1
#define kGraphicsKindMenu     2
#define kGraphicsKindButton   3
#define kGraphicsKindLabel    4
#define kGraphicsKindDropdown 5
#define kGraphicsKindIcon     6
#define kGraphicsKindRadio    7
#define kGraphicsKindCheck    7

typedef QWordType ControlRef;

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

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

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

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

/// @brief Make control visible.
/// @param id 
/// @param visible 
/// @return 
CA_EXTERN_C Int32Type WmMakeControlVisible(const ControlRef 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 char* 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 char* 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(const WindowPort* id, WmPoint where);

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