-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathultralight_window.cpp
122 lines (103 loc) · 3.39 KB
/
ultralight_window.cpp
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
#include "ultralight_hb.h"
#include "hb_smartApi.h"
#include <AppCore/Window.h>
using namespace ultralight;
DEFINE_GETCLASSID(WINDOW)
/*
DATA bOnClose
DATA bOnResize
CONSTRUCTOR Create(monitor, width, height, fullscreen, window_flags)
ACCESS width()
ACCESS height()
ACCESS is_fullscreen()
ACCESS scale()
ASSIGN title()
ASSIGN cursor()
METHOD Close()
METHOD DeviceToPixels(val)
METHOD PixelsToDevice(val)
//METHOD DrawSurface(x, y, surface)
*/
Monitor* hb_parMonitor(int);
HB_FUNC( ULTRALIGHT_WINDOW_CREATE ) {
Monitor *mon = hb_parMonitor(1);
RefPtr<Window> window = Window::Create(mon,hb_parni(2), hb_parni(3),hb_parldef(4,0)!=0,hb_parnidef(5,0));
initUltralightObj(window.get(), GETCLASSID(WINDOW));
}
HB_FUNC( ULTRALIGHT_WINDOW_WIDTH ) {
Window* window = (Window*)hb_selfUltralight();
hb_retni(window->width());
}
HB_FUNC( ULTRALIGHT_WINDOW_HEIGHT ) {
Window* window = (Window*)hb_selfUltralight();
hb_retni(window->height());
}
HB_FUNC( ULTRALIGHT_WINDOW_IS_FULLSCREEN ) {
Window* window = (Window*)hb_selfUltralight();
hb_retl(window->is_fullscreen()? HB_TRUE : HB_FALSE);
}
HB_FUNC( ULTRALIGHT_WINDOW_SCALE ) {
Window* window = (Window*)hb_selfUltralight();
hb_retnd(window->scale());
}
HB_FUNC( ULTRALIGHT_WINDOW__TITLE ) {
Window* window = (Window*)hb_selfUltralight();
window->SetTitle(hb_parc(1));
hb_ret();
}
HB_FUNC( ULTRALIGHT_WINDOW__CURSOR ) {
Window* window = (Window*)hb_selfUltralight();
//#ifdef _WIN32
// window->SetCursor((Cursor)0);
//#endif
window->SetCursor((Cursor)hb_parni(1));
hb_ret();
}
HB_FUNC( ULTRALIGHT_WINDOW_CLOSE ) {
Window* window = (Window*)hb_selfUltralight();
window->Close();
hb_ret();
}
HB_FUNC( ULTRALIGHT_WINDOW_DEVICETOPIXELS ) {
Window* window = (Window*)hb_selfUltralight();
hb_retni(window->DeviceToPixels(hb_parni(1)));
}
HB_FUNC( ULTRALIGHT_WINDOW_PIXELSTODEVICE ) {
Window* window = (Window*)hb_selfUltralight();
hb_retni(window->PixelsToDevice(hb_parni(1)));
}
class HBWindowListener : public WindowListener {
public:
PHB_ITEM pOnResize;
PHB_ITEM pOnClose;
HBWindowListener() : pOnClose(0), pOnResize(0) { }
void OnClose() {
if(!pOnClose) return;
hb_evalBlock(pOnClose, NULL );
}
void OnResize(uint32_t width, uint32_t height) {
if(!pOnResize) return;
hb_evalBlock(pOnResize, SmartItem((int)width), SmartItem((int)height), NULL );
}
};
void ManageWindowCodeBlockGetSet(PHB_ITEM HBWindowListener::*pOnMember) {
Window* window = (Window*)hb_selfUltralight();
HBWindowListener* listener = (HBWindowListener*)window->listener();
if(hb_pcount()==0) {
if(listener) {
hb_itemCopy(hb_stackReturnItem(), listener->*pOnMember);
return;
}
} else {
if(HB_ISEVALITEM(1)) {
if(!listener) {
listener = new HBWindowListener();
window->set_listener(listener);
}
listener->*pOnMember = hb_itemNew(hb_param(1, HB_IT_EVALITEM));
}
}
hb_ret();
}
HB_FUNC( ULTRALIGHT_WINDOW_BONCLOSE ) { ManageWindowCodeBlockGetSet(&HBWindowListener::pOnClose); }
HB_FUNC( ULTRALIGHT_WINDOW_BONRESIZE ) { ManageWindowCodeBlockGetSet(&HBWindowListener::pOnResize); }