【2】SmartWrite
【2-0】設計意図
起動中に画面を見なくても操作できることを目的とする。これにより紙に近い操作を可能とし、たとえば暗闇で手探りで使うこともできるようになる。
そのため、タスクトレイやアイコンなどの画面上のオブジェクトを眼で見てタッチする方式よりも、画面の端のように、物理的な位置によって起動できる方法を重視する。

SmartWriteが文字認識をせず、ビットマップでペンの軌跡を残すのみとしているのは、誤認識の修正には厖大な手間がかかるが、メモを書いているときには、その手間をかけるほどの時間的余裕はないし、メモを見て修正する場合には、キーボードを用いたほうが遙に効率的で、したがって誤認識の修正をするような構造にすべきではない、ということからきている。事実、1990年ごろから、数度にわたって電子ペンを用いたシステムが開発されているが、これまでに成功例は皆無である。PDAまで含めても、成功例はない。ここでいう成功とは、製品が死なずにラインアップされ続けていることを意味する。辛うじて、シャープのZaurus程度だろう。
以上のことを考えれば、文字認識は技術的なトレンドではない。

× 画面上にフローティングボタンを用意する方法はとらない。
画面上にボタンを用意すると、その下の部分が画面内で死角になってしまうため。

【2-1】SmartWriteの起動と終了
●起動
・画面の左端に1ピクセルのウィンドウを常駐させ、そのウィンドウをタッチしたら起動する(表示は透明にして、最前面に出しておく)
・1ピクセルでタッチしにくい場合、ユーザーがピクセル数を設定可能とする。
1ピクセルでよい理由は、相対座標でタブレットを使っている場合には、画面の左端1ピクセル部分に移動するのがたいへんたやすいためである。
・常駐場所は設定可能とする。左端に常駐すると、左利きユーザーは、ペンの向きが逆で押せないため。

・画面の左端をロングクリックして起動する
・タスクトレイから起動する
・タスクトレイのボタンを右メニューで開いて起動する
・アイコンをダブルクリックして起動する
・アイコンをドラッグして起動する
・複数のアイコンをドラッグして起動する

●ダイレクト起動モード
・左端を下にドラッグして最後にクリックすると、画面をキャプチャーして起動する。

●終了
・画面の左端に1ピクセルのウィンドウを常駐、そこを右クリックするとSmartWriteの終了メニューを出す。
・画面の左端1ピクセルを左クリックすると、終了し、自動保存する。
・ジェスチャーでeで終了。

●保存
ファイル形式はExifおよびJPEGのアプリケーションセグメントで保存する。
http://www.daifukuya.com/photoxp/software/makernote.html
Exif対応ソフトの一覧を参考。
Exifを使用するのは、一般的なExif(JPEG)ソフトでの可読性をアップするためである。

●フォルダ名/ファイル名
フォルダ名を設定できるようにした時点で、ファイル名も設定可能にする。
デフォルトでは、T2005_0129_1245_20.jpgとする。
数字をぜんぶつなげると可読性が落ちる。

●初回の起動
初回の起動時に「SmartWriteにようこそ 慣れるまではていねいに書いてください!」と表示する。二度目以降は表示しない。うるさいか?

●デフォルトの背景
デフォルトの背景には、マニュアルをかねて、を使用する。

【2-2】SmartWriteの画面設計
【2-2-0】画面と表示
SmartWrite起動中は、画面全体をノートとして使用できるようにする
画面には5mm幅の薄いブルーの格子または横罫などを表示できるようにする。
画面のバック背景画面には、bmp画像を貼りつけることができ、自分好みのノートとすることができる。

800×600ピクセル以下の場合、特別にウィンドウ表示する場合をのぞき、起動中にはメニューなどはいっさい表示しない。
手書きメモをとる機能のみに特化することで、操作性を向上させ、紙の使い勝手に近づける。

画面上にフローティングボタンを用意する方法はとらない。
画面上にボタンを用意すると、その下の部分が画面内で死角になってしまうため。

【2-2-1】ウィンドウモード【拡張仕様
1024×768ピクセル以上の場合、ウィンドウ表示を可能とする。



●ウィンドウの設定
ウィンドウモードの設定はレジストリに記録し、次回起動時からは設定を引き継ぐ。
レジストリの値は、windowmodeとし、値は0or1とする。
0のとき全画面モード、1でウィンドウモードとする。

●ウィンドウサイズ
ウィンドウサイズはレジストリに記録し、次回起動時からは設定を引き継ぐ。
レジストリの値は、windowsizeとし、値は0〜とする。
0=全画面
1=800×600
2=1024×768
3=1280×1024

●ウィンドウのリサイズ
ウィンドウモードでもウィンドウのリサイズはしない。

●背景画面
ウィンドウモードでの背景画面は、BMPファイルを左上端から表示する。

●ウィンドウデザイン
ウィンドウモードのウィンドウデザイン設定はレジストリに記録し、次回起動時からは設定を引き継ぐ。
レジストリの値は、windowframeとし、値は0or1とする。
0=ウィンドウ枠なし
1=ウィンドウ枠あり(黄色表示)
2=ウィンドウ枠あり(標準色表示)

