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: 5167914d728fb5aeac87f169462d2d34ecb6ac7a9e0dc9a0a192343161d6da36
4
- data.tar.gz: 5f852eee9e1fa867c97969c72ad00991c877ccf8db00c1a69b07d141fe002b3b
3
+ metadata.gz: 5494b5713dbb7f0c3662a93c3a966654088ab3f0f18995d3d8800636b5c047ef
4
+ data.tar.gz: ddd397cc8989c331a6ed9be6f362d775ef7ef93647567902cb85a96e28013a68
5
5
  SHA512:
6
- metadata.gz: 5b74ac61bfce0be63ce301e3ff6d42a8e41d23a4d55a34e3da52bea589fda6ebd66c1762dd549ffe45dd757916d9d07fb337bc5dda86168143f72d2e881b7ddd
7
- data.tar.gz: f5dc66d02648cecc5b4afa4d9551974f4b01850b31d3f56120ec84cb85a4da3da806b9efae9fb77e6d51dca8200d291f3d5d10a1a2c3509aea1e7ec7c767c3ad
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 gesture keypress].freeze
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 event is detected
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: layer, remove: true)
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
- hold_events = fetch_hold_events(buffers)
52
- MultiLogger.debug "hold_events: #{hold_events.map(&:record).map { |r| "#{r.finger} #{r.gesture} #{r.status}" }}"
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: 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
- # Change remap layer of fusuma-plugin-remap
71
- # @param context [Hash]
72
- def add_layer
73
- Fusuma::Plugin::Remap::Layer.add({thumbsense: true})
74
- end
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
- # Remove remap layer of fusuma-plugin-remap
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
- thumbsense_buffer.events.any? { |e| (e.record.status == "palm") }
118
- end
119
-
120
- def palm_count(thumbsense_buffer)
121
- thumbsense_buffer.events.count { |e| (e.record.status == "palm") }
122
- end
123
-
124
- def thumbsense_keys
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
@@ -3,7 +3,7 @@
3
3
  module Fusuma
4
4
  module Plugin
5
5
  module Thumbsense
6
- VERSION = "0.2.0"
6
+ VERSION = "0.3.0"
7
7
  end
8
8
  end
9
9
  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.2.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-19 00:00:00.000000000 Z
11
+ date: 2023-08-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fusuma