aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/wnd/rootwnd.h
blob: 2b33e3240f1a1f7e426b73a5a788472c55da765f (plain) (blame)
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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
#ifndef _ROOTWND_H
#define _ROOTWND_H

#include "api_window.h"
#include <bfc/wasabi_std.h>
#include <bfc/dispatch.h>
#include <api/wnd/cursor.h>

class ifc_canvas;
class api_region;
class TimerClient;
class ifc_dependent;
class GuiObject;
class FindObjectCallback;
class Cursor;
class Accessible;
class Canvas;

// only these methods are safe across dll boundaries
// this is the pointer you find in the GWL_USERDATA of a window

class DragInterface;

class NOVTABLE RootWndI : public ifc_window 
{
protected:
  RootWndI() {}	// protect constructor

public:
  virtual OSWINDOWHANDLE getOsWindowHandle()=0;
  virtual OSMODULEHANDLE getOsModuleHandle()=0;
  virtual void performBatchProcesses()=0;
  virtual TimerClient *getTimerClient()=0;
  virtual const wchar_t *getRootWndName()=0;
  virtual const wchar_t *getId()=0;
  virtual int init(ifc_window *parent, int nochild)=0;
  virtual int isInited()=0;
  virtual int isPostOnInit()=0;

  virtual int setVirtual(int i)=0;

  virtual int isClickThrough()=0;
  virtual int onMouseMove(int x, int y)=0;
  virtual int onLeftButtonUp(int x, int y)=0;
  virtual int onRightButtonUp(int x, int y)=0;
  virtual int onLeftButtonDown(int x, int y)=0;  
  virtual int onRightButtonDown(int x, int y)=0;
  virtual int onLeftButtonDblClk(int x, int y)=0;
  virtual int onRightButtonDblClk(int x, int y)=0;

  virtual DragInterface *getDragInterface()=0;

  virtual int getCursorType(int x, int y)=0;
  virtual OSCURSORHANDLE getCustomCursor(int x, int y)=0;
  virtual ifc_window *rootWndFromPoint(POINT *pt)=0;

  virtual void getClientRect(RECT *r)=0;
  virtual void getNonClientRect(RECT *rect)=0;
  virtual void getWindowRect(RECT *r)=0;

  virtual void setVisible(int show)=0;
  virtual void setCloaked(int cloak)=0;
  virtual void onSetVisible(int show)=0;
  virtual int isVisible(int within=0)=0;

  virtual void *getInterface(GUID interface_guid)=0;

  virtual void invalidate()=0;
  virtual void invalidateRect(RECT *r)=0;
  virtual void invalidateRgn(api_region *r)=0;
  virtual void invalidateFrom(ifc_window *who)=0;
  virtual void invalidateRectFrom(RECT *r, ifc_window *who)=0;
  virtual void invalidateRgnFrom(api_region *r, ifc_window *who)=0;
  virtual void validate()=0;
  virtual void validateRect(RECT *r)=0;
  virtual void validateRgn(api_region *reg)=0;
  virtual void onChildInvalidate(api_region *r, ifc_window *who)=0;

  virtual int rootwnd_paintTree(ifc_canvas *canvas, api_region *r)=0;
  virtual int paint (Canvas *canvas, api_region *r)=0;
  virtual Canvas *getFrameBuffer()=0;

  virtual ifc_window *getParent()=0;
  virtual ifc_window *getRootParent()=0;
  virtual ifc_window *getDesktopParent()=0;
  virtual void setParent(ifc_window *parent)=0;

  virtual int onSiblingInvalidateRgn(api_region *r, ifc_window *who, int who_idx, int my_idx)=0;
  virtual int wantSiblingInvalidations()=0;

  virtual int cascadeRepaintFrom(ifc_window *who, int pack=1)=0;
  virtual int cascadeRepaintRgnFrom(api_region *reg, ifc_window *who, int pack=1)=0;
  virtual int cascadeRepaintRectFrom(RECT *r, ifc_window *who, int pack=1)=0;
  virtual int cascadeRepaint(int pack=1)=0;
  virtual int cascadeRepaintRgn(api_region *reg, int pack=1)=0;
  virtual int cascadeRepaintRect(RECT *r, int pack=1)=0;
  virtual void repaint()=0;