ウィンドウデザインは、デフォルトではウィンドウ枠なしで、単に重ねた紙のように表示する。ウィンドウ枠を出すことも可能で、レジストリで変更可能とする。
ウィンドウ枠がないため、画面の最左端1ピクセルのクリックのほか、終了は右上から左下への斜め線(/)のジェスチャーにて終了とする。
またウィンドウ右上端に[×]印を表示し、×で終了とする。
ウィンドウ枠がある場合には、ウィンドウ枠に[×]印を表示し、×で終了とする。

●多重起動と新規ウィンドウ
ウィンドウモードでは多重起動(多重ウィンドウ)を許容する
多重起動した場合、もとのウィンドウはサムネイルサイズ(180×135ピクセル)に縮小し、ウィンドウ表示する(付箋紙のイメージ)【拡張仕様】。
新規のウィンドウは互い違いに表示する。

●パレット【拡張仕様
この場合、ウィンドウの外の任意の位置に、パレット型のボタンを配置することを検討したが、SmartWriteの根本設定と反するため、ボタンは配置しないことにした。
× パレットは、[×]ボタンで単独で表示しないようにできる。
× 再度表示するためには、Ctrl+H(Hide)を押す。Ctrl+Hでトグルでパレットが出たり消えたりする。

※ パレットはユーザーがウィンドウ内に移動することももちろん可能
※ 移動した位置は記憶し、次回の起動時に再現すること

【議論の経緯】画面解像度によってパレットボタンが出るかでないかが変更されているのは変か? 一貫性について検討すること。
想定されるのは、ウィンドウモードで使用したユーザーが、全画面モードになるとパレットが出ないのはなぜか、と問うてくることであり、そもそもパレットを出すことじたいがSmartWriteの思想に反するのだとすれば、ウィンドウモードであってもパレットを出すべきではない。
逆に、ウィンドウモードでパレットを出す(=高機能化する)のであれば、全画面モードでもパレットを出さなければ一貫性に欠けると考えられる。

そもそもは手軽でモードレスなメモ帳、というのがSmartWriteの発想である。したがって、モードレスを実現し、画面全体を記述領域とするためには、モードを最小限に減らし、メニューを少なくすることを考えた。
通常、他のビットマップエディタでは、豊富な機能が実装されているが、それらはほとんど使われることがない。そこで、シンプルを旨として開発するのがSmartWriteである。
いっぽう、いくらシンプルとはいえ、赤線くらいは引けてもよい、という希望もある。
タブレットPCのエクステンションを使えば、ジェスチャーを導入して、ジェスチャーによって機能を分けることは可能である。たとえば赤線を引くというのは、長い直線を引くということを意味すると考えれば、長い直線を検出したら、自動的に赤く色を変える、ということは、できなくはない。
この場合の問題点は、ジェスチャーの認識には誤認識が不可避であり、かつ動作が遅くなるということである。
どちらも、SmartWriteの根幹にかかわる問題であり、SmartWriteとしては許容しがたい。
以上のことから、ウィンドウモードであろうとも、パレットによるメニュー操作はしない、というのが基本方針となる。

しかしながら、ウィンドウモードであれば、パレットは有効かもしれない。当面隠し機能として実装し、方針を確定する。


【2-3】メニューと機能(ペン種、ペン色の変更)
【議論】
手書きメモでは、フリーハンドの線以外に、

・自由曲線(フリーハンドのペン)
・マジック(フリーハンドの太いペン)
・直線
・連続直線
・長方形
・塗り潰し長方形
・楕円
・塗り潰し楕円
・消しゴム

・文字入力
・取り消し

などの機能が実装されていることが多い。

・線幅切り替え
・スタンプ

などが別に存在することもある。
モードを切り替えるため、
描いた文字の選択機能を画面上やメニューに分けて実装することもある。

・選択(画面内のオブジェクトの選択を行う)
・次ページ(新規ページ)
・道具パレットを閉じる
・ウィンドウを閉じる(保存)

SmartWriteでは、紙の使い勝手を実現するために、
モード切り替えを最低限に減らすことを考える。

モード切り替えを減らすとは、ユーザーが行ったことを忠実に再現する、
ことをめざすということである。

この場合方針はふたつ考えられる。
ひとつは、ユーザーの行為そのものを忠実に再現すること。
もうひとつは、ユーザーの行いたかった意図を予測して実現すること
である。

予測の方式は、東大の五十嵐さんの図形版の予測入力『Chateau』(WISS2001)みたいに、
描いた図形を補完する、という方法や、
□や○などを描いたら、それを清書してやるという方法があるけど、
どちらもいらんことをしていることが多そうで、
あまりよいとは思えない。

かといって、あらかじめ長方形や楕円なんかを用意しておいても、まず使わない。

そもそもそういう機能はぜんぜん不要で、
手書きだから味があるのだと考えたほうがシンプルで使い勝手がよいものになる。

というわけで、SmartWriteでは、

・自由曲線(フリーハンドのペン)/ストロークにより自動認識して処理
・マジック(フリーハンドの太いペン)/ストロークにより自動認識して処理
・消しゴム/二重線により自動認識して処理

・文字入力
・取り消し

・選択(画面内のオブジェクトの選択を行う)
・次ページ(新規ページ)
・道具パレットを閉じる
・ウィンドウを閉じる(保存)

