在開發落格輸入法的時候,我遇到了這麼一件事情,就是作為候選欄的窗口會在屏幕邊緣的時候超出屏幕去!所以,在顯示窗口的時候我根據坐標做了額外的檢查:

總之,就是說如果坐標算上自己的寬度超過了屏幕的寬度,就把它挪回來。

但是,這樣處理不能在多顯示器下工作良好,這時由於多顯示器坐標導致的:

macOS 的多顯示器坐標機制

macOS 上的多顯示器坐標機制

如上圖所示,當用戶擁有多個顯示器時,顯示器的坐標是合併在一起的,同樣遵循左負右正的規則,這種情況下,當你的用戶在右側屏幕打字時,一旦光標插入點位置坐標大於屏幕最大坐標(別忘了,右側屏幕坐標最大值大於它本身寬高),窗口就不會繼續往右走了。

這時,要對不同屏幕坐標進行矯正,即不使用屏幕分辨率大小作為判斷依據,而是要用屏幕寬高加當前屏幕原點偏移!那麼修改後的代碼如下:

這樣,在多顯示器上,不論用戶如何安排顯示器排列,候選窗口都不會超出當前屏幕邊緣了。

app 窗口全屏問題

這裡有一個坑值得談談,就是 macOS 上的 work space,多個桌面機制一直是 macOS 優秀的地方,難得的是——你根本沒有任何 api 去檢查用戶在哪個 space 中……

這本來也沒什麼,可在多屏幕的模式下就出了問題——用戶只要在外接屏幕全屏一個app,你就無法獲取到正確的屏幕大小了——所以上文中的糾正也就無從談起。

當你全屏一個app,在此模式下,獲取的屏幕大小永遠是主屏幕的大小,無論是在哪個屏幕上。

所幸,獲取到的輸入點坐標還是正確的,所以我還能遍歷所有屏幕來查找究竟插入點在哪個屏幕上,然後再根據這個屏幕進行偏移處理。

所以,完整的代碼是這樣的:

 

由...出版 R0uter

如非聲明,本人所著文章均為原創手打,轉載請註明本頁面鏈接和我的名字。

加入對話

2 註釋

您的電子郵件地址不會被公開. 必填字段標 *

  1. 開發者您好,買了您開發的macOS2輸入法,很好用。
    但有一小點不足的地方:我macOS(10.13.6)+一個外接顯示器。我在外接顯示器上全屏某個APP,用shift切換中英文狀態時的提示(“En”或“中”的切換)無法表示。沒有外接顯示器只用macOS時,全屏的APP也有這個現象。僅供參考。