  virtual void setClickThrough(int ct)=0;
  virtual ifc_window *getBaseTextureWindow()=0;
  virtual void rootwnd_renderBaseTexture(ifc_canvas *c, const RECT *r, int alpha=255)=0;
#if defined (_WIN64)
  virtual int childNotify(ifc_window* child, int msg, int p1, int p2) = 0;
#else
  virtual int childNotify(ifc_window *child, int msg, intptr_t p1, intptr_t p2)=0;
#endif
  virtual int getPreferences(int what)=0;
  virtual void setPreferences(int what, int v)=0;

  virtual api_region *getRegion()=0;
  virtual int getRegionOp()=0;
  virtual void setRegionOp(int op)=0;
  virtual int isRectRgn()=0;
  virtual void setRectRgn(int rrgn)=0;
  virtual void invalidateWindowRegion()=0;
  virtual api_region *getComposedRegion()=0;
  virtual api_region *getSubtractorRegion()=0;

  virtual void setStartHidden(int sh)=0;
  virtual double getRenderRatio()=0;
  virtual void setRenderRatio(double r)=0;
  virtual void setRatioLinked(int l)=0;
  virtual int handleRatio()=0;
  virtual void resize(int x, int y, int w, int h, int wantcb=1)=0;
  virtual void move(int x, int y)=0;
  virtual void notifyDeferredMove(int x, int y)=0;

  virtual void getPosition(POINT *pt)=0;
  virtual ifc_window *getForwardWnd()=0;

  virtual void registerRootWndChild(ifc_window *child)=0;
  virtual void unregisterRootWndChild(ifc_window *child)=0;
  virtual ifc_window *findRootWndChild(int x, int y, int only_virtuals=0)=0;
  virtual ifc_window *enumRootWndChildren(int _enum)=0;
  virtual int getNumRootWndChildren()=0;

  virtual int isVirtual()=0;

  virtual void bringVirtualToFront(ifc_window *w)=0;
  virtual void bringVirtualToBack(ifc_window *w)=0;
  virtual void bringVirtualAbove(ifc_window *w, ifc_window *b)=0;
  virtual void bringVirtualBelow(ifc_window *w, ifc_window *b)=0;
  virtual int checkDoubleClick(int button, int x, int y)=0;
  
  virtual void onCancelCapture()=0;
  virtual void cancelCapture()=0;

  virtual void clientToScreen(int *x, int *y)=0; 
  virtual void screenToClient(int *x, int *y)=0; 

  virtual void setVirtualChildCapture(ifc_window *child)=0;
  virtual ifc_window *getVirtualChildCapture()=0;

  virtual int ptInRegion(int x, int y)=0;

  virtual int onActivate()=0;
  virtual void activate()=0;
  virtual int onDeactivate()=0;
  virtual int isActive()=0;
  virtual int handleTransparency()=0;
  virtual int handleDesktopAlpha()=0;

  virtual int getNotifyId()=0;
  virtual void setEnabled(int en)=0;
  virtual int isEnabled(int within=0)=0;
  virtual int onEnable(int e)=0;

  virtual int getPaintingAlpha()=0; 
  virtual void getAlpha(int *active=NULL, int *inactive=NULL)=0; 
  virtual void setAlpha(int activealpha, int inactivealpha=-1)=0; 

  virtual void setTip(const wchar_t *tip)=0;
  virtual int runModal()=0;
  virtual void endModal(int retcode)=0;
  virtual int wantAutoContextMenu()=0;
  virtual int wantActivation()=0;

  virtual void bringToFront()=0;
  virtual void bringToBack()=0;
  virtual void setFocus()=0;
  virtual int gotFocus()=0;
  virtual ifc_window *getNextVirtualFocus(ifc_window *w)=0;
  virtual void setVirtualChildFocus(ifc_window *w)=0;
  virtual void setVirtualTabOrder(ifc_window *w, int a)=0;
  virtual int getVirtualTabOrder(ifc_window *w)=0;
  virtual int wantFocus()=0;
  virtual void setTabOrder(int a)=0;
  virtual int getTabOrder()=0;
  virtual ifc_window *getTab(int what=TAB_GETCURRENT)=0;
  virtual void setAutoTabOrder()=0;
  virtual void setVirtualAutoTabOrder(ifc_window *w)=0;
  virtual ifc_window *getCurVirtualChildFocus()=0;
  virtual void onSetRootFocus(ifc_window *w)=0;