の機能を実装することを目標とする。
機能を減らしたために、メニューの階層が浅く、実用性を向上させ得る。

最終的な保存形式がBMP系のExif(JPEG)であるため、
レイヤーやドローデータなどを扱う必要もない。

●モードレス
さらにモードを減らすことを考える。
・自由曲線(フリーハンドのペン)
・マジック(フリーハンドの太いペン)
・消しゴム

・文字入力
・取り消し

・選択(画面内のオブジェクトの選択を行う)
・次ページ(新規ページ)
・道具パレットを閉じる
・ウィンドウを閉じる(保存)

のうち、取り消しや消しゴムの機能は、すでに描いた画像/文字/オブジェクトの上を、二重線で消すかまたはぐりぐりと塗りつぶすなどのジェスチャーで行うことを検討したい。

ただし、これは検討で、パフォーマンスが出ない場合には、実装しない。

●ストロークの自動認識によるペンの太さと色の変更
ペンの太さと色はストロークを自動判断して設定する。
太さと色は設定可能とする。設定ウィンドウで3原色からなる円状のパレットを表示し、クリックすることで設定可能とする。
デフォルトの色と太さは2ピクセル(階調あり)、ブルーブラック(万年筆色)。

ペンの太さを変えたい、と思うことは、じつはまれかもしれない。
ペンの太さを変えたいと思う場合は、
たとえば強調線、アンダーライン、まる囲いのような場合である。

この場合太さだけでなく、色を変更したいと感じることもある。

そこで、SmartWriteでは、アンダーラインとまる囲いを認識し、その場合に限り色と太さを変更する。

色は、アンダーラインの場合赤、まる囲いでは濃いブルーとする。
アンダーラインの場合、ダーマトグラフをイメージした黄色もあるかもしれない。

キャプチャーした場合、標準では青、青の多い画面では赤とする。

文字と図を区別しておき、文字の上に長い線が引かれた場合は、色と太さを変える.文字と図をリアルタイムで区別していくアルゴリズムを研究する必要あり。

速度が落ちるようなら実装しないか?
どのくらい速度が落ちるか実装して試してみるいっぽう、アルゴリズムも要検討。

●ジェスチャーによる削除
ジェスチャーによる削除の問題点は、
ジェスチャーの認識に時間がかかり、タイムラグがあること、
そのために、ユーザーは不自然な待ち時間を感じてしまうことが挙げられる。

ジェスチャーの誤認識があることも問題である。
ジャスチャーで誤認識をした場合、
ユーザーにとっては予測外の挙動が起こることになり、
ソフトそのものへの信頼感を失わせることになる。

これに関しては、どのジェスチャーを削除に割り当てるのか、
認識率はどのくらいなのかを実装して検討する。

実物の「紙」には、削除の機能がないことを考えあわせれば、
削除の機能を割り当てる必要性にも疑問がないではない。
つまり、削除の機能はファイルシステムそのものが提供しているので、
書き間違えたページは、あとで削除すればよい、
必要なら新規ページを次々と作って書き足せばよい、という発想である。

ジェスチャーの認識までの時間は設定可能にする。


●文字入力
SmartWriteは、キーボードからの文字入力に対応する。
文字入力はモード不要で、キーボードから文字を入力した瞬間に、
文字として打ち込まれることとする。

入力のためのウィンドウは用いず、ダイレクトに入力可能とする。

入力後のテキストと時刻は、Exifコメント欄に書き込む。
キー入力した文字列は、

<SmartWriteCommentTitle fontname=”MS” fontsize=16 fontcolor=red>
タイトル文字列
</SmartWriteCommentTitle>
<SmartWriteComment fontname=”MS” fontsize=16 fontcolor=#FF0000>
2005/02/15(火曜日)_22:20[タブ]コメント文字列
</SmartWriteComment>

とする。
したがって、文字は検索可能となる。

文字の入力位置は、自動的に配置する。
手書きメモと重ならない位置に設定することが可能かどうかは検討するが、
基本的には、決め打ちとする。

文字は、1行20文字で自動改行する。
フォントとサイズは設定可能とする。
デフォルトは、MS Pゴシック14Pとする。

文字色は、名称、バイナリ、RGB表記を認める。

