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
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
#ifndef BARE_GTK_MESSAGE_DIALOG_H
|
|
2
|
+
#define BARE_GTK_MESSAGE_DIALOG_H
|
|
3
|
+
|
|
4
|
+
#include <assert.h>
|
|
5
|
+
#include <js.h>
|
|
6
|
+
|
|
7
|
+
#include <gtk/gtk.h>
|
|
8
|
+
|
|
9
|
+
#include "bridging.h"
|
|
10
|
+
|
|
11
|
+
enum {
|
|
12
|
+
bare_gtk_dialog_event_response = 1 << 0,
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
static void
|
|
16
|
+
bare_gtk_dialog__on_response(GtkDialog *dialog, gint response, gpointer data) {
|
|
17
|
+
bare_gtk_state_t *state = data;
|
|
18
|
+
|
|
19
|
+
if ((bare_gtk__observed(state, dialog) & bare_gtk_dialog_event_response) == 0) return;
|
|
20
|
+
|
|
21
|
+
bare_gtk__emit(state, dialog, "response", 1, (double[]){(double) response});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// No buttons yet, because adding them one at a time is the only way to choose
|
|
25
|
+
// their labels.
|
|
26
|
+
static js_value_t *
|
|
27
|
+
bare_gtk_message_dialog_new(js_env_t *env, js_callback_info_t *info) {
|
|
28
|
+
int err;
|
|
29
|
+
|
|
30
|
+
size_t argc = 3;
|
|
31
|
+
js_value_t *argv[3];
|
|
32
|
+
|
|
33
|
+
bare_gtk_state_t *state;
|
|
34
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
|
|
35
|
+
assert(err == 0);
|
|
36
|
+
|
|
37
|
+
assert(argc == 3);
|
|
38
|
+
|
|
39
|
+
GtkWindow *parent = NULL;
|
|
40
|
+
|
|
41
|
+
js_value_type_t type;
|
|
42
|
+
err = js_typeof(env, argv[0], &type);
|
|
43
|
+
assert(err == 0);
|
|
44
|
+
|
|
45
|
+
if (type != js_null && type != js_undefined) {
|
|
46
|
+
err = bare_gobject_read_tag(env, state->registry, argv[0], "parent", (gpointer *) &parent);
|
|
47
|
+
if (err < 0) return NULL;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
int32_t message_type;
|
|
51
|
+
err = bare_gtk__read_int32(env, argv[1], "message_type", &message_type);
|
|
52
|
+
if (err < 0) return NULL;
|
|
53
|
+
|
|
54
|
+
char *text;
|
|
55
|
+
err = bare_gtk__read_string(env, argv[2], "text", &text);
|
|
56
|
+
if (err < 0) return NULL;
|
|
57
|
+
|
|
58
|
+
GtkWidget *dialog = gtk_message_dialog_new(
|
|
59
|
+
parent,
|
|
60
|
+
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
|
|
61
|
+
(GtkMessageType) message_type,
|
|
62
|
+
GTK_BUTTONS_NONE,
|
|
63
|
+
"%s",
|
|
64
|
+
text
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
free(text);
|
|
68
|
+
|
|
69
|
+
g_signal_connect(dialog, "response", G_CALLBACK(bare_gtk_dialog__on_response), state);
|
|
70
|
+
|
|
71
|
+
return bare_gtk__create_tag(env, state, dialog);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
static js_value_t *
|
|
75
|
+
bare_gtk_message_dialog_secondary_text(js_env_t *env, js_callback_info_t *info) {
|
|
76
|
+
int err;
|
|
77
|
+
|
|
78
|
+
size_t argc = 2;
|
|
79
|
+
js_value_t *argv[2];
|
|
80
|
+
|
|
81
|
+
bare_gtk_state_t *state;
|
|
82
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
|
|
83
|
+
assert(err == 0);
|
|
84
|
+
|
|
85
|
+
assert(argc == 2);
|
|
86
|
+
|
|
87
|
+
GtkMessageDialog *dialog;
|
|
88
|
+
err = bare_gobject_read_tag(env, state->registry, argv[0], "dialog", (gpointer *) &dialog);
|
|
89
|
+
if (err < 0) return NULL;
|
|
90
|
+
|
|
91
|
+
char *text;
|
|
92
|
+
err = bare_gtk__read_string(env, argv[1], "text", &text);
|
|
93
|
+
if (err < 0) return NULL;
|
|
94
|
+
|
|
95
|
+
gtk_message_dialog_format_secondary_text(dialog, "%s", text);
|
|
96
|
+
|
|
97
|
+
free(text);
|
|
98
|
+
|
|
99
|
+
return NULL;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
static js_value_t *
|
|
103
|
+
bare_gtk_dialog_event_mask(js_env_t *env, js_callback_info_t *info) {
|
|
104
|
+
int err;
|
|
105
|
+
|
|
106
|
+
size_t argc = 2;
|
|
107
|
+
js_value_t *argv[2];
|
|
108
|
+
|
|
109
|
+
bare_gtk_state_t *state;
|
|
110
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
|
|
111
|
+
assert(err == 0);
|
|
112
|
+
|
|
113
|
+
assert(argc == 2);
|
|
114
|
+
|
|
115
|
+
GtkDialog *dialog;
|
|
116
|
+
err = bare_gobject_read_tag(env, state->registry, argv[0], "dialog", (gpointer *) &dialog);
|
|
117
|
+
if (err < 0) return NULL;
|
|
118
|
+
|
|
119
|
+
uint32_t events;
|
|
120
|
+
err = bare_gtk__read_uint32(env, argv[1], "events", &events);
|
|
121
|
+
if (err < 0) return NULL;
|
|
122
|
+
|
|
123
|
+
bare_gtk__observe(state, dialog, events);
|
|
124
|
+
|
|
125
|
+
return NULL;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
static js_value_t *
|
|
129
|
+
bare_gtk_dialog_add_button(js_env_t *env, js_callback_info_t *info) {
|
|
130
|
+
int err;
|
|
131
|
+
|
|
132
|
+
size_t argc = 3;
|
|
133
|
+
js_value_t *argv[3];
|
|
134
|
+
|
|
135
|
+
bare_gtk_state_t *state;
|
|
136
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
|
|
137
|
+
assert(err == 0);
|
|
138
|
+
|
|
139
|
+
assert(argc == 3);
|
|
140
|
+
|
|
141
|
+
GtkDialog *dialog;
|
|
142
|
+
err = bare_gobject_read_tag(env, state->registry, argv[0], "dialog", (gpointer *) &dialog);
|
|
143
|
+
if (err < 0) return NULL;
|
|
144
|
+
|
|
145
|
+
char *label;
|
|
146
|
+
err = bare_gtk__read_string(env, argv[1], "label", &label);
|
|
147
|
+
if (err < 0) return NULL;
|
|
148
|
+
|
|
149
|
+
int32_t response;
|
|
150
|
+
err = bare_gtk__read_int32(env, argv[2], "response", &response);
|
|
151
|
+
if (err < 0) {
|
|
152
|
+
free(label);
|
|
153
|
+
|
|
154
|
+
return NULL;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
GtkWidget *button = gtk_dialog_add_button(dialog, label, response);
|
|
158
|
+
|
|
159
|
+
free(label);
|
|
160
|
+
|
|
161
|
+
return bare_gtk__create_tag(env, state, button);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
static js_value_t *
|
|
165
|
+
bare_gtk_dialog_response(js_env_t *env, js_callback_info_t *info) {
|
|
166
|
+
int err;
|
|
167
|
+
|
|
168
|
+
size_t argc = 2;
|
|
169
|
+
js_value_t *argv[2];
|
|
170
|
+
|
|
171
|
+
bare_gtk_state_t *state;
|
|
172
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
|
|
173
|
+
assert(err == 0);
|
|
174
|
+
|
|
175
|
+
assert(argc == 2);
|
|
176
|
+
|
|
177
|
+
GtkDialog *dialog;
|
|
178
|
+
err = bare_gobject_read_tag(env, state->registry, argv[0], "dialog", (gpointer *) &dialog);
|
|
179
|
+
if (err < 0) return NULL;
|
|
180
|
+
|
|
181
|
+
int32_t response;
|
|
182
|
+
err = bare_gtk__read_int32(env, argv[1], "response", &response);
|
|
183
|
+
if (err < 0) return NULL;
|
|
184
|
+
|
|
185
|
+
gtk_dialog_response(dialog, response);
|
|
186
|
+
|
|
187
|
+
return NULL;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
#endif // BARE_GTK_MESSAGE_DIALOG_H
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const binding = require('../binding')
|
|
2
|
+
const GTKDialog = require('./dialog')
|
|
3
|
+
|
|
4
|
+
module.exports = exports = class GTKMessageDialog extends GTKDialog {
|
|
5
|
+
_init(opts) {
|
|
6
|
+
const { parent = null, messageType = exports.MESSAGE_TYPE.OTHER, text = '' } = opts
|
|
7
|
+
|
|
8
|
+
return binding.messageDialogNew(parent === null ? null : parent._tag, messageType, text)
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
set secondaryText(text) {
|
|
12
|
+
binding.messageDialogSecondaryText(this._tag, text)
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
exports.MESSAGE_TYPE = {
|
|
17
|
+
INFO: binding.MESSAGE_DIALOG_MESSAGE_TYPE_INFO,
|
|
18
|
+
WARNING: binding.MESSAGE_DIALOG_MESSAGE_TYPE_WARNING,
|
|
19
|
+
QUESTION: binding.MESSAGE_DIALOG_MESSAGE_TYPE_QUESTION,
|
|
20
|
+
ERROR: binding.MESSAGE_DIALOG_MESSAGE_TYPE_ERROR,
|
|
21
|
+
OTHER: binding.MESSAGE_DIALOG_MESSAGE_TYPE_OTHER
|
|
22
|
+
}
|
package/lib/monitor.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import GObject = require('./object')
|
|
2
|
+
|
|
3
|
+
/** A monitor, as a `GdkMonitor`. */
|
|
4
|
+
interface GDKMonitor extends GObject {
|
|
5
|
+
/** Where the monitor is and how big it is, in logical pixels. */
|
|
6
|
+
readonly geometry: { x: number; y: number; width: number; height: number }
|
|
7
|
+
|
|
8
|
+
readonly scaleFactor: number
|
|
9
|
+
|
|
10
|
+
readonly widthMm: number
|
|
11
|
+
|
|
12
|
+
readonly heightMm: number
|
|
13
|
+
|
|
14
|
+
/** The refresh rate in millihertz, or 0 if it is not known. */
|
|
15
|
+
readonly refreshRate: number
|
|
16
|
+
|
|
17
|
+
/** The name of the connector, such as `'HDMI-1'`, or `null`. */
|
|
18
|
+
readonly connector: string | null
|
|
19
|
+
|
|
20
|
+
readonly manufacturer: string | null
|
|
21
|
+
|
|
22
|
+
readonly model: string | null
|
|
23
|
+
|
|
24
|
+
/** Whether the monitor is still connected. */
|
|
25
|
+
readonly valid: boolean
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
declare class GDKMonitor {
|
|
29
|
+
protected constructor()
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export = GDKMonitor
|
package/lib/monitor.h
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
#ifndef BARE_GTK_MONITOR_H
|
|
2
|
+
#define BARE_GTK_MONITOR_H
|
|
3
|
+
|
|
4
|
+
#include <assert.h>
|
|
5
|
+
#include <js.h>
|
|
6
|
+
|
|
7
|
+
#include <gtk/gtk.h>
|
|
8
|
+
|
|
9
|
+
#include "bridging.h"
|
|
10
|
+
|
|
11
|
+
static js_value_t *
|
|
12
|
+
bare_gtk_monitor_geometry(js_env_t *env, js_callback_info_t *info) {
|
|
13
|
+
int err;
|
|
14
|
+
|
|
15
|
+
size_t argc = 1;
|
|
16
|
+
js_value_t *argv[1];
|
|
17
|
+
|
|
18
|
+
bare_gtk_state_t *state;
|
|
19
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
|
|
20
|
+
assert(err == 0);
|
|
21
|
+
|
|
22
|
+
assert(argc == 1);
|
|
23
|
+
|
|
24
|
+
GdkMonitor *monitor;
|
|
25
|
+
err = bare_gobject_read_tag(env, state->registry, argv[0], "monitor", (gpointer *) &monitor);
|
|
26
|
+
if (err < 0) return NULL;
|
|
27
|
+
|
|
28
|
+
GdkRectangle geometry;
|
|
29
|
+
gdk_monitor_get_geometry(monitor, &geometry);
|
|
30
|
+
|
|
31
|
+
js_value_t *result;
|
|
32
|
+
err = js_create_object(env, &result);
|
|
33
|
+
assert(err == 0);
|
|
34
|
+
|
|
35
|
+
const char *names[] = {"x", "y", "width", "height"};
|
|
36
|
+
int values[] = {geometry.x, geometry.y, geometry.width, geometry.height};
|
|
37
|
+
|
|
38
|
+
for (size_t i = 0; i < 4; i++) {
|
|
39
|
+
js_value_t *value;
|
|
40
|
+
err = js_create_int32(env, values[i], &value);
|
|
41
|
+
assert(err == 0);
|
|
42
|
+
|
|
43
|
+
err = js_set_named_property(env, result, names[i], value);
|
|
44
|
+
assert(err == 0);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
#define V(name, fn) \
|
|
51
|
+
static js_value_t * \
|
|
52
|
+
name(js_env_t *env, js_callback_info_t *info) { \
|
|
53
|
+
int err; \
|
|
54
|
+
\
|
|
55
|
+
size_t argc = 1; \
|
|
56
|
+
js_value_t *argv[1]; \
|
|
57
|
+
\
|
|
58
|
+
bare_gtk_state_t *state; \
|
|
59
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state); \
|
|
60
|
+
assert(err == 0); \
|
|
61
|
+
\
|
|
62
|
+
assert(argc == 1); \
|
|
63
|
+
\
|
|
64
|
+
GdkMonitor *monitor; \
|
|
65
|
+
err = bare_gobject_read_tag(env, state->registry, argv[0], "monitor", (gpointer *) &monitor); \
|
|
66
|
+
if (err < 0) return NULL; \
|
|
67
|
+
\
|
|
68
|
+
js_value_t *result; \
|
|
69
|
+
err = js_create_int32(env, fn(monitor), &result); \
|
|
70
|
+
assert(err == 0); \
|
|
71
|
+
\
|
|
72
|
+
return result; \
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
V(bare_gtk_monitor_scale_factor, gdk_monitor_get_scale_factor)
|
|
76
|
+
V(bare_gtk_monitor_width_mm, gdk_monitor_get_width_mm)
|
|
77
|
+
V(bare_gtk_monitor_height_mm, gdk_monitor_get_height_mm)
|
|
78
|
+
V(bare_gtk_monitor_refresh_rate, gdk_monitor_get_refresh_rate)
|
|
79
|
+
#undef V
|
|
80
|
+
|
|
81
|
+
#define V(name, fn) \
|
|
82
|
+
static js_value_t * \
|
|
83
|
+
name(js_env_t *env, js_callback_info_t *info) { \
|
|
84
|
+
int err; \
|
|
85
|
+
\
|
|
86
|
+
size_t argc = 1; \
|
|
87
|
+
js_value_t *argv[1]; \
|
|
88
|
+
\
|
|
89
|
+
bare_gtk_state_t *state; \
|
|
90
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state); \
|
|
91
|
+
assert(err == 0); \
|
|
92
|
+
\
|
|
93
|
+
assert(argc == 1); \
|
|
94
|
+
\
|
|
95
|
+
GdkMonitor *monitor; \
|
|
96
|
+
err = bare_gobject_read_tag(env, state->registry, argv[0], "monitor", (gpointer *) &monitor); \
|
|
97
|
+
if (err < 0) return NULL; \
|
|
98
|
+
\
|
|
99
|
+
const char *value = fn(monitor); \
|
|
100
|
+
\
|
|
101
|
+
js_value_t *result; \
|
|
102
|
+
\
|
|
103
|
+
if (value == NULL) { \
|
|
104
|
+
err = js_get_null(env, &result); \
|
|
105
|
+
} else { \
|
|
106
|
+
err = js_create_string_utf8(env, (const utf8_t *) value, -1, &result); \
|
|
107
|
+
} \
|
|
108
|
+
\
|
|
109
|
+
assert(err == 0); \
|
|
110
|
+
\
|
|
111
|
+
return result; \
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
V(bare_gtk_monitor_connector, gdk_monitor_get_connector)
|
|
115
|
+
V(bare_gtk_monitor_manufacturer, gdk_monitor_get_manufacturer)
|
|
116
|
+
V(bare_gtk_monitor_model, gdk_monitor_get_model)
|
|
117
|
+
#undef V
|
|
118
|
+
|
|
119
|
+
static js_value_t *
|
|
120
|
+
bare_gtk_monitor_valid(js_env_t *env, js_callback_info_t *info) {
|
|
121
|
+
int err;
|
|
122
|
+
|
|
123
|
+
size_t argc = 1;
|
|
124
|
+
js_value_t *argv[1];
|
|
125
|
+
|
|
126
|
+
bare_gtk_state_t *state;
|
|
127
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
|
|
128
|
+
assert(err == 0);
|
|
129
|
+
|
|
130
|
+
assert(argc == 1);
|
|
131
|
+
|
|
132
|
+
GdkMonitor *monitor;
|
|
133
|
+
err = bare_gobject_read_tag(env, state->registry, argv[0], "monitor", (gpointer *) &monitor);
|
|
134
|
+
if (err < 0) return NULL;
|
|
135
|
+
|
|
136
|
+
js_value_t *result;
|
|
137
|
+
err = js_get_boolean(env, gdk_monitor_is_valid(monitor), &result);
|
|
138
|
+
assert(err == 0);
|
|
139
|
+
|
|
140
|
+
return result;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
#endif // BARE_GTK_MONITOR_H
|
package/lib/monitor.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
const binding = require('../binding')
|
|
2
|
+
const GObject = require('./object')
|
|
3
|
+
|
|
4
|
+
module.exports = exports = class GDKMonitor extends GObject {
|
|
5
|
+
get geometry() {
|
|
6
|
+
return binding.monitorGeometry(this._tag)
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
get scaleFactor() {
|
|
10
|
+
return binding.monitorScaleFactor(this._tag)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
get widthMm() {
|
|
14
|
+
return binding.monitorWidthMm(this._tag)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
get heightMm() {
|
|
18
|
+
return binding.monitorHeightMm(this._tag)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
get refreshRate() {
|
|
22
|
+
return binding.monitorRefreshRate(this._tag)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
get connector() {
|
|
26
|
+
return binding.monitorConnector(this._tag)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
get manufacturer() {
|
|
30
|
+
return binding.monitorManufacturer(this._tag)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
get model() {
|
|
34
|
+
return binding.monitorModel(this._tag)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
get valid() {
|
|
38
|
+
return binding.monitorValid(this._tag)
|
|
39
|
+
}
|
|
40
|
+
}
|
package/lib/native.h
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#ifndef BARE_GTK_NATIVE_H
|
|
2
|
+
#define BARE_GTK_NATIVE_H
|
|
3
|
+
|
|
4
|
+
#include <assert.h>
|
|
5
|
+
#include <js.h>
|
|
6
|
+
|
|
7
|
+
#include <gtk/gtk.h>
|
|
8
|
+
|
|
9
|
+
#include "bridging.h"
|
|
10
|
+
|
|
11
|
+
static js_value_t *
|
|
12
|
+
bare_gtk_native_surface(js_env_t *env, js_callback_info_t *info) {
|
|
13
|
+
int err;
|
|
14
|
+
|
|
15
|
+
size_t argc = 1;
|
|
16
|
+
js_value_t *argv[1];
|
|
17
|
+
|
|
18
|
+
bare_gtk_state_t *state;
|
|
19
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
|
|
20
|
+
assert(err == 0);
|
|
21
|
+
|
|
22
|
+
assert(argc == 1);
|
|
23
|
+
|
|
24
|
+
GtkNative *native;
|
|
25
|
+
err = bare_gobject_read_tag(env, state->registry, argv[0], "native", (gpointer *) &native);
|
|
26
|
+
if (err < 0) return NULL;
|
|
27
|
+
|
|
28
|
+
return bare_gtk__create_tag(env, state, gtk_native_get_surface(native));
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
#endif // BARE_GTK_NATIVE_H
|
package/lib/object.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import EventEmitter from 'bare-events'
|
|
2
|
+
import { tag, handle, Handle } from 'bare-gobject-registry'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* The base of every GTK and GDK object in this module. Objects that have events emit them as
|
|
6
|
+
* ordinary events, and GTK is only asked to report an event while something listens to it.
|
|
7
|
+
*/
|
|
8
|
+
interface GObject<M extends Record<keyof M, unknown[]> = {}> extends EventEmitter<M> {
|
|
9
|
+
readonly [tag]: number
|
|
10
|
+
|
|
11
|
+
readonly [handle]: Handle
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
declare class GObject<M extends Record<keyof M, unknown[]> = {}> {
|
|
15
|
+
protected constructor()
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export = GObject
|
package/lib/object.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const EventEmitter = require('bare-events')
|
|
2
|
+
const binding = require('../binding')
|
|
3
|
+
const registry = require('bare-gobject-registry')
|
|
4
|
+
const observe = require('./events')
|
|
5
|
+
|
|
6
|
+
module.exports = exports = class GObject extends EventEmitter {
|
|
7
|
+
constructor(opts = {}) {
|
|
8
|
+
super()
|
|
9
|
+
|
|
10
|
+
const { tag = null } = opts
|
|
11
|
+
|
|
12
|
+
this._retained = new Set()
|
|
13
|
+
|
|
14
|
+
const created = tag === null ? this._init(opts) : tag
|
|
15
|
+
|
|
16
|
+
this._tag = typeof created === 'number' ? created : binding.adopt(created)
|
|
17
|
+
|
|
18
|
+
this._token = binding.claim(this._tag, this)
|
|
19
|
+
|
|
20
|
+
observe(this)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
get [registry.tag]() {
|
|
24
|
+
return this._tag
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
get [registry.handle]() {
|
|
28
|
+
return binding.handle(this._tag)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
_init(opts) {
|
|
32
|
+
throw new TypeError(`${this.constructor.name} cannot be constructed directly`)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
_eventMask(mask) {
|
|
36
|
+
throw new Error(`${this.constructor.name} does not implement _eventMask`)
|
|
37
|
+
}
|
|
38
|
+
}
|
package/lib/paintable.js
ADDED
package/lib/picture.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Wrapper } from 'bare-gobject-registry'
|
|
2
|
+
import GTKWidget = require('./widget')
|
|
3
|
+
import GDKPaintable = require('./paintable')
|
|
4
|
+
|
|
5
|
+
/** A widget that shows an image, as a `GtkPicture`. */
|
|
6
|
+
interface GTKPicture extends GTKWidget {
|
|
7
|
+
/** What the picture shows, or `null`. It can come from another addon. */
|
|
8
|
+
get paintable(): GDKPaintable | null
|
|
9
|
+
set paintable(paintable: Wrapper | null)
|
|
10
|
+
|
|
11
|
+
/** Whether the image keeps its aspect ratio when it is scaled. */
|
|
12
|
+
keepAspectRatio: boolean
|
|
13
|
+
|
|
14
|
+
/** Whether the picture can be made smaller than the image. */
|
|
15
|
+
canShrink: boolean
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
declare class GTKPicture {
|
|
19
|
+
constructor()
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export = GTKPicture
|
package/lib/picture.h
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
#ifndef BARE_GTK_PICTURE_H
|
|
2
|
+
#define BARE_GTK_PICTURE_H
|
|
3
|
+
|
|
4
|
+
#include <assert.h>
|
|
5
|
+
#include <js.h>
|
|
6
|
+
#include <utf.h>
|
|
7
|
+
|
|
8
|
+
#include <gtk/gtk.h>
|
|
9
|
+
|
|
10
|
+
#include "bridging.h"
|
|
11
|
+
|
|
12
|
+
static js_value_t *
|
|
13
|
+
bare_gtk_picture_init(js_env_t *env, js_callback_info_t *info) {
|
|
14
|
+
int err;
|
|
15
|
+
|
|
16
|
+
bare_gtk_state_t *state;
|
|
17
|
+
err = js_get_callback_info(env, info, NULL, NULL, NULL, (void **) &state);
|
|
18
|
+
assert(err == 0);
|
|
19
|
+
|
|
20
|
+
GtkWidget *picture = gtk_picture_new();
|
|
21
|
+
|
|
22
|
+
js_value_t *result;
|
|
23
|
+
err = js_create_uint32(env, bare_gobject_tag(state->registry, picture), &result);
|
|
24
|
+
assert(err == 0);
|
|
25
|
+
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
static js_value_t *
|
|
30
|
+
bare_gtk_picture_paintable(js_env_t *env, js_callback_info_t *info) {
|
|
31
|
+
int err;
|
|
32
|
+
|
|
33
|
+
size_t argc = 2;
|
|
34
|
+
js_value_t *argv[2];
|
|
35
|
+
|
|
36
|
+
bare_gtk_state_t *state;
|
|
37
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
|
|
38
|
+
assert(err == 0);
|
|
39
|
+
|
|
40
|
+
assert(argc == 1 || argc == 2);
|
|
41
|
+
|
|
42
|
+
GtkPicture *picture;
|
|
43
|
+
err = bare_gobject_read_tag(env, state->registry, argv[0], "picture", (gpointer *) &picture);
|
|
44
|
+
if (err < 0) return NULL;
|
|
45
|
+
|
|
46
|
+
js_value_t *result = NULL;
|
|
47
|
+
|
|
48
|
+
if (argc == 1) {
|
|
49
|
+
result = bare_gtk__create_tag(env, state, gtk_picture_get_paintable(picture));
|
|
50
|
+
} else {
|
|
51
|
+
GdkPaintable *paintable;
|
|
52
|
+
err = bare_gtk__read_tag_or_null(env, state->registry, argv[1], "paintable", (gpointer *) &paintable);
|
|
53
|
+
if (err < 0) return NULL;
|
|
54
|
+
|
|
55
|
+
gtk_picture_set_paintable(picture, paintable);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
static js_value_t *
|
|
62
|
+
bare_gtk_picture_keep_aspect_ratio(js_env_t *env, js_callback_info_t *info) {
|
|
63
|
+
int err;
|
|
64
|
+
|
|
65
|
+
size_t argc = 2;
|
|
66
|
+
js_value_t *argv[2];
|
|
67
|
+
|
|
68
|
+
bare_gtk_state_t *state;
|
|
69
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
|
|
70
|
+
assert(err == 0);
|
|
71
|
+
|
|
72
|
+
assert(argc == 1 || argc == 2);
|
|
73
|
+
|
|
74
|
+
GtkPicture *picture;
|
|
75
|
+
err = bare_gobject_read_tag(env, state->registry, argv[0], "picture", (gpointer *) &picture);
|
|
76
|
+
if (err < 0) return NULL;
|
|
77
|
+
|
|
78
|
+
js_value_t *result = NULL;
|
|
79
|
+
|
|
80
|
+
if (argc == 1) {
|
|
81
|
+
err = js_get_boolean(env, gtk_picture_get_keep_aspect_ratio(picture), &result);
|
|
82
|
+
assert(err == 0);
|
|
83
|
+
} else {
|
|
84
|
+
bool keep;
|
|
85
|
+
err = bare_gtk__read_bool(env, argv[1], "keepAspectRatio", &keep);
|
|
86
|
+
if (err < 0) return NULL;
|
|
87
|
+
|
|
88
|
+
gtk_picture_set_keep_aspect_ratio(picture, keep);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
static js_value_t *
|
|
95
|
+
bare_gtk_picture_can_shrink(js_env_t *env, js_callback_info_t *info) {
|
|
96
|
+
int err;
|
|
97
|
+
|
|
98
|
+
size_t argc = 2;
|
|
99
|
+
js_value_t *argv[2];
|
|
100
|
+
|
|
101
|
+
bare_gtk_state_t *state;
|
|
102
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
|
|
103
|
+
assert(err == 0);
|
|
104
|
+
|
|
105
|
+
assert(argc == 1 || argc == 2);
|
|
106
|
+
|
|
107
|
+
GtkPicture *picture;
|
|
108
|
+
err = bare_gobject_read_tag(env, state->registry, argv[0], "picture", (gpointer *) &picture);
|
|
109
|
+
if (err < 0) return NULL;
|
|
110
|
+
|
|
111
|
+
js_value_t *result = NULL;
|
|
112
|
+
|
|
113
|
+
if (argc == 1) {
|
|
114
|
+
err = js_get_boolean(env, gtk_picture_get_can_shrink(picture), &result);
|
|
115
|
+
assert(err == 0);
|
|
116
|
+
} else {
|
|
117
|
+
bool shrink;
|
|
118
|
+
err = bare_gtk__read_bool(env, argv[1], "canShrink", &shrink);
|
|
119
|
+
if (err < 0) return NULL;
|
|
120
|
+
|
|
121
|
+
gtk_picture_set_can_shrink(picture, shrink);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
return result;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
#endif // BARE_GTK_PICTURE_H
|