fusuma-plugin-thumbsense 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5494b5713dbb7f0c3662a93c3a966654088ab3f0f18995d3d8800636b5c047ef
|
4
|
+
data.tar.gz: ddd397cc8989c331a6ed9be6f362d775ef7ef93647567902cb85a96e28013a68
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5c36d63723ec56dc2ab0f17a7f8d7de68a56e5956215a9abd5b04f2213589bd1df47c659de0a9067523fd744192540eb663653059479e44d6f92208fab795e46
|
7
|
+
data.tar.gz: 12d14e2f883e3d8e3bf824388ba494a0527f0076b38040abea187aa6883cbc9d219d9cdbcb251c59a77dbf13d439ee6d87a72ed2db9f4e794a1e88e90e9d3e1c
|
@@ -10,7 +10,7 @@ module Fusuma
|
|
10
10
|
module Detectors
|
11
11
|
# Detect Thumbsense context and change remap layer of fusuma-plugin-remap
|
12
12
|
class ThumbsenseDetector < Detector
|
13
|
-
SOURCES = %w[thumbsense
|
13
|
+
SOURCES = %w[thumbsense keypress].freeze
|
14
14
|
BUFFER_TYPE = "thumbsense"
|
15
15
|
|
16
16
|
MODIFIER_KEYS = Set.new(%w[
|
@@ -25,8 +25,11 @@ module Fusuma
|
|
25
25
|
RIGHTMETA
|
26
26
|
])
|
27
27
|
|
28
|
+
LAYER_CONTEXT = {thumbsense: true}.freeze
|
29
|
+
|
30
|
+
# Detect Context event and change remap layer of fusuma-plugin-remap
|
28
31
|
# @param buffers [Array<Buffer>]
|
29
|
-
# @return [Event] if
|
32
|
+
# @return [Event] if Thumbsense context is detected
|
30
33
|
# @return [NilClass] if event is NOT detected
|
31
34
|
def detect(buffers)
|
32
35
|
thumbsense_buffer = buffers.find { |b| b.type == BUFFER_TYPE }
|
@@ -36,57 +39,38 @@ module Fusuma
|
|
36
39
|
MultiLogger.debug("thumbsense_buffer: #{thumbsense_buffer.events.map(&:record).map { |r| "#{r.finger} #{r.gesture} #{r.status}" }}")
|
37
40
|
|
38
41
|
layer_manager = Fusuma::Plugin::Remap::LayerManager.instance
|
39
|
-
layer = {thumbsense: true}
|
40
42
|
|
41
43
|
if touch_released?(thumbsense_buffer)
|
42
|
-
layer_manager.send_layer(layer:
|
44
|
+
layer_manager.send_layer(layer: LAYER_CONTEXT, remove: true)
|
43
45
|
return
|
44
46
|
end
|
45
47
|
|
46
48
|
keypress_buffer = buffers.find { |b| b.type == "keypress" }
|
49
|
+
|
50
|
+
# If only modifier keys are pressed or no key is pressed
|
47
51
|
if pressed_codes(keypress_buffer).all? { |code| MODIFIER_KEYS.include?(code) }
|
48
52
|
|
49
53
|
# Even if the palm is detected, keep the thumbsense layer until `:end` event
|
50
54
|
if palm_detected?(thumbsense_buffer)
|
51
|
-
|
52
|
-
|
53
|
-
if hold_events.empty? || hold_events.last.record.status != "begin"
|
54
|
-
layer_manager.send_layer(layer: layer, remove: true)
|
55
|
-
return
|
56
|
-
end
|
55
|
+
layer_manager.send_layer(layer: LAYER_CONTEXT, remove: true)
|
56
|
+
return
|
57
57
|
end
|
58
58
|
|
59
|
-
layer_manager.send_layer(layer:
|
60
|
-
# FIXME: create thumbsense context
|
61
|
-
# record = Events::Records::ContextRecord.new(
|
62
|
-
# name: "thumbsense",
|
63
|
-
# value: true
|
64
|
-
# )
|
65
|
-
# return create_event(record: record)
|
66
|
-
end
|
67
|
-
nil
|
68
|
-
end
|
59
|
+
layer_manager.send_layer(layer: LAYER_CONTEXT)
|
69
60
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
61
|
+
# create thumbsense context
|
62
|
+
record = Events::Records::ContextRecord.new(
|
63
|
+
name: :thumbsense,
|
64
|
+
value: true
|
65
|
+
)
|
66
|
+
return create_event(record: record)
|
67
|
+
end
|
75
68
|
|
76
|
-
|
77
|
-
# @param context [Hash]
|
78
|
-
def remove_layer
|
79
|
-
Fusuma::Plugin::Remap::Layer.remove({thumbsense: true})
|
69
|
+
nil
|
80
70
|
end
|
81
71
|
|
82
72
|
private
|
83
73
|
|
84
|
-
def fetch_hold_events(buffers)
|
85
|
-
buffers.find { |b| b.type == "gesture" }
|
86
|
-
.select_from_last_begin
|
87
|
-
.select_by_events { |e| e.record.gesture == "hold" }.events
|
88
|
-
end
|
89
|
-
|
90
74
|
def pressed_codes(keypress_buffer)
|
91
75
|
records = keypress_buffer.events.map(&:record)
|
92
76
|
codes = []
|
@@ -113,15 +97,32 @@ module Fusuma
|
|
113
97
|
touch_num <= release_num
|
114
98
|
end
|
115
99
|
|
100
|
+
# Detect palm, except when there is another touch
|
101
|
+
# @param thumbsense_buffer [Buffer]
|
102
|
+
# @return [TrueClass, FalseClass]
|
116
103
|
def palm_detected?(thumbsense_buffer)
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
104
|
+
# finger is a number to distinguish different touches and palms
|
105
|
+
# If the count remains, it is judged as a touch state
|
106
|
+
touch_state_per_finger = {}
|
107
|
+
thumbsense_buffer.events.each do |e|
|
108
|
+
f = e.record.finger
|
109
|
+
touch_state_per_finger[f] ||= 0
|
110
|
+
|
111
|
+
case e.record.status
|
112
|
+
when "begin"
|
113
|
+
touch_state_per_finger[f] += 1
|
114
|
+
when "palm"
|
115
|
+
if touch_state_per_finger[f] < 0
|
116
|
+
# NOTE: If Palm continues, it is equivalent to end
|
117
|
+
touch_state_per_finger[f] = 0
|
118
|
+
else
|
119
|
+
touch_state_per_finger[f] -= 1
|
120
|
+
end
|
121
|
+
when "end"
|
122
|
+
touch_state_per_finger[f] = 0
|
123
|
+
end
|
124
|
+
end
|
125
|
+
touch_state_per_finger.values.all?(&:zero?)
|
125
126
|
end
|
126
127
|
end
|
127
128
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fusuma-plugin-thumbsense
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- iberianpig
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-08-
|
11
|
+
date: 2023-08-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fusuma
|