名称	日本語名	色	RGB表示
aliceblue	アリスブルー	#F0F8FF	R240G248B255
amber	鼈甲色
antiquewhite	アンティークホワイト	#FAEBD7	R250G235B215
aqua	水色(シアンと同じ色)	#00FFFF	R000G255B255
aquamarine	アクアマリン	#7FFFD4	R127G255B212
azure		#F0FFFF	R240G255B255
beige		#F5F5DC	R245G245B220
bisque	ビスク	#FFE4C4	R255G228B196
black	黒	#000000	R000G000B000
blanchedalmond		#FFEBCD	R255G235B205
blue	青	#0000FF	R000G000B255
blueviolet		#8A2BE2	R138G043B226
brass		#B5A642	R181G166B066
bronzed	ブロンズ色
brown	赤銅色	#A52A2A	R165G042B042
burgundy	ワインレッド
burlywood		#DEB887	R222G184B135
cadetblue		#5F9EA0	R095G128B160
chartreuse		#7FFF00	R127G255B000
chocolate	チョコレート色	#D2691E	R210G105B030
cobalt	コバルト
coolcopper		#D98719	R100G149B237
copper		#B87333	R184G115B051
coral	珊瑚色	#FF7F50	R255G127B080
cornflowerblue		#6495ED	R100G149B237
cornflowerblue	?	#42426F	R066G066B111
cornflower		#6495ED	R100G149B237
cornsilk		#FFF8DC	R255G248B220
crimson		#DC143C	R220G020B060
cyan	シアン(アクアと同じ色)	#00FFFF	R000G255B255
darkblue	ダークブルー	#00008B	R000G000B139
darkblown	ダークブラウン	#5C4033	R092G040B051
darkcyan	ダークシアン	#008B8B	R000G139B139
darkgoldenrod		#B8860B	R184G134B011
darkgray	ダークグレイ	#A9A9A9	R169G169B169
darkgreen	ダークグリーン	#006400	R000G100B000
darkkhaki	ダークカーキ	#BDB76B	R189G183B107
darkmagenta	ダークマゼンタ	#8B008B	R139G000B139
darkolivegreen		#556B2F	R083G107B047
darkorchid		#9932CC	R153G050B204
darkorange		#FFC800	R255G140B000
darkred		#8B0000	R139G000B000
darksalmon	ダークサーモン	#E9967A	R233G150B122
darkseagreen	暗い海の緑	#8FBC8F	R143G188B143
darkslateblue		#483D8B	R072G061B139
darkslategray		#2F4F4F	R047G079B079
darkturquoise		#00CED1	R000G206B209
darkviolet	ダークバイオレット	#8A2BE2	R138G043B226
deeppink		#FF1493	R255G020B147
deepskyblue		#00BFFF	R000G191B255
dimgray		#696969	R105G105B105
dodgerblue		#1E90FF	R030G144B255
emerald	エメラルド
firebrick		#B22222	R178G034B034
floralwhite		#FFFAF0	R255G250B240
forestgreen	森の緑	#228B22	R034G139B034
fuchsia	ピンク(マゼンタ)	#FF00FF	R255G000B255
gainsboro		#DCDCDC	R220G220B220
ghostwhite		#F8F8FF	R248G248B255
gold	金色	#FFD700	R255G215B000
goldenrod		#DAA520	R218G165B032
gray	グレー(灰色)	#808080	R128G128B128
green	緑	#008000	R000G128B000
greenyellow	黄緑	#ADFF2F	R173G255B047
honeydew		#F0FFF0	R240G255B240
honeydewtad		#1EDEAA	R030G222B170
hotpink		#FF69B4	R255G105B180
indianred	インディアンレッド	#CD5C5C	R205G092B092
indigo	インディゴ	#4B0082	R075G000B130
ivory	アイボリー(象牙色)	#FFFFF0	R255G255B240
khaki	カーキ色	#F0E68C	R240G230B140
lavender	ラベンダー	#E6E6FA	R230G230B250
lavenderblush		#FFF0F5	R255G240B245
lawngreen		#7CFC00	R124G252B000
lemon
lemonchiffon		#FFFACD	R255G250B205
lightblue	ライトブルー	#ADD8E6	R173G216B230
lightcoral		#F08080	R240G128B128
lightcyan	ライトシアン	#E0FFFF	R224G255B255
lightgoldenrodyellow		#FAFAD2	R250G250B210
lightgray	ライトグレー	#D3D3D3	R211G211B211
lightgreen	ライトグリーン	#90EE90	R144G238B144
lightpink	ライトピンク	#FFB6C1	R255G182B193
lightsalmon	ライトサーモン	#FFA07A	R255G160B122
lightseagreen		#20B2AA	R032G178B170
lightskyblue	ライトスカイブルー	#87CEFA	R135G206B250
lightslategray		#778899	R119G136B153
lightsteelblue	ライトスチールブルー	#B0C4DE	R176G196B222
lightyellow	ライトイエロー	#FFFFE0	R255G255B224
lime	ライム(黄緑)	#00FF00	R000G255B000
limegreen	ライムグリーン	#32CD32	R050G205B050
linen	リネン	#FAF0E6	R250G240B230
magenta	マゼンタ(fuchsia)	#FF00FF	R255G000B255
maroon	マロン(栗色)	#800000	R128G000B000
mediumaquamarine	ミディアムアクアマリン	#66CDAA	R102G205B170
mediumturquoise		#48D1CC	R072G209B204
mediumblue	ミディアムブルー	#0000CD	R000G000B205
mediumorchid		#BA55D3	R186G085B211
mediumpurple	ミディアムパープル	#9370DB	R147G112B219
mediumseagreen		#3CB371	R060G179B113
mediumslateblue		#7B68EE	R123G104B238
mediumspringgreen		#00FA9A	R000G250B154
mediumvioletred		#C71585	R199G021B133
midnightblue	ミッドナイトブルー	#191970	R025G025B112
mintcream	ミントクリーム	#F5FFFA	R245G255B250
mistyrose	ミスティローズ	#FFE4E1	R255G228B225
moccasin		#FFE4B5	R255G228B181
navajowhite		#FFDEAD	R255G222B173
navy	ネービー(濃紺)	#000080	R000G000B128
oldlace	オールドレース	#FDF5E6	R253G245B230
olive	オリーブ	#808000	R128G128B000
olivedrab		#6B8E23	R107G142B035
orange	オレンジ	#FFA500	R255G165B000
orangered		#FF4500	R255G069B000
orchid		#DA70D6	R218G112B214
palegoldenrod		#EEE8AA	R238G232B170
palegreen		#98FB98	R152G251B152
paleturquoise		#AFEEEE	R175G238B238
palevioletred		#DB7093	R219G112B147
papayawhip		#FFEFD5	R255G239B213
peachpuff		#FFDAB9	R255G218B185
peru		#CD853F	R205G133B063
pink	ピンク	#FFC0CB	R255G192B203
plum	プラム	#DDA0DD	R221G160B221
powderblue		#B0E0E6	R176G224B230
purple	パープル	#800080	R128G000B128
ruby	ルビー
red	赤	#FF0000	R255G000B000
rosybrown	ローズィーブラウン	#BC8F8F	R188G143B143
royalblue	ロイヤルブルー	#4169E1	R065G105B225
saddlebrown		#8B4513	R139G069B019
salmon	サーモン	#FA8072	R250G128B114
sandybrown		#F4A460	R244G164B096
sapphire	サファイア
scarlet	スカーレット(緋色)
seagreen	海の緑	#2E8B57	R046G139B087
seashell	貝殻色	#FFF5EE	R255G245B238
sepia	セピア色(藍色)
sienna		#A0522D	R160G082B045
silver	シルバー	#C0C0C0	R192G192B192
skyblue	スカイブルー	#87CEEB	R135G206B235
slateblue		#6A5ACD	R106G090B205
slategray		#708090	R112G128B144
snow	雪	#FFFAFA	R255G250B250
springgreen	春の緑	#00FF7F	R000G255B127
steelblue		#4682B4	R070G130B180
tan		#D2B48C	R210G180B140
teal	青緑	#008080	R000G128B128
tomato	トマト色	#FF6347	R255G099B071
thistle		#D8BFD8	R216G191B216
turquoise	ターコイズ	#40E0D0	R064G224B208
violet	すみれ色	#EE82EE	R238G130B238
wheat		#F5DEB3	R245G222B179
white	白	#FFFFFF	R255G255B255
whitesmoke	煙った白	#F5F5F5	R245G245B245
yellow	黄色	#FFFF00	R255G255B000
yellowgreen	黄緑	#9ACD32	R154G205B050

