bare-gtk 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CMakeLists.txt +16 -2
- package/README.md +35 -1
- package/binding.c +350 -1
- package/index.d.ts +65 -0
- package/index.js +32 -0
- package/lib/adjustment.d.ts +21 -0
- package/lib/adjustment.h +112 -0
- package/lib/adjustment.js +24 -0
- package/lib/bridging.h +347 -0
- package/lib/clipboard.d.ts +22 -0
- package/lib/clipboard.h +176 -0
- package/lib/clipboard.js +18 -0
- package/lib/constants.d.ts +40 -0
- package/lib/constants.js +51 -0
- package/lib/css-provider.d.ts +13 -0
- package/lib/css-provider.h +56 -0
- package/lib/css-provider.js +14 -0
- package/lib/cursor.d.ts +35 -0
- package/lib/cursor.h +220 -0
- package/lib/cursor.js +45 -0
- package/lib/device.d.ts +13 -0
- package/lib/device.h +35 -0
- package/lib/device.js +8 -0
- package/lib/dialog.d.ts +41 -0
- package/lib/dialog.js +37 -0
- package/lib/display.d.ts +25 -0
- package/lib/display.h +86 -0
- package/lib/display.js +23 -0
- package/lib/editable.h +160 -0
- package/lib/entry.d.ts +93 -0
- package/lib/entry.h +340 -0
- package/lib/entry.js +118 -0
- package/lib/event-controller-focus.d.ts +17 -0
- package/lib/event-controller-focus.h +55 -0
- package/lib/event-controller-focus.js +13 -0
- package/lib/event-controller-motion.d.ts +18 -0
- package/lib/event-controller-motion.h +66 -0
- package/lib/event-controller-motion.js +14 -0
- package/lib/event-controller.d.ts +17 -0
- package/lib/event-controller.h +103 -0
- package/lib/event-controller.js +22 -0
- package/lib/events.js +23 -0
- package/lib/fixed.d.ts +10 -0
- package/lib/fixed.h +28 -0
- package/lib/fixed.js +8 -0
- package/lib/frame-fixed.d.ts +10 -0
- package/lib/frame-fixed.js +12 -0
- package/lib/frame-layout-child.d.ts +17 -0
- package/lib/frame-layout-child.js +16 -0
- package/lib/frame-layout.d.ts +27 -0
- package/lib/frame-layout.h +291 -0
- package/lib/frame-layout.js +19 -0
- package/lib/gesture-click.d.ts +19 -0
- package/lib/gesture-click.h +66 -0
- package/lib/gesture-click.js +14 -0
- package/lib/gesture-drag.d.ts +25 -0
- package/lib/gesture-drag.h +165 -0
- package/lib/gesture-drag.js +23 -0
- package/lib/gesture-single.d.ts +13 -0
- package/lib/gesture-single.js +12 -0
- package/lib/gesture.d.ts +13 -0
- package/lib/gesture.h +73 -0
- package/lib/gesture.js +8 -0
- package/lib/handle.d.ts +5 -0
- package/lib/handle.js +6 -0
- package/lib/label.d.ts +36 -0
- package/lib/label.h +269 -0
- package/lib/label.js +78 -0
- package/lib/layout-child.d.ts +13 -0
- package/lib/layout-child.h +35 -0
- package/lib/layout-child.js +10 -0
- package/lib/layout-manager.d.ts +15 -0
- package/lib/layout-manager.h +42 -0
- package/lib/layout-manager.js +15 -0
- package/lib/message-dialog.d.ts +26 -0
- package/lib/message-dialog.h +190 -0
- package/lib/message-dialog.js +22 -0
- package/lib/monitor.d.ts +32 -0
- package/lib/monitor.h +143 -0
- package/lib/monitor.js +40 -0
- package/lib/native.h +31 -0
- package/lib/object.d.ts +18 -0
- package/lib/object.js +38 -0
- package/lib/paintable.d.ts +10 -0
- package/lib/paintable.js +3 -0
- package/lib/picture.d.ts +22 -0
- package/lib/picture.h +127 -0
- package/lib/picture.js +35 -0
- package/lib/reachable.js +11 -0
- package/lib/runtime.c +21 -4
- package/lib/scrolled-window.d.ts +22 -0
- package/lib/scrolled-window.h +142 -0
- package/lib/scrolled-window.js +37 -0
- package/lib/settings.d.ts +25 -0
- package/lib/settings.h +163 -0
- package/lib/settings.js +34 -0
- package/lib/spinner.d.ts +12 -0
- package/lib/spinner.h +61 -0
- package/lib/spinner.js +22 -0
- package/lib/style-context.d.ts +15 -0
- package/lib/style-context.h +67 -0
- package/lib/style-context.js +9 -0
- package/lib/surface.d.ts +19 -0
- package/lib/surface.h +61 -0
- package/lib/surface.js +22 -0
- package/lib/switch.d.ts +19 -0
- package/lib/switch.h +114 -0
- package/lib/switch.js +30 -0
- package/lib/text-buffer.d.ts +31 -0
- package/lib/text-buffer.h +246 -0
- package/lib/text-buffer.js +33 -0
- package/lib/text-view.d.ts +39 -0
- package/lib/text-view.h +247 -0
- package/lib/text-view.js +63 -0
- package/lib/text.d.ts +18 -0
- package/lib/text.h +189 -0
- package/lib/text.js +31 -0
- package/lib/texture.d.ts +20 -0
- package/lib/texture.h +100 -0
- package/lib/texture.js +17 -0
- package/lib/viewport.d.ts +22 -0
- package/lib/viewport.h +151 -0
- package/lib/viewport.js +38 -0
- package/lib/widget.d.ts +102 -0
- package/lib/widget.h +695 -17
- package/lib/widget.js +176 -11
- package/lib/window.d.ts +31 -0
- package/lib/window.h +142 -61
- package/lib/window.js +32 -11
- package/lib/wrap.js +7 -0
- package/package.json +12 -3
- package/prebuilds/linux-arm64/bare +2 -2
- package/prebuilds/linux-arm64/bare-gtk.bare +0 -0
- package/prebuilds/linux-x64/bare +2 -2
- package/prebuilds/linux-x64/bare-gtk.bare +0 -0
package/lib/widget.js
CHANGED
|
@@ -1,26 +1,191 @@
|
|
|
1
|
-
const EventEmitter = require('bare-events')
|
|
2
1
|
const binding = require('../binding')
|
|
2
|
+
const GObject = require('./object')
|
|
3
|
+
const wrap = require('./wrap')
|
|
4
|
+
const { hold, drop } = require('./reachable')
|
|
5
|
+
const GDKCursor = require('./cursor')
|
|
3
6
|
|
|
4
|
-
module.exports = class GTKWidget extends
|
|
5
|
-
|
|
6
|
-
|
|
7
|
+
module.exports = exports = class GTKWidget extends GObject {
|
|
8
|
+
get visible() {
|
|
9
|
+
return binding.widgetVisible(this._tag)
|
|
10
|
+
}
|
|
7
11
|
|
|
8
|
-
|
|
12
|
+
set visible(value) {
|
|
13
|
+
binding.widgetVisible(this._tag, value)
|
|
9
14
|
}
|
|
10
15
|
|
|
11
|
-
get
|
|
12
|
-
return binding.
|
|
16
|
+
get opacity() {
|
|
17
|
+
return binding.widgetOpacity(this._tag)
|
|
13
18
|
}
|
|
14
19
|
|
|
15
|
-
set
|
|
16
|
-
binding.
|
|
20
|
+
set opacity(value) {
|
|
21
|
+
binding.widgetOpacity(this._tag, value)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
get overflow() {
|
|
25
|
+
return binding.widgetOverflow(this._tag)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
set overflow(value) {
|
|
29
|
+
binding.widgetOverflow(this._tag, value)
|
|
17
30
|
}
|
|
18
31
|
|
|
19
32
|
get sizeRequest() {
|
|
20
|
-
return binding.widgetSizeRequest(this.
|
|
33
|
+
return binding.widgetSizeRequest(this._tag)
|
|
21
34
|
}
|
|
22
35
|
|
|
23
36
|
set sizeRequest([width, height]) {
|
|
24
|
-
binding.widgetSizeRequest(this.
|
|
37
|
+
binding.widgetSizeRequest(this._tag, width, height)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
get scaleFactor() {
|
|
41
|
+
return binding.widgetScaleFactor(this._tag)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
get native() {
|
|
45
|
+
return wrap(GTKWidget, binding.widgetNative(this._tag))
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
get parent() {
|
|
49
|
+
return wrap(GTKWidget, binding.widgetParent(this._tag))
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
get firstChild() {
|
|
53
|
+
return wrap(GTKWidget, binding.widgetFirstChild(this._tag))
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
get lastChild() {
|
|
57
|
+
return wrap(GTKWidget, binding.widgetLastChild(this._tag))
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
get nextSibling() {
|
|
61
|
+
return wrap(GTKWidget, binding.widgetNextSibling(this._tag))
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
get prevSibling() {
|
|
65
|
+
return wrap(GTKWidget, binding.widgetPrevSibling(this._tag))
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
get layoutManager() {
|
|
69
|
+
return wrap(GObject, binding.widgetLayoutManager(this._tag))
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
set layoutManager(manager) {
|
|
73
|
+
drop(this, this.layoutManager)
|
|
74
|
+
|
|
75
|
+
binding.widgetLayoutManager(this._tag, manager === null ? null : manager._tag)
|
|
76
|
+
|
|
77
|
+
hold(this, manager)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
get width() {
|
|
81
|
+
return binding.widgetWidth(this._tag)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
get height() {
|
|
85
|
+
return binding.widgetHeight(this._tag)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
grabFocus() {
|
|
89
|
+
return binding.widgetGrabFocus(this._tag)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
setRootFocus(widget) {
|
|
93
|
+
binding.widgetSetRootFocus(this._tag, widget === null ? null : widget._tag)
|
|
94
|
+
|
|
95
|
+
return this
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
addCssClass(name) {
|
|
99
|
+
binding.widgetAddCssClass(this._tag, name)
|
|
100
|
+
|
|
101
|
+
return this
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
removeCssClass(name) {
|
|
105
|
+
binding.widgetRemoveCssClass(this._tag, name)
|
|
106
|
+
|
|
107
|
+
return this
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
hasCssClass(name) {
|
|
111
|
+
return binding.widgetHasCssClass(this._tag, name)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
get canTarget() {
|
|
115
|
+
return binding.widgetCanTarget(this._tag)
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
set canTarget(value) {
|
|
119
|
+
binding.widgetCanTarget(this._tag, value)
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
get cursor() {
|
|
123
|
+
return wrap(GDKCursor, binding.widgetCursor(this._tag))
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
set cursor(value) {
|
|
127
|
+
binding.widgetCursor(this._tag, value === null ? null : value._tag)
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
setCursorFromName(name) {
|
|
131
|
+
binding.widgetSetCursorFromName(this._tag, name)
|
|
132
|
+
|
|
133
|
+
return this
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
get sensitive() {
|
|
137
|
+
return binding.widgetSensitive(this._tag)
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
set sensitive(value) {
|
|
141
|
+
binding.widgetSensitive(this._tag, value)
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
measure(orientation, forSize = -1) {
|
|
145
|
+
return binding.widgetMeasure(this._tag, orientation, forSize)
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
computeBounds(target) {
|
|
149
|
+
return binding.widgetComputeBounds(this._tag, target._tag)
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
insertAfter(parent, previousSibling = null) {
|
|
153
|
+
binding.widgetInsertAfter(
|
|
154
|
+
this._tag,
|
|
155
|
+
parent._tag,
|
|
156
|
+
previousSibling === null ? null : previousSibling._tag
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
return hold(parent, this)
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
insertBefore(parent, nextSibling = null) {
|
|
163
|
+
binding.widgetInsertBefore(
|
|
164
|
+
this._tag,
|
|
165
|
+
parent._tag,
|
|
166
|
+
nextSibling === null ? null : nextSibling._tag
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
return hold(parent, this)
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
addController(controller) {
|
|
173
|
+
binding.widgetAddController(this._tag, controller._tag)
|
|
174
|
+
|
|
175
|
+
return hold(this, controller)
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
removeController(controller) {
|
|
179
|
+
binding.widgetRemoveController(this._tag, controller._tag)
|
|
180
|
+
|
|
181
|
+
return drop(this, controller)
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
unparent() {
|
|
185
|
+
const parent = this.parent
|
|
186
|
+
|
|
187
|
+
binding.widgetUnparent(this._tag)
|
|
188
|
+
|
|
189
|
+
return parent === null ? this : drop(parent, this)
|
|
25
190
|
}
|
|
26
191
|
}
|
package/lib/window.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import GTKWidget = require('./widget')
|
|
2
|
+
import GDKSurface = require('./surface')
|
|
3
|
+
|
|
4
|
+
/** A top level window, as a `GtkWindow`. */
|
|
5
|
+
interface GTKWindow extends GTKWidget<GTKWindow.Events> {
|
|
6
|
+
/** The surface the window draws on, or `null` before it is shown. */
|
|
7
|
+
readonly surface: GDKSurface | null
|
|
8
|
+
|
|
9
|
+
title: string | null
|
|
10
|
+
|
|
11
|
+
/** The size the window opens at, as `[width, height]`. */
|
|
12
|
+
get defaultSize(): [width: number, height: number]
|
|
13
|
+
set defaultSize(size: [width: number, height: number])
|
|
14
|
+
|
|
15
|
+
/** The one widget the window holds, or `null`. */
|
|
16
|
+
child: GTKWidget | null
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
declare class GTKWindow {
|
|
20
|
+
/** Create a hidden window. Set `visible` to show it. */
|
|
21
|
+
constructor()
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
declare namespace GTKWindow {
|
|
25
|
+
export interface Events {
|
|
26
|
+
/** The user asked to close the window. */
|
|
27
|
+
'close-request': []
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export = GTKWindow
|
package/lib/window.h
CHANGED
|
@@ -1,16 +1,27 @@
|
|
|
1
|
+
#ifndef BARE_GTK_WINDOW_H
|
|
2
|
+
#define BARE_GTK_WINDOW_H
|
|
3
|
+
|
|
1
4
|
#include <assert.h>
|
|
2
|
-
#include <bare.h>
|
|
3
5
|
#include <js.h>
|
|
6
|
+
#include <utf.h>
|
|
4
7
|
|
|
5
8
|
#include <gtk/gtk.h>
|
|
6
9
|
|
|
7
|
-
|
|
10
|
+
#include "bridging.h"
|
|
11
|
+
|
|
12
|
+
extern GtkApplication *bare_gtk_app __attribute__((weak));
|
|
13
|
+
|
|
14
|
+
enum {
|
|
15
|
+
bare_gtk_window_event_close_request = 1 << 0,
|
|
16
|
+
};
|
|
8
17
|
|
|
9
18
|
typedef struct {
|
|
10
19
|
GtkWindow handle;
|
|
11
20
|
|
|
12
|
-
|
|
13
|
-
|
|
21
|
+
bare_gtk_state_t *state;
|
|
22
|
+
|
|
23
|
+
uint32_t events;
|
|
24
|
+
gulong on_close_request;
|
|
14
25
|
} BareWindow;
|
|
15
26
|
|
|
16
27
|
typedef struct {
|
|
@@ -22,63 +33,84 @@ G_DEFINE_TYPE(BareWindow, bare_window, GTK_TYPE_WINDOW)
|
|
|
22
33
|
static void
|
|
23
34
|
bare_window_init(BareWindow *self) {}
|
|
24
35
|
|
|
36
|
+
static void
|
|
37
|
+
bare_window_class_init(BareWindowClass *class) {}
|
|
38
|
+
|
|
25
39
|
BareWindow *
|
|
26
40
|
bare_window_new(void) {
|
|
27
41
|
return g_object_new(bare_window_get_type(), NULL);
|
|
28
42
|
}
|
|
29
43
|
|
|
30
|
-
static
|
|
31
|
-
|
|
32
|
-
|
|
44
|
+
static gboolean
|
|
45
|
+
bare_gtk_window__on_close_request(GtkWindow *window, gpointer data) {
|
|
46
|
+
BareWindow *self = (BareWindow *) window;
|
|
33
47
|
|
|
34
|
-
|
|
48
|
+
bare_gtk__emit(self->state, window, "close-request", 0, NULL);
|
|
35
49
|
|
|
36
|
-
|
|
50
|
+
return GDK_EVENT_PROPAGATE;
|
|
51
|
+
}
|
|
37
52
|
|
|
38
|
-
|
|
53
|
+
static js_value_t *
|
|
54
|
+
bare_gtk_window_init(js_env_t *env, js_callback_info_t *info) {
|
|
55
|
+
int err;
|
|
56
|
+
|
|
57
|
+
bare_gtk_state_t *state;
|
|
58
|
+
err = js_get_callback_info(env, info, NULL, NULL, NULL, (void **) &state);
|
|
39
59
|
assert(err == 0);
|
|
40
60
|
|
|
41
|
-
|
|
42
|
-
}
|
|
61
|
+
BareWindow *window = bare_window_new();
|
|
43
62
|
|
|
44
|
-
|
|
45
|
-
bare_window_class_init(BareWindowClass *class) {
|
|
46
|
-
GObjectClass *object_class = G_OBJECT_CLASS(class);
|
|
63
|
+
window->state = state;
|
|
47
64
|
|
|
48
|
-
|
|
49
|
-
}
|
|
65
|
+
if (&bare_gtk_app && bare_gtk_app) gtk_application_add_window(bare_gtk_app, GTK_WINDOW(window));
|
|
50
66
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
67
|
+
js_value_t *result;
|
|
68
|
+
err = js_create_uint32(env, bare_gobject_tag(state->registry, window), &result);
|
|
69
|
+
assert(err == 0);
|
|
70
|
+
|
|
71
|
+
return result;
|
|
54
72
|
}
|
|
55
73
|
|
|
56
74
|
static js_value_t *
|
|
57
|
-
|
|
75
|
+
bare_gtk_window_title(js_env_t *env, js_callback_info_t *info) {
|
|
58
76
|
int err;
|
|
59
77
|
|
|
60
|
-
size_t argc =
|
|
61
|
-
js_value_t *argv[
|
|
78
|
+
size_t argc = 2;
|
|
79
|
+
js_value_t *argv[2];
|
|
62
80
|
|
|
63
|
-
|
|
81
|
+
bare_gtk_state_t *state;
|
|
82
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
|
|
64
83
|
assert(err == 0);
|
|
65
84
|
|
|
66
|
-
assert(argc == 1);
|
|
85
|
+
assert(argc == 1 || argc == 2);
|
|
67
86
|
|
|
68
|
-
|
|
87
|
+
GtkWindow *window;
|
|
88
|
+
err = bare_gobject_read_tag(env, state->registry, argv[0], "window", (gpointer *) &window);
|
|
89
|
+
if (err < 0) return NULL;
|
|
69
90
|
|
|
70
|
-
|
|
91
|
+
js_value_t *result = NULL;
|
|
71
92
|
|
|
72
|
-
|
|
93
|
+
if (argc == 1) {
|
|
94
|
+
const char *title = gtk_window_get_title(window);
|
|
73
95
|
|
|
74
|
-
|
|
75
|
-
|
|
96
|
+
if (title) {
|
|
97
|
+
err = js_create_string_utf8(env, (const utf8_t *) title, (size_t) -1, &result);
|
|
98
|
+
assert(err == 0);
|
|
99
|
+
} else {
|
|
100
|
+
err = js_get_null(env, &result);
|
|
101
|
+
assert(err == 0);
|
|
102
|
+
}
|
|
103
|
+
} else {
|
|
104
|
+
char *title;
|
|
105
|
+
err = bare_gtk__read_string_or_null(env, argv[1], "title", &title);
|
|
106
|
+
if (err < 0) return NULL;
|
|
76
107
|
|
|
77
|
-
|
|
78
|
-
err = js_create_external(env, window, bare_gtk_window__on_release, NULL, &handle);
|
|
79
|
-
assert(err == 0);
|
|
108
|
+
gtk_window_set_title(window, title);
|
|
80
109
|
|
|
81
|
-
|
|
110
|
+
g_free(title);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return result;
|
|
82
114
|
}
|
|
83
115
|
|
|
84
116
|
static js_value_t *
|
|
@@ -88,20 +120,21 @@ bare_gtk_window_default_size(js_env_t *env, js_callback_info_t *info) {
|
|
|
88
120
|
size_t argc = 3;
|
|
89
121
|
js_value_t *argv[3];
|
|
90
122
|
|
|
91
|
-
|
|
123
|
+
bare_gtk_state_t *state;
|
|
124
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
|
|
92
125
|
assert(err == 0);
|
|
93
126
|
|
|
94
127
|
assert(argc == 1 || argc == 3);
|
|
95
128
|
|
|
96
|
-
|
|
97
|
-
err =
|
|
98
|
-
|
|
129
|
+
GtkWindow *window;
|
|
130
|
+
err = bare_gobject_read_tag(env, state->registry, argv[0], "window", (gpointer *) &window);
|
|
131
|
+
if (err < 0) return NULL;
|
|
99
132
|
|
|
100
133
|
js_value_t *result = NULL;
|
|
101
134
|
|
|
102
135
|
if (argc == 1) {
|
|
103
136
|
int width, height;
|
|
104
|
-
gtk_window_get_default_size(
|
|
137
|
+
gtk_window_get_default_size(window, &width, &height);
|
|
105
138
|
|
|
106
139
|
err = js_create_array_with_length(env, 2, &result);
|
|
107
140
|
assert(err == 0);
|
|
@@ -115,18 +148,18 @@ bare_gtk_window_default_size(js_env_t *env, js_callback_info_t *info) {
|
|
|
115
148
|
assert(err == 0); \
|
|
116
149
|
}
|
|
117
150
|
V(0, width)
|
|
118
|
-
V(1,
|
|
151
|
+
V(1, height)
|
|
119
152
|
#undef V
|
|
120
153
|
} else {
|
|
121
154
|
int32_t width;
|
|
122
|
-
err =
|
|
123
|
-
|
|
155
|
+
err = bare_gtk__read_int32(env, argv[1], "width", &width);
|
|
156
|
+
if (err < 0) return NULL;
|
|
124
157
|
|
|
125
158
|
int32_t height;
|
|
126
|
-
err =
|
|
127
|
-
|
|
159
|
+
err = bare_gtk__read_int32(env, argv[2], "height", &height);
|
|
160
|
+
if (err < 0) return NULL;
|
|
128
161
|
|
|
129
|
-
gtk_window_set_default_size(
|
|
162
|
+
gtk_window_set_default_size(window, width, height);
|
|
130
163
|
}
|
|
131
164
|
|
|
132
165
|
return result;
|
|
@@ -139,34 +172,82 @@ bare_gtk_window_child(js_env_t *env, js_callback_info_t *info) {
|
|
|
139
172
|
size_t argc = 2;
|
|
140
173
|
js_value_t *argv[2];
|
|
141
174
|
|
|
142
|
-
|
|
175
|
+
bare_gtk_state_t *state;
|
|
176
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
|
|
143
177
|
assert(err == 0);
|
|
144
178
|
|
|
145
179
|
assert(argc == 1 || argc == 2);
|
|
146
180
|
|
|
147
|
-
|
|
148
|
-
err =
|
|
149
|
-
|
|
181
|
+
GtkWindow *window;
|
|
182
|
+
err = bare_gobject_read_tag(env, state->registry, argv[0], "window", (gpointer *) &window);
|
|
183
|
+
if (err < 0) return NULL;
|
|
150
184
|
|
|
151
185
|
js_value_t *result = NULL;
|
|
152
186
|
|
|
153
187
|
if (argc == 1) {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
if (handle) {
|
|
157
|
-
err = js_create_external(env, handle, NULL, NULL, &result);
|
|
158
|
-
assert(err == 0);
|
|
159
|
-
} else {
|
|
160
|
-
err = js_get_null(env, &result);
|
|
161
|
-
assert(err == 0);
|
|
162
|
-
}
|
|
188
|
+
result = bare_gtk__create_tag(env, state, gtk_window_get_child(window));
|
|
163
189
|
} else {
|
|
164
|
-
|
|
165
|
-
err =
|
|
190
|
+
bool is;
|
|
191
|
+
err = js_is_null(env, argv[1], &is);
|
|
166
192
|
assert(err == 0);
|
|
167
193
|
|
|
168
|
-
|
|
194
|
+
GtkWidget *child = NULL;
|
|
195
|
+
|
|
196
|
+
if (!is) {
|
|
197
|
+
err = bare_gobject_read_tag(env, state->registry, argv[1], "child", (gpointer *) &child);
|
|
198
|
+
if (err < 0) return NULL;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
gtk_window_set_child(window, child);
|
|
169
202
|
}
|
|
170
203
|
|
|
171
204
|
return result;
|
|
172
205
|
}
|
|
206
|
+
|
|
207
|
+
static js_value_t *
|
|
208
|
+
bare_gtk_window_event_mask(js_env_t *env, js_callback_info_t *info) {
|
|
209
|
+
int err;
|
|
210
|
+
|
|
211
|
+
size_t argc = 2;
|
|
212
|
+
js_value_t *argv[2];
|
|
213
|
+
|
|
214
|
+
bare_gtk_state_t *state;
|
|
215
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
|
|
216
|
+
assert(err == 0);
|
|
217
|
+
|
|
218
|
+
assert(argc == 1 || argc == 2);
|
|
219
|
+
|
|
220
|
+
BareWindow *window;
|
|
221
|
+
err = bare_gobject_read_type(env, state->registry, argv[0], "window", bare_window_get_type(), (gpointer *) &window);
|
|
222
|
+
if (err < 0) return NULL;
|
|
223
|
+
|
|
224
|
+
if (argc == 1) {
|
|
225
|
+
js_value_t *result;
|
|
226
|
+
err = js_create_uint32(env, window->events, &result);
|
|
227
|
+
assert(err == 0);
|
|
228
|
+
|
|
229
|
+
return result;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
uint32_t events;
|
|
233
|
+
err = bare_gtk__read_uint32(env, argv[1], "events", &events);
|
|
234
|
+
if (err < 0) return NULL;
|
|
235
|
+
|
|
236
|
+
uint32_t changed = window->events ^ events;
|
|
237
|
+
|
|
238
|
+
if (changed & bare_gtk_window_event_close_request) {
|
|
239
|
+
if (events & bare_gtk_window_event_close_request) {
|
|
240
|
+
window->on_close_request = g_signal_connect(window, "close-request", G_CALLBACK(bare_gtk_window__on_close_request), state);
|
|
241
|
+
} else {
|
|
242
|
+
g_signal_handler_disconnect(window, window->on_close_request);
|
|
243
|
+
|
|
244
|
+
window->on_close_request = 0;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
window->events = events;
|
|
249
|
+
|
|
250
|
+
return NULL;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
#endif // BARE_GTK_WINDOW_H
|
package/lib/window.js
CHANGED
|
@@ -1,30 +1,51 @@
|
|
|
1
1
|
const binding = require('../binding')
|
|
2
2
|
const GTKWidget = require('./widget')
|
|
3
|
+
const GDKSurface = require('./surface')
|
|
4
|
+
const wrap = require('./wrap')
|
|
5
|
+
const { hold, drop } = require('./reachable')
|
|
3
6
|
|
|
4
7
|
module.exports = exports = class GTKWindow extends GTKWidget {
|
|
5
|
-
|
|
6
|
-
|
|
8
|
+
static _events = {
|
|
9
|
+
'close-request': binding.WINDOW_EVENT_CLOSE_REQUEST
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
_init(opts) {
|
|
13
|
+
return binding.windowInit()
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
_eventMask(mask) {
|
|
17
|
+
binding.windowEventMask(this._tag, mask)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
get surface() {
|
|
21
|
+
return wrap(GDKSurface, binding.nativeSurface(this._tag))
|
|
22
|
+
}
|
|
7
23
|
|
|
8
|
-
|
|
24
|
+
get title() {
|
|
25
|
+
return binding.windowTitle(this._tag)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
set title(value) {
|
|
29
|
+
binding.windowTitle(this._tag, value)
|
|
9
30
|
}
|
|
10
31
|
|
|
11
32
|
get defaultSize() {
|
|
12
|
-
return binding.windowDefaultSize(this.
|
|
33
|
+
return binding.windowDefaultSize(this._tag)
|
|
13
34
|
}
|
|
14
35
|
|
|
15
36
|
set defaultSize([width, height]) {
|
|
16
|
-
binding.windowDefaultSize(this.
|
|
37
|
+
binding.windowDefaultSize(this._tag, width, height)
|
|
17
38
|
}
|
|
18
39
|
|
|
19
40
|
get child() {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
if (handle === null) return null
|
|
23
|
-
|
|
24
|
-
return new GTKWidget(handle)
|
|
41
|
+
return hold(this, wrap(GTKWidget, binding.windowChild(this._tag)))
|
|
25
42
|
}
|
|
26
43
|
|
|
27
44
|
set child(widget) {
|
|
28
|
-
binding.windowChild(this.
|
|
45
|
+
drop(this, wrap(GTKWidget, binding.windowChild(this._tag)))
|
|
46
|
+
|
|
47
|
+
binding.windowChild(this._tag, widget === null ? null : widget._tag)
|
|
48
|
+
|
|
49
|
+
hold(this, widget)
|
|
29
50
|
}
|
|
30
51
|
}
|
package/lib/wrap.js
ADDED
package/package.json
CHANGED
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bare-gtk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "GTK bindings and runtime for Bare",
|
|
5
5
|
"exports": {
|
|
6
6
|
"./package": "./package.json",
|
|
7
|
-
".":
|
|
8
|
-
|
|
7
|
+
".": {
|
|
8
|
+
"types": "./index.d.ts",
|
|
9
|
+
"default": "./index.js"
|
|
10
|
+
},
|
|
11
|
+
"./runtime": "./runtime.js",
|
|
12
|
+
"./*": {
|
|
13
|
+
"types": "./lib/*.d.ts",
|
|
14
|
+
"default": "./lib/*.js"
|
|
15
|
+
}
|
|
9
16
|
},
|
|
10
17
|
"files": [
|
|
11
18
|
"index.js",
|
|
19
|
+
"index.d.ts",
|
|
12
20
|
"runtime.js",
|
|
13
21
|
"binding.c",
|
|
14
22
|
"binding.js",
|
|
@@ -33,6 +41,7 @@
|
|
|
33
41
|
},
|
|
34
42
|
"homepage": "https://github.com/holepunchto/bare-gtk#readme",
|
|
35
43
|
"dependencies": {
|
|
44
|
+
"bare-gobject-registry": "^0.1.0",
|
|
36
45
|
"require-asset": "^1.1.0"
|
|
37
46
|
},
|
|
38
47
|
"peerDependencies": {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
[diffend] Oversized file quarantined before diffing.
|
|
2
2
|
name: package/prebuilds/linux-arm64/bare
|
|
3
|
-
size:
|
|
4
|
-
sha256:
|
|
3
|
+
size: 83698384 bytes
|
|
4
|
+
sha256: 1c66e934fb561ed507bcb4edc4560c9d5d56ac3dcfb33938e1455ff776f14114
|
|
Binary file
|
package/prebuilds/linux-x64/bare
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
[diffend] Oversized file quarantined before diffing.
|
|
2
2
|
name: package/prebuilds/linux-x64/bare
|
|
3
|
-
size:
|
|
4
|
-
sha256:
|
|
3
|
+
size: 82479072 bytes
|
|
4
|
+
sha256: 2d37fc00479b09c15c13038649accf82a9946f3ae4d31557ff414936bec98259
|
|
Binary file
|