2017年1月18日 (水)

キートップを表示して、押されたキーを判断するようにする

キーボードの外観だけで、なんのキーなのかさっぱり分からないのでキートップを表示するようにしました。

QPainter::drawText()には表示する長方形領域(QRect)、文字列(QString)を渡して、ついでに真ん中に表示してねとパラメータで指定すればQRectの真ん中に文字列を表示してくれる関数があるのでそれを利用します。

指定するQRectはキーボードを描画するときに使ったQRectがそのまま利用できますので、キートップに表示する文字列だけを用意すれば良さそうです。

ついでにソフトウェア・ボタンも用意しました。テストのためにすべてのボタンを表示するようにしていますが、KeroRemote のように、必要なボタンのみが表示されるように制御する予定です。

Ws000036

上向きカーソルキーの左のキーは円マーク(¥)でなくバックスラッシュ(\)を表示させたいですね。

Ubuntu でビルド、実行するとこんな感じです。

Ubuntu_x6420170118202211

マウスでクリックしたり、タッチパネルでタッチするとイベントが発生します。このイベント情報からクリックした場所(x,y)がQPointの形で取得できるのでこれを使ってどのキーが指定されたのかを地道に判断します。

ここでもキーボードの描画に使ったQRectが使えますね。クリックした場所がどのキーの領域に入っているかを判断すればよさそうです。

Qt Assistantを起動してQRectに使えそうなメンバー関数がないか調べてみるとcontains()というメンバー関数が使えそうです。

bool QRect::contains(const QPoint &point, bool proper=false)

エッジを領域外としたい場合はproperを明示的にtrueで指定すれば良いそうです。

これを利用して各キーの領域を調べることにします。1つ1つ地道にキー表示領域を調べるので最大、キーの個数回も領域チェックしてしまいますが、まぁ大きな問題はないかと…(*^-^)

背景色、文字色、フォント、背景の属性、リサイズした場合の表示計算の方法など検討すべきところはまだまだ沢山ありそうです…

2017年1月16日 (月)

キーレイアウト用のデータが出来上がりました