文字数の上限は、Exif仕様上、Exifコメントに書き込める文字数に限定される。
上限は、6000文字以上あり、1画面をはみ出すので、事実上問題ない。

文字と図形が重なった場合にどう表示するかは検討する。
手書きと文章を完全に同時入力はできないか? 検討する。


●背景画面
画面のバック背景画面には、bmp画像(+JPEG画像)を貼りつけることができる。

貼りつける画像は初回起動時に次の順番に検索し、ファイルが存在しなければ、再度検索を行う。
c:\Program Files\SmartProject\SmartWrite\
c:\Program Files\SmartProject\
また、設定により、任意のディレクトリの任意のファイルを設定可能とする。

ファイル名は自由に設定可能とするが、デフォルトは、アプリケーション直下のbackground.bmpとする。
背景画面は、設定画面からサムネイル一覧で見ることができるほか、サムネイルをSmartCalendar等から移動して設定できるようにする。この場合、移動してきたファイルは、実体は移動せず、パス名のみを取得する(ドラッグ&ドロップでパス名を取得し、設定できるようにする。設定してあるファイルはサムネイルで一覧してみることができる。)。
背景画面はアプリケーションの起動中でも変更可能とする。
たとえば、背景を削除された場合、警告を出さずに背景ファイルを削除可能とし、履歴にしたがって、次回起動時からは背景にこれまでに設定した別のファイルを表示する。
したがって、背景画面の設定履歴を記録する。履歴は「今日」のフォルダ内にsetupback.logというテキストファイルを作る。あとで、設定画面中のlogボタンを押すことで集めることが可能とする。
ただし、設定によりログファイルを作成しない場合は、ログファイルは作成せず、背景は、デフォルト(back.bmp)に戻す。デフォルトの背景がない場合、30%グレー階調を表示する。

setupback.logの内容は次のようにする。
新しいファイルを上位に書く。

2005/02/15(火曜日)_22:20[タブ]D:\2005\200502\2005_0215\image.jpg
2005/01/10(月曜日)_12:20[タブ]D:\2005\200501\2005_0110\image.jpg
2005/01/10(月曜日)_12:20[タブ]c:\Progra Files\Smart\SmartWrite\background.bmp

背景画面のファイルよりもディスプレイのほうが大きい場合、背景画面を拡大表示するか、タイルにするか、左(または中央)に表示するかを選択して設定可能とする。左または中央に表示した場合、バックにはデスクトップを表示し、手書き可能な領域は背景画面の内部だけとする。デスクトップをクリックした場合、SmartWriteは終了する。

背景画面の設定はGUIで行う。選択は、Windows標準のインターフェースを使用する。
設定は下記の通り。
・Ctrl+Bで選択ウィンドウをダイレクトに開く
・デフォルトのフォルダが、該当するフォルダになっている
・表示はデフォルトで「縮小」になっていること

