librime icon indicating copy to clipboard operation
librime copied to clipboard

再問幾個觸屏相關的功能

Open osfans opened this issue 9 years ago • 18 comments

不知有無現成或者間接的接口。沒有的話,我可以自己提交pull request吧?

  1. 直接設定當前高亮的候選項,目前好像只能通過發送Up/Down按鍵事件設定。觸屏可以通過長按或滑動設定。
  2. 直接設定當前編碼區RimeComposition的光標位置,目前好像只能通過發送Left/Right等按鍵事件移動光標位置。觸屏可以直接點擊設定光標位置。
  3. 獲取所有候選字。這個可能會慢,不知是否可行。#38 select_candidate 已經實現從所有候選字中選擇。

osfans avatar Aug 01 '15 13:08 osfans

  1. 這事要比 segment.selected_index = index 略爲複雜,因爲取候選字是用多少從 Menu::merged_ 取多少,不過在取字時 Segment::GetSelectedCandidate() 會調 Menu::Prepare() 保證取夠。所以看樣能做。
  2. Context::set_caret_pos(index) 調到這裏就中了。
  3. 不太建議獲取「所有」的,最好造一個迭代器依次取得。 最近有重構代碼的想法。同時在看 Rust,心得是有不少基礎概念需要在代碼裏有所對應。比如 Translation 之類應該實現 begin(), end() 然後就可以 for (auto candidate : translation) {...} 這只是就 C++ 代碼來說。C API 我也希望在框架(沿以數據爲中心的思路)繼續簡化後能有一個封裝 API 的套路存取內部狀態。

lotem avatar Aug 02 '15 01:08 lotem

第二個做好了,已提交PR。在安卓上親測有效。

osfans avatar Aug 05 '15 08:08 osfans

@llf10811020205 來看看老大的回覆。第一點和第三點。

osfans avatar Sep 17 '15 09:09 osfans

@osfans 主要是不知道下一页候选字应该怎么获取,所以才会想获取全部的候选字

llf10811020205 avatar Sep 17 '15 09:09 llf10811020205

@llf10811020205 好像也不容易。發一個Page_Down過去,翻到下一頁?

osfans avatar Sep 17 '15 09:09 osfans

@osfans @lotem simulate_key_sequence 里面给一个字符串,后面加一个 . 打印出来的候选字貌似是第二页的,但是这个机制到底是怎么样的还要老大解释一下??

llf10811020205 avatar Sep 17 '15 10:09 llf10811020205

句號.也是翻頁,相當於Page_Down。 可以看這裏: https://github.com/rime/librime/blob/develop/data/minimal/default.yaml#L119

osfans avatar Sep 17 '15 10:09 osfans

@osfans @lotem 小狼毫是不是只能通过数字键上屏,怎么设定光标选择候选区域去上屏了?

llf10811020205 avatar Nov 11 '15 02:11 llf10811020205

嗯,根據區域自己算出序號,然後調Bool (*select_candidate)(RimeSessionId session_id, size_t index);

osfans avatar Nov 11 '15 02:11 osfans

@osfans 想法是这样子的,但是不知道weasel当时为什么不加这个功能了?

llf10811020205 avatar Nov 11 '15 02:11 llf10811020205

現在ibus-rime、fcitx-rime、trime都有這個功能的。 https://github.com/rime/ibus-rime/blob/master/rime_engine.c#L492

osfans avatar Nov 11 '15 02:11 osfans

@osfans 也就是说目前weasel想使用这个功能的话,需要自己加咯

llf10811020205 avatar Nov 11 '15 02:11 llf10811020205

看起來是,你可以加了提交。不過,好像老大目前主攻win10上的rime-gits了?

osfans avatar Nov 11 '15 03:11 osfans

通过上下方向键,使候选字在选中状态下,再按空格或回车键上屏。

还是说通过鼠标点击选字? 我听前辈说 Windows IME 窗口处理鼠标事件好像有点特别的,不同于通常应用里的窗口。一直没做过,不知有人懂嘛。

lotem avatar Nov 11 '15 03:11 lotem

最近我忙于俗务,没时间写了。拜托大家先研究着。

lotem avatar Nov 11 '15 03:11 lotem

@lotem 那我就先看看Window IME窗口是怎么处理鼠标事件的

llf10811020205 avatar Nov 11 '15 03:11 llf10811020205

@lotem 这个是否可以根据鼠标单击左键的事件了通知,再根據區域算出序號,然後調Bool (*select_candidate)(RimeSessionId session_id, size_t index);目前这种想法是否可取?

llf10811020205 avatar Nov 11 '15 07:11 llf10811020205

@lotem 老大,我目前再研究Windows IME 窗口处理鼠标事件实现小狼毫鼠标点击上屏,请问这里面有什么特别,小狼毫要做这个需要注意一些什么?在哪个部分加鼠标处理比较合理?

llf10811020205 avatar Nov 13 '15 07:11 llf10811020205