地味に定規で測った後微調整してキーレイアウト用基本データが出来上がりました。こんな感じです。

  // original size
  static const int WIDTH = 270;
  static const int HEIGHT = 75;

  // layout entry
  typedef struct {
	QRect rect;
	ID_KEY id;
  } KeyLayout;

  // layout table for keyboard
  KeyLayout layout[ID_KEY_NUM] = {
	//       x,  y,  w,  h   key
	{QRect(  0,  0,  0,  0), ID_KEY_0}, // dummy entry

	// 1st row
	{QRect(  0,  0, 18, 15), ID_KEY_1},
	{QRect( 18,  0, 18, 15), ID_KEY_2},
	{QRect( 36,  0, 18, 15), ID_KEY_3},
	{QRect( 54,  0, 18, 15), ID_KEY_4},
	{QRect( 72,  0, 18, 15), ID_KEY_5},
	{QRect( 90,  0, 18, 15), ID_KEY_6},
	{QRect(108,  0, 18, 15), ID_KEY_7},
	{QRect(126,  0, 18, 15), ID_KEY_8},
	{QRect(144,  0, 18, 15), ID_KEY_9},
	{QRect(162,  0, 18, 15), ID_KEY_10},
	{QRect(180,  0, 18, 15), ID_KEY_11},
	{QRect(198,  0, 18, 15), ID_KEY_12},
	{QRect(216,  0, 18, 15), ID_KEY_13},
	{QRect(234,  0, 18, 15), ID_KEY_14},
	{QRect(252,  0, 18, 15), ID_KEY_15},

	// 2nd row
	{QRect(  0, 15, 24, 15), ID_KEY_16},
	{QRect( 24, 15, 18, 15), ID_KEY_17},
                       :
                       :


テスト用のWidgetクラスで、このデータを元にサイズを5倍に拡大して、drawRect()で描画するとこんな感じになりました。

Kerokeyboardwithqt000



なんとなく KeroKeyboard のバッタモンにはみえるかも(*^-^)

2017年1月11日 (水)

スクリーンキーボード KeroKeyboard を Qt で実現しよう

現在のソフトウェア・キーボード/ボタンはQt Designerで作成したウィジェットをベースに実装していますが、なかなか思うようなものにならなそうなので現在の実装を捨てようと思います。実装自体は泥臭くなってしまうとは思うのですが…

で、キーレイアウトの見本としたKeroRemoteのレイアウトを真似しようかと思ったのですが最近リリースされたKeroKeyboardが手本とするのにいいかもと思いました、Windows上で試せるので。

作者のIchiGekiさんに連絡して「レイアウトをパク…じゃなくて真似させてください(^_^)」とお願いして、ご了承頂きました。

キーのおおよその配置はこれまでもKeroRemoteを真似していたのですが、実際のキーの位置、キーの大きさの情報を計算するのにKeroKeyboardを参考にさせていただくことにしました。

画面上でドットレベルで確認する方法もあるのですが、おおよその配置が分かればいいので今回はKeroKeyboardのウィンドウをキャプチャし、プリンタでA4サイズで印刷して定規で測るという低レベルヽ(´▽`)/な方法をとりました。

Kerokeyboard


A4サイズで印刷すると270 mm x 75 mmという切りの良いサイズにKeroKeyboardが印刷されたのでこれを元に地味に測りました。キーの高さは15mm、ただしEnterキーだけは2つ分の30mm、幅は通常のキーで18mm、スペースキーは72mm…という感じです。これらの値を基本データとして持っておいてリサイズ時の実配置を計算するのに使います。

また現在はキーの情報をソースコード中に持っているのですが、これを機に外部ファイルに分離することにしました。

人が読める形のテキストファイルなので外部ファイルを追加すれば日本語、英語以外のキーボードにも対応できるメリットがあります。(キーボードタイプの情報も同様に外部ファイルに分離するのがいいのですが、まずはこちらを優先しようかと思います)

基本的なデータは揃ったので、これからKeroKeyboardをQtで実現してみます。キーイベントを実際に投げるところまでは実装しないかもしれませんが、見た目KeroKeyboard with Qtを目標とします。

もし需要があればKeroKeyboard on Mac/Linuxとかも実現できるかも…

2016年12月20日 (火)

Qt5.7.1がリリースされてました

Android用のパッケージを作る準備をしようと思い調べていたらQt5.7.1が12月14日にリリースされてました。

Qt5.8が来年早々(1/5)にリリースされる予定らしいので無理に試す必要はなさそうかなと思ったのですが一応確認してみましたが、特に問題ありませんでした。個人的にはqmakeの意味不明なメッセージが出なくなってスッキリしました。

(当然ですが今日リリースされた「プロ生ちゃんリモートデスクトップ」にも接続できました)

Qt 5.7 のリリーススケジュール

Qt 5.7 Release Wiki

Qt 5.8 のリリーススケジュール

Qt 5.8 Release Wiki

Qt5.8ではGamepadを扱えるパッケージが正式に入るらしいのでWindows以外からでもRagnarok経由でGamepadが使えるかもと期待しているのですが…

(追記)

標準のメニュー表示場所がシステム指定優先となったようです。このためUbuntu上では他のアプリケーションと同じ場所にメニューが配置されるようになります。個人的には以前の場所がいいんですけどね…


話を戻しましてAndroidの件ですが、Android向けのパッケージに関しては昔少しだけ調べてました。

Deploying an Application on Android

手動でやるよりもQt Creatorを使うとapkを作成するためのファイル一式のテンプレートが簡単に作れるらしいのでとりあえずQt Creatorでビルドした後に出来るディレクトリ

build-qtbrynhildr-armeabi_v7a_Android_GCC_4_9_Qt_5_7_0-Release

の下を覗いてみました。

apkについての知識がほとんどなかったので最近発売された解説本「Androidアプリ開発パーフェクトマスター[最新版]」を眺めながら勉強しました。

android-buildディレクトリ以下にAndroidManifest.xmlを含むいくつかのxmlファイルとAndroidアプリ部分とQtアプリを橋渡しする部分のjavaソースなどが一通り用意されるようなので、これらのファイルをテンプレートとして使えばよいのですね。

テンプレートとして用意されるこれらのファイルの中身をちょっと覗いてみようと思います。

これらのファイルを適宜修正して、署名してやればなんとなくGoogle Playにアップロード出来るのでしょうけど、登録料25ドルが必要ですねぇ…ま、まだタッチイベント対応やキーボード/マウスボタンインターフェースの改善などやるべきことは多いのですけど。

2016年12月16日 (金)

Ver.1.6.1 リリース

CELTサポートに関する不具合修正を行いました。

以下からダウンロードできます。(Windows/Linux/Mac版)

https://github.com/funfun-dc5/qtbrynhildr/releases

主な変更は以下です。

[不具合修正]
・Brynhildrサーバのバージョンが1.1.5以下の時CELTを指定すると不正となる不具合
・onDisableBrynhildr2Support=falseを指定してもCELT指定が有効となる不具合修正

[その他変更]
・ドキュメントの修正漏れを修正

-----------------------------------------------------------------------------------
[SHA256SUM]
-----------------------------------------------------------------------------------
e8044db94114a17bb1f1a0b644b483235f6651d54e1e6329b732d58cfeb34414 *QtBrynhildr-documents-20161216.zip

24b6b76d9dac4defa097c82753288c843b648c5572ada898a5c95904ee9a7094 *QtBrynhildr-linux_x64-v161.run

f8ba5b271f1967cdc81c72d0fd81cd7bb542eac3c08451e15dfe5d6e37b981c5 *QtBrynhildr-linux_x86-v161.run

c67e35264602e603a5e6923d3d02ce8f28989f7863e1eff28e83161fbb9fa53a *QtBrynhildr-macosx_x64-v161.dmg

b9257beb2cad30fda3803194ef8af51a1d49409720c5f1d9dfc405c9e51c1a2a *QtBrynhildr-windows-v161.exe

2016年12月15日 (木)

Ver.1.6.0 リリース

CELTによるサウンドデータ転送をサポートしました。音質をあまり落とさずに転送するサウンドデータ量を抑えられます。

起動時に-celtオプションを指定する、もしくはQt Brynhildr.iniの"soundType=1"を

"soundType=2"

に書き換えることでCELTによるサウンドデータ転送が有効となります。

以下からダウンロードできます。(Windows/Linux/Mac版)

https://github.com/funfun-dc5/qtbrynhildr/releases

主な変更は以下です。

[新規機能]
・CELTによるサウンドデータ転送サポートを追加(-celtオプション)

[その他変更]
・ドキュメントの修正漏れを修正

-----------------------------------------------------------------------------------
[SHA256SUM]
-----------------------------------------------------------------------------------
ce867a44a972d18ffdbd4d6118eeee83bbc4bb846efa95b8c33f1ea011a212bb *QtBrynhildr-documents-20161214.zip

50ae67b3e696165c7cca5c8b3a5a0d0cb18fd1c0b56131bfa3631997bf50db2d *QtBrynhildr-linux_x64-v160.run

3f8b5546b566eabd045f554ca68073e37f133eb8070808a368f4b841cce1e919 *QtBrynhildr-linux_x86-v160.run

aafca98c4523e9af962331eed6a19659eada5d08b76227d888e3123a757dbe30 *QtBrynhildr-macosx_x64-v160.dmg

ae03f94e857d18c79634e3f41f1e092b8db9b248e3d119231dfc5ba0bf8a6490 *QtBrynhildr-windows-v160.exe

2016年12月 8日 (木)

Ver.1.5.9 リリース

「Brynhildr 2.2.1の新機能の取り込み」と「不具合修正」を行いました。

以下からダウンロードできます。(Windows/Linux/Mac版)

https://github.com/funfun-dc5/qtbrynhildr/releases

主な変更は以下です。

[不具合修正]
・パスワード間違いなどで接続できなかった場合にメニュー制御が不正となる不具合修正
・2GB以上のファイルを送受信しようとすると失敗した後接続が切断される不具合修正
・ファイル転送時の進捗表示が不正となる不具合修正

[新規機能]
・プラグインを無効化する機能(Brynhildr 2.2.1)の追加
・ファイル転送をキャンセルする機能(Brynhildr 2.2.1)の追加

[その他変更]
・メニュー文字列の一部変更(日本語のみ)

-----------------------------------------------------------------------------------
[SHA256SUM]
-----------------------------------------------------------------------------------
b54c012a93c5165c11bdaa0a7d3265445702bc46fd02f83f247ad6906609b42a *QtBrynhildr-documents-20161207.zip

c5d3b1a9dcc3ac79dac43404f3890820b6e901488a5dd441679e1ca4141797db *QtBrynhildr-linux_x64-v159.run

dc7cf92f1337a144b439967de098fffeb56830bd2c836e69f276f40017036c2d *QtBrynhildr-linux_x86-v159.run

c820b3b6588bbfbfbdf5d8f9680be80220102eef7a83adc3896ce86c08e1b829 *QtBrynhildr-macosx_x64-v159.dmg

5306d5f9b85fd6156a2fd61daebb8431d5a56f71df94eb481d2ba64cbeb2cd9e *QtBrynhildr-windows-v159.exe

2016年11月18日 (金)

あんまり関係ありません…

定期的なファイルのバックアップツールとして私は「BunBackup」を利用させていただいています。恐らくリリースされて間もないころからだと記憶していますので10年近くになるかもしれません。

なんとなくフリーなソフトウェアについて検索していて「BunBackup」の作者である Nagatsuki さんのブログを目にしました。

バックアップ用フリーソフト BunBackupについての一言 2016年 6月

フリーなソフトウェアを公開する側からのご意見です。私自身フリーなソフトウェアを公開する側に自分がなるとは数年前まで想像もしていませんでしたが、やはり同じように考えていらっしゃる方がいるのだなぁと思いました…

「BunBackup」以外にも「BunCalc」、「走録」を愛用していたりします。

公開ありがとうございます > Nagatsuki さま

2016年11月15日 (火)

VMware のインストール情報が消える…

VMware Workstation Pro 12.5.2 がリリースされたのでインストールしました。

ココ数回、VMwareが素直にアップデート出来ないので手動でまずアンインストールすることにしました。

で、まず IObit Uninstallerを起動して"VMware"で検索しても「VMware Workstation Pro」はリストに出てきません。「コントロールパネル」から「プログラムと機能」を選択してもやはり「VMware Workstation Pro」は出てきません。

「なんじゃ、こりゃ」と思ったのですが、明示的にアンインストールできないようので仕方なくインストーラを起動して、そこで「削除」を選んで削除しました。すぐに再起動を促されるので、素直に再起動します。

再起動後タスクマネージャでVMware関係のプロセスが動いていないことを確認し、デバイスマネージャでVMware関係のネットワークインタフェースが残っていないことを確認して、VMwareのフォルダーごと削除しました。

これできれいに削除できたはずなので、改めてインストールを行い正常に動作することを確認しました。

念のためIObit Uninstallerを起動して最近インストールしたアプリケーションにVMwareが表示されることを確認しました。

で、システムドライブの差分イメージを保存する前にいくつか入れているシステムクリーナーをかけておこうと思い、「Advanced System Care 9.4 Pro」、「Glary Utilities 5.63」、「CC Cleaner 5.23」を実行しました。

差分イメージを保存する直前に何の気なしにもう一度IObit Uninstallerを起動して確認しました。すると先ほどまであった「VMware Workstation Pro」がリストにないのです…

直前にかけた3つのシステムクリーナーのいずれかがVMwareのインストール情報を削除したとしか思えません。

結局Glary Utilitiesの1クリックメンテナンスを行うと VMware Workstation Pro のインストール情報がなくなることがわかりました…私の環境だけでしょうか?

もう1台あるノートPC(Windows10 Home(x64))にもVMware Workstation Playerをインストールしているのですが、同様の現象が再現しました。

インストール情報を消されてしまうとアップグレードがまともに出来ないのも納得かもと思ったのですが、うーん、必要なものまでクリーニングされると困りますね…

#インストーラを起動して、「修復」を行えばインストール情報が修復される、のかもしれませんけど。

2016年11月 8日 (火)

Ver.1.5.8 リリース

以下からダウンロードできます。(Windows/Linux/Mac版)

https://github.com/funfun-dc5/qtbrynhildr/releases


主な変更は以下です。

[不具合修正]
・終了時に警告メッセージが出力されたり、コアダンプする場合がある不具合修正
・ネットワーク通信の自動再接続後にフルスクリーン状態が復帰されないことがある不具合修正
・ネットワーク通信の自動再接続後にサウンドが再生されない不具合修正
・ネットワーク通信の自動再接続処理の改善
・最初の起動時に-initオプションを指定すると不正終了する不具合修正

[その他変更]
・ネットワーク通信の自動再接続試行時に画面クリアしないように変更
・最大化ボタン(Maximize Button)に対応
・起動時に「サーバに接続」ダイアログをポップアップするように変更(変更可)(*1)
・ドキュメントのMac版の制限の条件(Control+クリック)を修正
・Ubuntuで提供されているQt5パッケージを利用したビルドに対応

(*1) QtBrynhildr.iniで "onOpenConnectToServerDialogAtBootup=false" とすれば従来の動作となります

-----------------------------------------------------------------------------------
[SHA256SUM]
-----------------------------------------------------------------------------------
74879cc26164af1acd56c7ab353e851187d3e7653384f76e32ec62ca83c887f3 *QtBrynhildr-documents-20161106.zip

7e2dfe9321cb676bcd8226c678ad4314c86b2e4fd3b105319ba18d7874d3fa32 *QtBrynhildr-linux_x64-v158.run

e75a30d7a921abbd18a01457b92209db656545d4b648d1c4ca53b06a149a49f7 *QtBrynhildr-linux_x86-v158.run

a6d382f16cb39f119de10523a6e6abc8ab4af47ff65e6511de75ba8ce79ae798 *QtBrynhildr-macosx_x64-v158.dmg

02e6c49135295123ba42488f36c95247efc4550ec79eb9ae2aafbf3de6b5c5c5 *QtBrynhildr-windows-v158.exe

«Ubuntu 16.10 日本語Remix をVMwareにインストールする