fusuma-plugin-thumbsense 0.1.5 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5d0537256a434caffdd6352ed5fc05c87b2cd42390cda27a99fd82a70333b0ce
4
- data.tar.gz: fe06a449472593962f48a12b90fd924ff8237ce2d941baea2c860109fb00f61c
3
+ metadata.gz: 5494b5713dbb7f0c3662a93c3a966654088ab3f0f18995d3d8800636b5c047ef
4
+ data.tar.gz: ddd397cc8989c331a6ed9be6f362d775ef7ef93647567902cb85a96e28013a68
5
5
  SHA512:
6
- metadata.gz: a064ff6b695e31fc3a659e2df78cae7e5f662a45db76a99f165a04675e1773bd6d1feada686bfad5563ce44fb06bbf56f255d65c6ad76133df14366f651c349f
7
- data.tar.gz: '08f214210a1b45169dacca331ce07f3a2c480346b90fd71c89438b4cbac68f94330ae461f59fc4f8e58b8f7bce46a1dcf6d597b077bf385978f64594ce03b1b4'
6
+ metadata.gz: 5c36d63723ec56dc2ab0f17a7f8d7de68a56e5956215a9abd5b04f2213589bd1df47c659de0a9067523fd744192540eb663653059479e44d6f92208fab795e46
7
+ data.tar.gz: 12d14e2f883e3d8e3bf824388ba494a0527f0076b38040abea187aa6883cbc9d219d9cdbcb251c59a77dbf13d439ee6d87a72ed2db9f4e794a1e88e90e9d3e1c
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Fusuma::Plugin::Thumbsense [![Gem Version](https://badge.fury.io/rb/fusuma-plugin-thumbsense.svg)](https://badge.fury.io/rb/fusuma-plugin-thumbsense) [![Build Status](https://github.com/iberianpig/fusuma-plugin-thumbsense/actions/workflows/ubuntu.yml/badge.svg)](https://github.com/iberianpig/fusuma-plugin-thumbsense/actions/workflows/ubuntu.yml)
1
+ # Fusuma::Plugin::Thumbsense [![Gem Version](https://badge.fury.io/rb/fusuma-plugin-thumbsense.svg)](https://badge.fury.io/rb/fusuma-plugin-thumbsense) [![Build Status](https://github.com/iberianpig/fusuma-plugin-thumbsense/actions/workflows/main.yml/badge.svg)](https://github.com/iberianpig/fusuma-plugin-thumbsense/actions/workflows/main.yml)
2
2
 
3
3
  **THIS PLUGIN IS EXPERIMENTAL.**
4
4
 
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
23
23
 
24
24
  spec.required_ruby_version = ">= 2.5.1" # https://packages.ubuntu.com/search?keywords=ruby&searchon=names&exact=1&suite=all&section=main
25
25
  # support bionic (18.04LTS) 2.5.1
26
- spec.add_dependency "fusuma", "~> 2.0"
26
+ spec.add_dependency "fusuma", ">= 2.0"
27
27
  spec.add_dependency "fusuma-plugin-keypress", ">= 0.5"
28
28
  spec.add_dependency "fusuma-plugin-remap"
29
29
  spec.metadata = {
@@ -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.1.5"
6
+ VERSION = "0.3.0"
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fusuma-plugin-thumbsense
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
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-06-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
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '2.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.0'
27
27
  - !ruby/object:Gem::Dependency