●時計【拡張仕様
SmartWriteは起動時に時計を表示する。
時計のオン/オフと書体も変更できる。位置も変更可能とする。
ビジュアルデザインも可能とする。
ビジュアルデザインの場合、ファイルはレジストリで指定する。
watch=filename.jpg
とする。
時刻は、変化させる。



【2-4】写真取り込み
SmartCalendar、エクスプローラ等から写真(サムネイル)をドラッグ&ドロップした場合、その写真を読み込みながら起動する。

引数2個以上で起動された場合は、それらをタイル形式で並べた状態で起動。
画像は、オブジェクトとして、移動可能にする。

オブジェクトは適当に配置する。たとえば10個とかだったら、

1 2 3 4 5
6 7 8 9 10

というように縮小して画面に配置する。
画面からはみ出す場合、縮小して重ね合わせる。

取り込んだ写真はオブジェクトとして移動可能。リサイズも可能である。リサイズ可能なターゲットを示すために、選択している(=フォーカスのあたっている)オブジェクトには、オブジェクトのまわりに枠とファイル名、リサイズバーを表示する。
オブジェクトの配置とモード

オブジェクトの複数選択は、複数選択は右クリックで行う。
オブジェクトの全選択は、画面左端での右クリックでのメニューから[すべて選択]を選ぶ。

オブジェクトのない場所から書き始めれば、手書き文字を入力可能とする。
オブジェクトの上からでも、直接ドラッグすれば、手書き文字を入力可能とする。逆にいえば、オブジェクトの上でクリックして選択してからでなければ、オブジェクトを移動はできない。

オブジェクトを、保存時に背景に焼きつけて、一体化するか、Exifのまま残すかは、設定で設定可能とする。Exifで残した場合でも、FTP時には焼きつけて1枚のExifとする(アップロードする画像は二度圧縮するため劣化する)。
オブジェクトを焼きつける場合、最終的に保存するときには、1枚の画像ファイルにしてしまう。その場合でも、リンクしたファイルのパスをJPEGのアプリケーションセグメント内に保持する。

読み込んだ写真のパス名と時刻は、Exifに記述する。
<SmartWriteLinkedPhoto>
<file filename=”root¥2005¥200502¥2005_0222¥DSCF0235.jpg” date=”2005/12/22” day=”Mon” />
</SmartWriteLinkedPhoto>

オブジェクトのまま保持した場合、読み込んだ写真のパス名と時刻は、JPEGのアプリケーションセグメントに記述し、次回読み込み時に再現する。
<SmartWriteLinkedPhotos>
<file filename=”root¥2005¥200502¥2005_0222¥DSCF0235.jpg” date=”2005/12/22” day=”Mon” left=11 top=1 right=111 bottom=222 />
<file filename=”root¥2005¥200502¥2005_0222¥DSCF0235.jpg” date=”2005/12/22” day=”Mon” left=11 top=1 right=111 bottom=222 />
</SmartWriteLinkedPhotos>

問題点/要検討 オブジェクトと手書きが重なり合った場合、オブジェクトを別ファイルとして保存すると、オブジェクトの上に手書き文字を重ね合わせることができない? 重ね合わせができるのであれば、このまま仕様化する。


●起動時の読みわけ
具体的には、最上部の場合、写真そのものを単一のファイルとして読み込み編集可能とする(してよいかどうかは疑問があるので、この場合、保存ファイルは上書きせず、別ファイル名とする)。
全画面に読み込む場合、主たる用途は、写真への書き込みと考えられる。
この場合、スタンプ機能などを提供するか?


中段の場合、キャビネサイズ=180×135

キャビネサイズの場合、写真は重ね合わせてメモを書いたりするのを主たる用途とする。そのため、写真のまわりに白縁をつけよう。
ここで、○×でジェスチャー表記をした場合、その表記の写真に○×を書き込み、スライドショウの一助とする。
この場合、自然な重ね合わせが重要なので、グリッドは行わない。
※ 検討事項 自然さをどう表現するか?



下段の場合、サムネイルサイズ(最大80×80ピクセル Exifサムネイルサイズ?)とする。

サムネイルサイズの主たる用途は、写真つき会議支援座席表を作ることにある。そのため、サムネイルの下にファイル名を表示する。
読み込んだ写真は、ドラッグ&ドロップで移動することができる。
移動した場合、16×16ピクセルのグリッドとし、グリッドに吸着することで、整列を容易にする。

●SmartWriteへの全画面写真読み込み
写真に手書きで文字を書き加えるという作業をしたところ、SmartWriteへの1枚写真の取り込みの場合、全画面表示が有効であった。
上記の例は全画面でないために、無駄が出ている例である。

取り込み後の保存は「別名で保存」とする。

●SmartWriteのウィンドウモード時の画像取り込み
SmartWriteをウィンドウモードで動作している場合、ウィンドウ内に単独のファイルを投げ込んだ場合、画面の最大サイズで該当するファイルを取り込む。ファイルが縦長の場合、画面の最大サイズに応じて自動的にリサイズし、ウィンドウサイズもリサイズして表示する。サイズの計算は、「
サムネイルの縦横計算
」を参考のこと。

