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/entry.js
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
const binding = require('../binding')
|
|
2
|
+
const GTKWidget = require('./widget')
|
|
3
|
+
|
|
4
|
+
module.exports = exports = class GTKEntry extends GTKWidget {
|
|
5
|
+
static _events = {
|
|
6
|
+
changed: binding.ENTRY_EVENT_CHANGED,
|
|
7
|
+
activate: binding.ENTRY_EVENT_ACTIVATE,
|
|
8
|
+
'cursor-position': binding.ENTRY_EVENT_CURSOR_POSITION,
|
|
9
|
+
'insert-text': binding.ENTRY_EVENT_INSERT_TEXT,
|
|
10
|
+
'delete-text': binding.ENTRY_EVENT_DELETE_TEXT,
|
|
11
|
+
'has-focus': binding.ENTRY_EVENT_HAS_FOCUS,
|
|
12
|
+
'is-focus': binding.ENTRY_EVENT_IS_FOCUS
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
_init(opts) {
|
|
16
|
+
return binding.entryInit()
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
_eventMask(mask) {
|
|
20
|
+
binding.entryEventMask(this._tag, mask)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
get text() {
|
|
24
|
+
return binding.editableText(this._tag)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
set text(value) {
|
|
28
|
+
binding.editableText(this._tag, value)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
get editable() {
|
|
32
|
+
return binding.editableEditable(this._tag)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
set editable(value) {
|
|
36
|
+
binding.editableEditable(this._tag, value)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
get selectionBounds() {
|
|
40
|
+
return binding.editableSelectionBounds(this._tag)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
selectRegion(start, end) {
|
|
44
|
+
binding.editableSelectRegion(this._tag, start, end)
|
|
45
|
+
|
|
46
|
+
return this
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
grabFocusWithoutSelecting() {
|
|
50
|
+
return binding.entryGrabFocusWithoutSelecting(this._tag)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
get placeholderText() {
|
|
54
|
+
return binding.entryPlaceholderText(this._tag)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
set placeholderText(value) {
|
|
58
|
+
binding.entryPlaceholderText(this._tag, value)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
get visibility() {
|
|
62
|
+
return binding.entryVisibility(this._tag)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
set visibility(value) {
|
|
66
|
+
binding.entryVisibility(this._tag, value)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
get inputPurpose() {
|
|
70
|
+
return binding.entryInputPurpose(this._tag)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
set inputPurpose(value) {
|
|
74
|
+
binding.entryInputPurpose(this._tag, value)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
get inputHints() {
|
|
78
|
+
return binding.entryInputHints(this._tag)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
set inputHints(value) {
|
|
82
|
+
binding.entryInputHints(this._tag, value)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
get alignment() {
|
|
86
|
+
return binding.entryAlignment(this._tag)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
set alignment(value) {
|
|
90
|
+
binding.entryAlignment(this._tag, value)
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
exports.INPUT_PURPOSE = {
|
|
95
|
+
FREE_FORM: 0,
|
|
96
|
+
ALPHA: 1,
|
|
97
|
+
DIGITS: 2,
|
|
98
|
+
NUMBER: 3,
|
|
99
|
+
PHONE: 4,
|
|
100
|
+
URL: 5,
|
|
101
|
+
EMAIL: 6,
|
|
102
|
+
NAME: 7,
|
|
103
|
+
PASSWORD: 8,
|
|
104
|
+
PIN: 9,
|
|
105
|
+
TERMINAL: 10
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
exports.INPUT_HINTS = {
|
|
109
|
+
NONE: 0,
|
|
110
|
+
SPELLCHECK: 1 << 0,
|
|
111
|
+
NO_SPELLCHECK: 1 << 1,
|
|
112
|
+
WORD_COMPLETION: 1 << 2,
|
|
113
|
+
LOWERCASE: 1 << 3,
|
|
114
|
+
UPPERCASE_CHARS: 1 << 4,
|
|
115
|
+
UPPERCASE_WORDS: 1 << 5,
|
|
116
|
+
UPPERCASE_SENTENCES: 1 << 6,
|
|
117
|
+
INHIBIT_OSK: 1 << 7
|
|
118
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import GTKEventController = require('./event-controller')
|
|
2
|
+
|
|
3
|
+
/** Reports when a widget gets and loses the keyboard focus, as a `GtkEventControllerFocus`. */
|
|
4
|
+
interface GTKEventControllerFocus extends GTKEventController<GTKEventControllerFocus.Events> {}
|
|
5
|
+
|
|
6
|
+
declare class GTKEventControllerFocus {
|
|
7
|
+
constructor()
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
declare namespace GTKEventControllerFocus {
|
|
11
|
+
export interface Events {
|
|
12
|
+
enter: []
|
|
13
|
+
leave: []
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export = GTKEventControllerFocus
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#ifndef BARE_GTK_EVENT_CONTROLLER_FOCUS_H
|
|
2
|
+
#define BARE_GTK_EVENT_CONTROLLER_FOCUS_H
|
|
3
|
+
|
|
4
|
+
#include <assert.h>
|
|
5
|
+
#include <js.h>
|
|
6
|
+
|
|
7
|
+
#include <gtk/gtk.h>
|
|
8
|
+
|
|
9
|
+
#include "bridging.h"
|
|
10
|
+
#include "event-controller.h"
|
|
11
|
+
|
|
12
|
+
enum {
|
|
13
|
+
bare_gtk_event_controller_focus_event_enter = 1 << 0,
|
|
14
|
+
bare_gtk_event_controller_focus_event_leave = 1 << 1,
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
static void
|
|
18
|
+
bare_gtk_event_controller_focus__on_enter(GtkEventControllerFocus *focus, gpointer data) {
|
|
19
|
+
bare_gtk_state_t *state = data;
|
|
20
|
+
|
|
21
|
+
if ((bare_gtk__observed(state, focus) & bare_gtk_event_controller_focus_event_enter) == 0) return;
|
|
22
|
+
|
|
23
|
+
bare_gtk__emit(state, focus, "enter", 0, NULL);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
static void
|
|
27
|
+
bare_gtk_event_controller_focus__on_leave(GtkEventControllerFocus *focus, gpointer data) {
|
|
28
|
+
bare_gtk_state_t *state = data;
|
|
29
|
+
|
|
30
|
+
if ((bare_gtk__observed(state, focus) & bare_gtk_event_controller_focus_event_leave) == 0) return;
|
|
31
|
+
|
|
32
|
+
bare_gtk__emit(state, focus, "leave", 0, NULL);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
static js_value_t *
|
|
36
|
+
bare_gtk_event_controller_focus_init(js_env_t *env, js_callback_info_t *info) {
|
|
37
|
+
int err;
|
|
38
|
+
|
|
39
|
+
bare_gtk_state_t *state;
|
|
40
|
+
err = js_get_callback_info(env, info, NULL, NULL, NULL, (void **) &state);
|
|
41
|
+
assert(err == 0);
|
|
42
|
+
|
|
43
|
+
GtkEventController *focus = gtk_event_controller_focus_new();
|
|
44
|
+
|
|
45
|
+
g_signal_connect(focus, "enter", G_CALLBACK(bare_gtk_event_controller_focus__on_enter), state);
|
|
46
|
+
g_signal_connect(focus, "leave", G_CALLBACK(bare_gtk_event_controller_focus__on_leave), state);
|
|
47
|
+
|
|
48
|
+
js_value_t *result;
|
|
49
|
+
err = js_create_uint32(env, bare_gobject_tag(state->registry, focus), &result);
|
|
50
|
+
assert(err == 0);
|
|
51
|
+
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
#endif // BARE_GTK_EVENT_CONTROLLER_FOCUS_H
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const binding = require('../binding')
|
|
2
|
+
const GTKEventController = require('./event-controller')
|
|
3
|
+
|
|
4
|
+
module.exports = exports = class GTKEventControllerFocus extends GTKEventController {
|
|
5
|
+
static _events = {
|
|
6
|
+
enter: binding.EVENT_CONTROLLER_FOCUS_EVENT_ENTER,
|
|
7
|
+
leave: binding.EVENT_CONTROLLER_FOCUS_EVENT_LEAVE
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
_init() {
|
|
11
|
+
return binding.eventControllerFocusInit()
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import GTKEventController = require('./event-controller')
|
|
2
|
+
|
|
3
|
+
/** Reports pointer movement over a widget, as a `GtkEventControllerMotion`. */
|
|
4
|
+
interface GTKEventControllerMotion extends GTKEventController<GTKEventControllerMotion.Events> {}
|
|
5
|
+
|
|
6
|
+
declare class GTKEventControllerMotion {
|
|
7
|
+
constructor()
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
declare namespace GTKEventControllerMotion {
|
|
11
|
+
export interface Events {
|
|
12
|
+
motion: [x: number, y: number]
|
|
13
|
+
enter: [x: number, y: number]
|
|
14
|
+
leave: []
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export = GTKEventControllerMotion
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
#ifndef BARE_GTK_EVENT_CONTROLLER_MOTION_H
|
|
2
|
+
#define BARE_GTK_EVENT_CONTROLLER_MOTION_H
|
|
3
|
+
|
|
4
|
+
#include <assert.h>
|
|
5
|
+
#include <js.h>
|
|
6
|
+
|
|
7
|
+
#include <gtk/gtk.h>
|
|
8
|
+
|
|
9
|
+
#include "bridging.h"
|
|
10
|
+
#include "event-controller.h"
|
|
11
|
+
|
|
12
|
+
enum {
|
|
13
|
+
bare_gtk_event_controller_motion_event_motion = 1 << 0,
|
|
14
|
+
bare_gtk_event_controller_motion_event_enter = 1 << 1,
|
|
15
|
+
bare_gtk_event_controller_motion_event_leave = 1 << 2,
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
static void
|
|
19
|
+
bare_gtk_event_controller_motion__on_motion(GtkEventControllerMotion *motion, double x, double y, gpointer data) {
|
|
20
|
+
bare_gtk_state_t *state = data;
|
|
21
|
+
|
|
22
|
+
if ((bare_gtk__observed(state, motion) & bare_gtk_event_controller_motion_event_motion) == 0) return;
|
|
23
|
+
|
|
24
|
+
bare_gtk__emit(state, motion, "motion", 2, (const double[]) {x, y});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
static void
|
|
28
|
+
bare_gtk_event_controller_motion__on_enter(GtkEventControllerMotion *motion, double x, double y, gpointer data) {
|
|
29
|
+
bare_gtk_state_t *state = data;
|
|
30
|
+
|
|
31
|
+
if ((bare_gtk__observed(state, motion) & bare_gtk_event_controller_motion_event_enter) == 0) return;
|
|
32
|
+
|
|
33
|
+
bare_gtk__emit(state, motion, "enter", 2, (const double[]) {x, y});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
static void
|
|
37
|
+
bare_gtk_event_controller_motion__on_leave(GtkEventControllerMotion *motion, gpointer data) {
|
|
38
|
+
bare_gtk_state_t *state = data;
|
|
39
|
+
|
|
40
|
+
if ((bare_gtk__observed(state, motion) & bare_gtk_event_controller_motion_event_leave) == 0) return;
|
|
41
|
+
|
|
42
|
+
bare_gtk__emit(state, motion, "leave", 0, NULL);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
static js_value_t *
|
|
46
|
+
bare_gtk_event_controller_motion_init(js_env_t *env, js_callback_info_t *info) {
|
|
47
|
+
int err;
|
|
48
|
+
|
|
49
|
+
bare_gtk_state_t *state;
|
|
50
|
+
err = js_get_callback_info(env, info, NULL, NULL, NULL, (void **) &state);
|
|
51
|
+
assert(err == 0);
|
|
52
|
+
|
|
53
|
+
GtkEventController *motion = gtk_event_controller_motion_new();
|
|
54
|
+
|
|
55
|
+
g_signal_connect(motion, "motion", G_CALLBACK(bare_gtk_event_controller_motion__on_motion), state);
|
|
56
|
+
g_signal_connect(motion, "enter", G_CALLBACK(bare_gtk_event_controller_motion__on_enter), state);
|
|
57
|
+
g_signal_connect(motion, "leave", G_CALLBACK(bare_gtk_event_controller_motion__on_leave), state);
|
|
58
|
+
|
|
59
|
+
js_value_t *result;
|
|
60
|
+
err = js_create_uint32(env, bare_gobject_tag(state->registry, motion), &result);
|
|
61
|
+
assert(err == 0);
|
|
62
|
+
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
#endif // BARE_GTK_EVENT_CONTROLLER_MOTION_H
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const binding = require('../binding')
|
|
2
|
+
const GTKEventController = require('./event-controller')
|
|
3
|
+
|
|
4
|
+
module.exports = exports = class GTKEventControllerMotion extends GTKEventController {
|
|
5
|
+
static _events = {
|
|
6
|
+
motion: binding.EVENT_CONTROLLER_MOTION_EVENT_MOTION,
|
|
7
|
+
enter: binding.EVENT_CONTROLLER_MOTION_EVENT_ENTER,
|
|
8
|
+
leave: binding.EVENT_CONTROLLER_MOTION_EVENT_LEAVE
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
_init() {
|
|
12
|
+
return binding.eventControllerMotionInit()
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import GObject = require('./object')
|
|
2
|
+
import GTKDevice = require('./device')
|
|
3
|
+
|
|
4
|
+
/** The base of the objects that report input on a widget, as a `GtkEventController`. */
|
|
5
|
+
interface GTKEventController<M extends Record<keyof M, unknown[]> = {}> extends GObject<M> {
|
|
6
|
+
/** When the controller sees an event, as a `PROPAGATION_PHASE_*` constant. */
|
|
7
|
+
propagationPhase: number
|
|
8
|
+
|
|
9
|
+
/** The device of the event being handled, or `null` outside an event. */
|
|
10
|
+
readonly currentEventDevice: GTKDevice | null
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
declare class GTKEventController<M extends Record<keyof M, unknown[]> = {}> {
|
|
14
|
+
protected constructor()
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export = GTKEventController
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#ifndef BARE_GTK_EVENT_CONTROLLER_H
|
|
2
|
+
#define BARE_GTK_EVENT_CONTROLLER_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_event_controller_event_mask(js_env_t *env, js_callback_info_t *info) {
|
|
13
|
+
int err;
|
|
14
|
+
|
|
15
|
+
size_t argc = 2;
|
|
16
|
+
js_value_t *argv[2];
|
|
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 == 2);
|
|
23
|
+
|
|
24
|
+
GtkEventController *controller;
|
|
25
|
+
err = bare_gobject_read_tag(env, state->registry, argv[0], "controller", (gpointer *) &controller);
|
|
26
|
+
if (err < 0) return NULL;
|
|
27
|
+
|
|
28
|
+
uint32_t events;
|
|
29
|
+
err = bare_gtk__read_uint32(env, argv[1], "events", &events);
|
|
30
|
+
if (err < 0) return NULL;
|
|
31
|
+
|
|
32
|
+
bare_gtk__observe(state, controller, events);
|
|
33
|
+
|
|
34
|
+
return NULL;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
static js_value_t *
|
|
38
|
+
bare_gtk_event_controller_propagation_phase(js_env_t *env, js_callback_info_t *info) {
|
|
39
|
+
int err;
|
|
40
|
+
|
|
41
|
+
size_t argc = 2;
|
|
42
|
+
js_value_t *argv[2];
|
|
43
|
+
|
|
44
|
+
bare_gtk_state_t *state;
|
|
45
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
|
|
46
|
+
assert(err == 0);
|
|
47
|
+
|
|
48
|
+
assert(argc == 1 || argc == 2);
|
|
49
|
+
|
|
50
|
+
GtkEventController *controller;
|
|
51
|
+
err = bare_gobject_read_tag(env, state->registry, argv[0], "controller", (gpointer *) &controller);
|
|
52
|
+
if (err < 0) return NULL;
|
|
53
|
+
|
|
54
|
+
if (argc == 1) {
|
|
55
|
+
js_value_t *result;
|
|
56
|
+
err = js_create_uint32(env, gtk_event_controller_get_propagation_phase(controller), &result);
|
|
57
|
+
assert(err == 0);
|
|
58
|
+
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
uint32_t phase;
|
|
63
|
+
err = bare_gtk__read_uint32(env, argv[1], "phase", &phase);
|
|
64
|
+
if (err < 0) return NULL;
|
|
65
|
+
|
|
66
|
+
gtk_event_controller_set_propagation_phase(controller, phase);
|
|
67
|
+
|
|
68
|
+
return NULL;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
static js_value_t *
|
|
72
|
+
bare_gtk_event_controller_current_event_device(js_env_t *env, js_callback_info_t *info) {
|
|
73
|
+
int err;
|
|
74
|
+
|
|
75
|
+
size_t argc = 1;
|
|
76
|
+
js_value_t *argv[1];
|
|
77
|
+
|
|
78
|
+
bare_gtk_state_t *state;
|
|
79
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
|
|
80
|
+
assert(err == 0);
|
|
81
|
+
|
|
82
|
+
assert(argc == 1);
|
|
83
|
+
|
|
84
|
+
GtkEventController *controller;
|
|
85
|
+
err = bare_gobject_read_tag(env, state->registry, argv[0], "controller", (gpointer *) &controller);
|
|
86
|
+
if (err < 0) return NULL;
|
|
87
|
+
|
|
88
|
+
GdkDevice *device = gtk_event_controller_get_current_event_device(controller);
|
|
89
|
+
|
|
90
|
+
js_value_t *result;
|
|
91
|
+
|
|
92
|
+
if (device == NULL) {
|
|
93
|
+
err = js_get_null(env, &result);
|
|
94
|
+
assert(err == 0);
|
|
95
|
+
} else {
|
|
96
|
+
err = js_create_uint32(env, bare_gobject_tag(state->registry, device), &result);
|
|
97
|
+
assert(err == 0);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
#endif // BARE_GTK_EVENT_CONTROLLER_H
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const binding = require('../binding')
|
|
2
|
+
const GObject = require('./object')
|
|
3
|
+
const wrap = require('./wrap')
|
|
4
|
+
const GTKDevice = require('./device')
|
|
5
|
+
|
|
6
|
+
module.exports = exports = class GTKEventController extends GObject {
|
|
7
|
+
_eventMask(mask) {
|
|
8
|
+
binding.eventControllerEventMask(this._tag, mask)
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
get propagationPhase() {
|
|
12
|
+
return binding.eventControllerPropagationPhase(this._tag)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
set propagationPhase(phase) {
|
|
16
|
+
binding.eventControllerPropagationPhase(this._tag, phase)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
get currentEventDevice() {
|
|
20
|
+
return wrap(GTKDevice, binding.eventControllerCurrentEventDevice(this._tag))
|
|
21
|
+
}
|
|
22
|
+
}
|
package/lib/events.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module.exports = exports = function observe(target) {
|
|
2
|
+
const events = target.constructor._events
|
|
3
|
+
|
|
4
|
+
if (events === undefined) return
|
|
5
|
+
|
|
6
|
+
let mask = 0
|
|
7
|
+
|
|
8
|
+
target
|
|
9
|
+
.on('newListener', (name) => {
|
|
10
|
+
const bit = events[name]
|
|
11
|
+
|
|
12
|
+
if (bit === undefined || target.listenerCount(name) !== 0) return
|
|
13
|
+
|
|
14
|
+
target._eventMask((mask |= bit))
|
|
15
|
+
})
|
|
16
|
+
.on('removeListener', (name) => {
|
|
17
|
+
const bit = events[name]
|
|
18
|
+
|
|
19
|
+
if (bit === undefined || target.listenerCount(name) !== 0) return
|
|
20
|
+
|
|
21
|
+
target._eventMask((mask &= ~bit))
|
|
22
|
+
})
|
|
23
|
+
}
|
package/lib/fixed.d.ts
ADDED
package/lib/fixed.h
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#ifndef BARE_GTK_FIXED_H
|
|
2
|
+
#define BARE_GTK_FIXED_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_fixed_init(js_env_t *env, js_callback_info_t *info) {
|
|
13
|
+
int err;
|
|
14
|
+
|
|
15
|
+
bare_gtk_state_t *state;
|
|
16
|
+
err = js_get_callback_info(env, info, NULL, NULL, NULL, (void **) &state);
|
|
17
|
+
assert(err == 0);
|
|
18
|
+
|
|
19
|
+
GtkWidget *fixed = gtk_fixed_new();
|
|
20
|
+
|
|
21
|
+
js_value_t *result;
|
|
22
|
+
err = js_create_uint32(env, bare_gobject_tag(state->registry, fixed), &result);
|
|
23
|
+
assert(err == 0);
|
|
24
|
+
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
#endif // BARE_GTK_FIXED_H
|
package/lib/fixed.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const BareFrameLayout = require('./frame-layout')
|
|
2
|
+
const GTKFixed = require('./fixed')
|
|
3
|
+
|
|
4
|
+
module.exports = exports = class BareFrameFixed extends GTKFixed {
|
|
5
|
+
constructor(opts = {}) {
|
|
6
|
+
super(opts)
|
|
7
|
+
|
|
8
|
+
const { tag = null } = opts
|
|
9
|
+
|
|
10
|
+
if (tag === null) this.layoutManager = new BareFrameLayout()
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import GTKLayoutChild = require('./layout-child')
|
|
2
|
+
|
|
3
|
+
/** The frame of one child of a `BareFrameLayout`. */
|
|
4
|
+
interface BareFrameLayoutChild extends GTKLayoutChild {
|
|
5
|
+
/** Where the child is placed, as `[x, y, width, height]`. */
|
|
6
|
+
get frame(): [x: number, y: number, width: number, height: number]
|
|
7
|
+
set frame(frame: [x: number, y: number, width: number, height: number])
|
|
8
|
+
|
|
9
|
+
/** A 3D transform for the child, as sixteen numbers in the order CSS uses for `matrix3d()`. */
|
|
10
|
+
set transform(transform: number[])
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
declare class BareFrameLayoutChild {
|
|
14
|
+
protected constructor()
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export = BareFrameLayoutChild
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
const binding = require('../binding')
|
|
2
|
+
const GTKLayoutChild = require('./layout-child')
|
|
3
|
+
|
|
4
|
+
module.exports = exports = class BareFrameLayoutChild extends GTKLayoutChild {
|
|
5
|
+
get frame() {
|
|
6
|
+
return binding.frameLayoutChildFrame(this._tag)
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
set frame([x, y, width, height]) {
|
|
10
|
+
binding.frameLayoutChildFrame(this._tag, x, y, width, height)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
set transform(value) {
|
|
14
|
+
binding.frameLayoutChildTransform(this._tag, value)
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import GTKLayoutManager = require('./layout-manager')
|
|
2
|
+
import BareFrameLayoutChild = require('./frame-layout-child')
|
|
3
|
+
import GTKWidget = require('./widget')
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* A layout manager that gives each child an exact frame. GTK's own managers size a child from
|
|
7
|
+
* what it prefers. Set a frame through the `BareFrameLayoutChild` of each child.
|
|
8
|
+
*/
|
|
9
|
+
interface BareFrameLayout extends GTKLayoutManager<BareFrameLayout.Events> {
|
|
10
|
+
getLayoutChild(widget: GTKWidget): BareFrameLayoutChild | null
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
declare class BareFrameLayout {
|
|
14
|
+
constructor()
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
declare namespace BareFrameLayout {
|
|
18
|
+
export interface Events {
|
|
19
|
+
/**
|
|
20
|
+
* The widget is being laid out at `width` by `height`. Frames set from a listener apply in
|
|
21
|
+
* this layout. A listener must not change the widget tree.
|
|
22
|
+
*/
|
|
23
|
+
resize: [width: number, height: number]
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export = BareFrameLayout
|