librime 1.2
Rime Input Method Engine, the core library
chord_composer.h
Go to the documentation of this file.
1//
2// Copyright RIME Developers
3// Distributed under the BSD License
4//
5// 2012-06-05 GONG Chen <chen.sst@gmail.com>
6//
7#ifndef RIME_CHORD_COMPOSER_H_
8#define RIME_CHORD_COMPOSER_H_
9
10#include <rime/common.h>
11#include <rime/component.h>
12#include <rime/key_event.h>
13#include <rime/processor.h>
14#include <rime/algo/algebra.h>
16
17namespace rime {
18
19using Chord = set<int>;
20
24
25 bool IsPressed(int ch) const {
26 return pressed_keys.find(ch) != pressed_keys.end();
27 }
28
29 bool PressKey(int ch) { return pressed_keys.insert(ch).second; }
30
31 bool ReleaseKey(int ch) { return pressed_keys.erase(ch) != 0; }
32
33 bool AddKeyToChord(int ch) { return recognized_chord.insert(ch).second; }
34
35 void Clear() {
36 pressed_keys.clear();
37 recognized_chord.clear();
38 }
39};
40
41class ChordComposer : public Processor,
42 public KeyBindingProcessor<ChordComposer> {
43 public:
44 ChordComposer(const Ticket& ticket);
46
47 virtual ProcessResult ProcessKeyEvent(const KeyEvent& key_event);
48
50
51 protected:
52 bool FinishChordConditionIsMet() const;
55 string SerializeChord(const Chord& chord);
56 void UpdateChord(const Chord& chord);
57 void FinishChord(const Chord& chord);
58 void ClearChord();
60 void OnContextUpdate(Context* ctx);
61 void OnUnhandledKey(Context* ctx, const KeyEvent& key);
62
64 string delimiter_;
68 bool use_control_ = false;
69 bool use_alt_ = false;
70 bool use_shift_ = false;
71 bool use_super_ = false;
72 bool use_caps_ = false;
74
76 bool editing_chord_ = false;
77 bool sending_chord_ = false;
78 bool composing_ = false;
82};
83
84} // namespace rime
85
86#endif // RIME_CHORD_COMPOSER_H_
Definition algebra.cc:12
set< int > Chord
Definition chord_composer.h:19
ProcessResult
Definition processor.h:18
Definition algebra.h:29
Definition context.h:19
Definition chord_composer.h:21
void Clear()
Definition chord_composer.h:35
Chord pressed_keys
Definition chord_composer.h:22
bool AddKeyToChord(int ch)
Definition chord_composer.h:33
bool PressKey(int ch)
Definition chord_composer.h:29
Chord recognized_chord
Definition chord_composer.h:23
bool ReleaseKey(int ch)
Definition chord_composer.h:31
bool IsPressed(int ch) const
Definition chord_composer.h:25
ChordingState state_
Definition chord_composer.h:75
bool editing_chord_
Definition chord_composer.h:76
connection unhandled_key_connection_
Definition chord_composer.h:81
string delimiter_
Definition chord_composer.h:64
bool FinishChordConditionIsMet() const
Definition chord_composer.cc:110
ProcessResult ProcessChordingKey(const KeyEvent &key_event)
Definition chord_composer.cc:115
Projection algebra_
Definition chord_composer.h:65
void ClearChord()
Definition chord_composer.cc:237
virtual ProcessResult ProcessKeyEvent(const KeyEvent &key_event)
Definition chord_composer.cc:152
bool use_super_
Definition chord_composer.h:71
KeySequence chording_keys_
Definition chord_composer.h:63
Handler CommitRawInput
Definition chord_composer.h:49
bool sending_chord_
Definition chord_composer.h:77
string SerializeChord(const Chord &chord)
Definition chord_composer.cc:179
void OnUnhandledKey(Context *ctx, const KeyEvent &key)
Definition chord_composer.cc:265
bool use_control_
Definition chord_composer.h:68
void UpdateChord(const Chord &chord)
Definition chord_composer.cc:190
string raw_sequence_
Definition chord_composer.h:79
void FinishChord(const Chord &chord)
Definition chord_composer.cc:215
ProcessResult ProcessFunctionKey(const KeyEvent &key_event)
Definition chord_composer.cc:73
bool use_caps_
Definition chord_composer.h:72
bool finish_chord_on_first_key_release_
Definition chord_composer.h:73
bool use_alt_
Definition chord_composer.h:69
connection update_connection_
Definition chord_composer.h:80
Projection output_format_
Definition chord_composer.h:66
ChordComposer(const Ticket &ticket)
Definition chord_composer.cc:24
bool use_shift_
Definition chord_composer.h:70
void OnContextUpdate(Context *ctx)
Definition chord_composer.cc:253
Projection prompt_format_
Definition chord_composer.h:67
bool composing_
Definition chord_composer.h:78
KeyBindingProcessor(ActionDef *action_definitions)
Definition key_binding_processor.h:36
bool Handler(Context *ctx)
Definition key_binding_processor.h:19
Definition key_event.h:17
Definition key_event.h:59
Processor(const Ticket &ticket)
Definition processor.h:26
Definition ticket.h:17