SmartWriteをウィンドウモードで動作している場合、ウィンドウ内に複数のファイルを投げ込んだ場合、ウィンドウのサイズは変更せず、ウィンドウ内にレイアウトして表示する。

●前ページボタンによるファイルの読み込みと追記(再オープン機能)【拡張仕様
左(前ページ)を押すと、前のファイルを読み込む。そのフォルダの先頭ファイルに達したときには、同じフォルダの最終ファイルを読むのではなく、前のフォルダ、すなわちひとつの上フォルダの階層に並ぶひとつ少ないフォルダの最終ファイルを表示する。
* 2005/2005_0129/2005_0129_124450.jpg
の次は、
* 2005/2005_0128/2005_0128_233137.jpg
のようになる。

引数1個で起動された場合は、それを背景にして起動、この場合は背景コントロール(Cジェスチャ)は不可能にする。

追記して保存する。追記については、別ファイルにするか、もとのファイルに書き加える(上書きして保存)かを設定できるようにしておく。デフォルトでは別ファイルにする。

追記して上書きした場合、Exifを複数回編集することになり、劣化することが予想される。
たとえば100回編集したらどうなるか。

【結論】写真に書き込むことを考えた。この場合、300万画素〜500万画素(2000×2000ピクセル等)に書き込むために、最初から縮小して読み込む必要がある。したがって、上書きして保存するということはありえない。つねにファイルは新規ファイルとして保存する。つまり、劣化するとしても、劣化の過程はすべて保存されており、それはそれで許容する。

●劣下のためのマスク【拡張仕様
紙の風味を出すために、劣化したことを示すための写真に重ねるマスクを工夫する。ファイル読み込み時に、これを適応することで、色が変色した効果などを出すことができる。

●前後のメモへの移動【拡張仕様
メモは、指定したディレクトリのみを見ればよいので、
前後に移動しても項目を見る必要はないと思います。

\1971\197104\1971_0413
\1971\197104\1971_0415

というようにディレクトリがあり、メモがある場合、

\1971\197104\1971_0411\1971_0411_102540.jpg A
\1971\197104\1971_0411\1971_0411_102740.jpg B
\1971\197104\1971_0411\1971_0411_103050.jpg C
\1971\197104\1971_0415\1971_0415_134550.jpg D
\1971\197104\1971_0415\1971_0415_143550.jpg E

というようにメモがある場合、
Dから見て、「前」のメモは、EではなくCになる。

項目名つきのメモ以外のスキャンファイル等がある場合、
すなわちフォルダが

\1971\197104\1971_0411
\1971\197104\1971_0413 午前3時のティータイム
\1971\197104\1971_0414\Photo
\1971\197104\1971_0415

などのような場合で、

\1971\197104\1971_0411\1971_0411_102540.jpg A
\1971\197104\1971_0411\1971_0411_102740.jpg B
\1971\197104\1971_0411\1971_0411_103050.jpg C
\1971\197104\1971_0413 午前3時のティータイム\0001.jpg
\1971\197104\1971_0413 午前3時のティータイム\0002.jpg
\1971\197104\1971_0414\Photo\DSCF0001.JPG
\1971\197104\1971_0414\Photo\DSCF0002.JPG
\1971\197104\1971_0415\1971_0415_134550.jpg D
\1971\197104\1971_0415\1971_0415_143550.jpg E

というようになっていたとしても、
Dから見て、「前」のメモは、Cである。
理由は、メモはメモだからであり、
もし、
\1971\197104\1971_0413 午前3時のティータイム\0002.jpg
\1971\197104\1971_0414\Photo\DSCF0001.JPG
などに手書きでメモを追記したい場合には、
そのファイルのアイコン/サムネイルをドラッグすれば足りると考えるためである。

したがって、前後のメモへの移動の機能を作る場合にも、
項目名はとくに関係なく、
設定ずみの日付のフォルダのみを検索すればよい、ということになる。



●画面キャプチャー
・自由キャプチャ機能
指定した領域だけをキャプチャできる機能
最前面のウィンドウをキャプチャーする。
起動前は左端のドラッグ操作による(下から上)。

・全画面キャプチャー
起動後はジェスチャー(C)による。
起動前は左端のドラッグ操作による(下から上)。

【2-5】設定と操作
●設定
起動中に右クリックするとメニューを表示し、設定画面に遷移する。
メニューは、設定と終了の2項目。


●操作一覧(ジェスチャー 画面内のパレットボタン 電子ペンのボタン)
画面の左端をクリック 保存して終了
画面の左端を右クリック(ロングクリック) メニューを表示。メニューは、設定、オブジェクトをすべて選択、終了の3項目。
画面内の前ページボタン(前のファイルを読み込み) ※拡張機能 当面実装しない?
画面内の次ページボタン(新規のページ作成)