  virtual int onAcceleratorEvent(const wchar_t *name)=0;

  virtual int onChar(unsigned int c)=0;
  virtual int onKeyDown(int keycode)=0;
  virtual int onKeyUp(int keycode)=0;
  virtual int onSysKeyDown(int keyCode, int keyData)=0;
  virtual int onSysKeyUp(int keyCode, int keyData)=0;
  virtual int onKillFocus()=0;
  virtual int onGetFocus()=0;
  virtual ifc_dependent *rootwnd_getDependencyPtr()=0;
  virtual void addMinMaxEnforcer(ifc_window *w)=0;
  virtual void removeMinMaxEnforcer(ifc_window *w)=0;
  virtual ifc_window *enumMinMaxEnforcer(int n)=0;
  virtual int getNumMinMaxEnforcers()=0;
  virtual void signalMinMaxEnforcerChanged()=0;

  virtual int onAction(const wchar_t *action, const wchar_t *param=NULL, int x=-1, int y=-1, intptr_t p1=0, intptr_t p2=0, void *data=NULL, size_t datalen=0, ifc_window *source=NULL)=0;

  virtual void setRenderBaseTexture(int r)=0;
  virtual int getRenderBaseTexture()=0;
  virtual GuiObject *getGuiObject()=0; // not guaranteed non null

  virtual int getFlag(int flag)=0;
  virtual int triggerEvent(int event, intptr_t p1, intptr_t p2)=0;


  virtual int allowDeactivation()=0;
  virtual void setAllowDeactivation(int allow)=0;

  virtual ifc_window *findWindow(const wchar_t *id)=0;
  virtual ifc_window *findWindowByInterface(GUID interface_guid)=0;
  virtual ifc_window *findWindowByCallback(FindObjectCallback *cb)=0;
  virtual ifc_window *findWindowChain(FindObjectCallback *cb, ifc_window *wcaller)=0;

  virtual void focusNext()=0;
  virtual void focusPrevious()=0;

  virtual void setWindowTitle(const wchar_t *title) = 0;
  virtual ifc_window *enumTab(int i)=0;
  virtual int getNumTabs()=0;

  virtual int getFocusOnClick()=0;
  virtual void setFocusOnClick(int i)=0;

  virtual void setNoDoubleClicks(int no)=0;
  virtual void setNoLeftClicks(int no)=0;
  virtual void setNoRightClicks(int no)=0;
  virtual void setNoMouseMoves(int no)=0;
  virtual void setNoContextMenus(int no)=0;

  virtual int wantDoubleClicks()=0;
  virtual int wantLeftClicks()=0;
  virtual int wantRightClicks()=0;
  virtual int wantMouseMoves()=0;
  virtual int wantContextMenus()=0;

  virtual void setDefaultCursor(Cursor *c)=0;

  virtual Accessible *getAccessibleObject(int createifnotexist=1)=0;
  virtual int accessibility_getState()=0;

#ifdef EXPERIMENTAL_INDEPENDENT_AOT
  virtual void setAlwaysOnTop(int i)=0;
  virtual int getAlwaysOnTop()=0;
#endif

#ifndef WA3COMPATIBILITY
  virtual void setDropTarget(void *dt)=0;
  virtual void *getDropTarget()=0;
#endif

  virtual int isMinimized()=0;
  virtual void maximize(int axis=MAXIMIZE_WIDTH|MAXIMIZE_HEIGHT)=0;
  virtual void restore(int what=RESTORE_X|RESTORE_Y|RESTORE_WIDTH|RESTORE_HEIGHT)=0;
  virtual int getRestoredRect(RECT *r)=0;

protected:
  RECVS_DISPATCH;
};

#endif