終了 ジェスチャーで「e」またはCtrl+eを入力(end)
新ページ ジェスチャーで「n」またはCtrl+nを入力(new)
設定画面(設定項目の一覧を表示) ジェスチャーで「S」またはCtrl+Sを入力(setting)
背景設定 ジェスチャーで「B」またはCtrl+Bを入力(background)
文字設定 ジェスチャーで「M」またはCtrl+Mを入力(moji)
全画面キャプチャー ジェスチャーで「C」またはCtrl+Cを入力(capture)
最前面ウィンドウキャプチャー ジェスチャーで「W」またはCtrl+Wを入力(Window capture)
文字入力 ジェスチャーで「a」またはCtrl+aを入力。※キーボードから文字を入れればいつでもダイレクトに入力可能。
太字 ジェスチャーで「d」またはCtrl+dを入力(double)
赤字 ジェスチャーで「r」またはCtrl+rを入力(red)
ダーマトグラフイエロー ジェスチャーで「y」またはCtrl+yを入力(yellow)
アンドゥ ジェスチャーで「z」またはCtrl+zまたはESCを入力
Alt+Tab SmartWriteのウィンドウを1/2表示して他の画面を表示 ※拡張機能 当面実装しない?


●操作モードの区別
(1)画像の上へのメモ
(2)ジェスチャ(メモを閉じる,新規メモを開くなどのコマンド)
(3)このドラッグ&ドロップ

の区別ですね。
ドラッグ&ドロップは、写真を選択する必要があるので、
写真の上でロングクリックした後は、ドラッグ&ドロップモード。

メモはいきなりキーボードから書き込むことで行う。

使ってみて区別がうまくいかないようなら、電子ペンのサイドボタンなどを併用することを検討する。

●多重起動
全画面で動作する場合、SmartWriteの多重起動は不可とする。全画面を使用するアプリケーションであるため、多重起動すると、どれを起動しているのか、わからなくなるため。
ウィンドウタイプのSmartWriteでは、多重起動を可とする。


【2-18】SmartWrite for BTRON
BTRON版のSmartWriteについて。
・起動は仮身から行う。アプリケーション名はSmartWrite
0x8100 0x0010 0x8047 SmartWrite
0x8100 0x0010 0x8048 SmartView
データタイプ0010はExifとする。

・ウィンドウは開かず、画面の左端1ピクセルに常駐する。
・クリックすると、全画面に手書きメモを書けるようになる。
・手書きと同時にキーボード入力も受け付ける。
・書いた情報は、その実身に、マルチレコードで、Exifで記録する。
・新しいメモが前に来るようにスタックする。
・レコードは6番。したがって、画像ビュアの上位互換となる。
※画像ビュアは6番にサムネイルを記述している点に注意。互換性を保つこと。

・SmartWriteで書いたExifをみる機能をもつアプリケーションを開発する。
・アプリケーション名はSmartView
・いわゆるExifビューアーである。
・ぱらぱらめくれるようになる

・SmartWriteで書いたものをFTPする実身タイプのFTPを開発する。
0x8100 0x0000 0x8050 SmartFTP[20050220/ゆざ]

【3】SmartWrite/SmartCalendarの連携について【検討中】
SmartWriteとSmartCalendarは、別個のアプリケーションであるが、両方が協調動作することで、それぞれの機能以上のことができる。これが同時開発する意味であり、連携について考えて実装する。

【3-1】連携
(SmartWriteで)新規に作成したファイルを、
SmartCalendarは、見える場所に強調表示する。

【3-2】連携?
SmartWriteで、最下端で左右にペンをドラッグすると、
前に書いた用紙をぱらぱらめくれるようにする。
左に行くほど古い紙とする。

この機能は、SmartCalendarのスライドショウ機能と重複するか?
重複するとしたら、ソースを共通化できるのか?

あるいは、その機能をSmartCalendarに内包される子アプリケーションとして、SmartWriteはその機能を外部から呼び出すというようにできないか?

そもそも、ぱらぱらめくれるほど高速にめくることができるのか?
そのためにはどうしたらよいか?

案としては、SmartCalendarは、
フォルダ内の画像ファイルから160×120ピクセル程度のMPEG動画サムネイルを作り、
ぱらぱらめくりでは、それをめくる、という方法がある。
これなら、30フレーム/秒なども可能になる。
停止させた時点で静止画を読んでくる。

SmartWriteでは、内部構造を全面的に変更したほうがよい。現在の構造では、別のページに移動するたびにファイルアクセスをしなければならないため。


【3-3】SmartCalendarで一覧のなかから選ぶと、SmartWriteで追記できるようにする
# ファイルのオープンとどう区別するか?
ドラッグすればよいか。

【3-4】カレンダーに文字を書き込む、ということを実現するために、カレンダーからSmartWriteを起動できるようにすること。この場合、背景には、画面のクリップを使うこと。
この場合、どのフォルダに保存するのが適当か。今日のファイルだから今日だろうか。それとも、そのカレンダーに書き込んだ日だろうか? 検討する。

【3-5】使用済みメモ メモには、いちど利用すれば役目は終了し、二度と使わないことがありうる。そこで、SmartWriteでは、使ったかどうか(使い終わったかどうか)をタグに記述する。これをFinishタグと呼ぶ。Finishの値は、0(未使用)か、1〜(使用済み)とする。
タグは、SmartCalendarの
【1-9-2】使用済み写真の評価と共通化する。
SmartWrite/SmartCalendarでは、使用済みかどうかをチェックするチェックボックスを表示する。


[PR]衝撃!あなたの本当の裏の顔!:実は貴方はΟΔ県出身?ここで分かる真実