クロス プラットフォーム アプレットの記述

概要

Curl 実行環境 (RTE) は、Windows®、Linux および Mac® OS X のプラットフォームで利用できます。可能な限り Curl の API は全てのプラットフォームで同じ動作をします。以下では、3つのプラットフォーム上でアプレットが正確に動作することを確認するステップを紹介しています。この確認には、各プラットフォームに対して異なるコードをコンパイルするために platform-switch マクロを使用することが必要になる場合があります。
フォント、テキスト レンダリング、IME サポート、フォーカス、そしてドラッグ アンド ドロップの動作は、プラットフォームによって異なります。これらの違いは一般的に Curl アプレットの動作を、そのプラットフォーム上で動いているその他のソフトウェアに近づけます。一般的に、API に対するプラットフォーム固有の問題は API リファレンス に記述してあります。
ActiveX API はすべてのプラットフォーム上で使用できますが、Windows 以外のプラットフォーム上では実行時に例外をスローします。これはActiveX コントロールが利用できないからです。こうしてスローされる例外は、Windows 上で実行中のアプレットがインストールされていない ActiveX コントロールを使用しようとした場合にスローされる例外と同じです。このような例外を処理するアプレットは、ActiveX コントロールが利用できない場合には ActiveX の使用を避けることが可能です。
EmbeddedBrowserGraphic はすべてのプラットフォームに存在しますが、Windows 上でのみ機能します。
ロケール サポートはオペレーティング システムが提供しているので、どのロケールが存在し、それらが厳密にどのように動作するかは、プラットフォームによって異なります。またロケールのサポートはそれぞれのプラットフォームでも、バージョンによって異なり、また与えられたマシンに何がインストールされているかによっても異なります。
文字エンコーディングには、Curl 実行環境によって提供されるものもありますが、多くはオペレーティング システムが提供しているものなので、どのエンコーディングが使用可能で、厳密にそれらが文字をどのようにマッピングするかは、プラットフォームごとに、またそれぞれのプラットフォームのバージョンごとに異なります。文字エンコードを提供するシステムの中には、Windows の win32:、Linux の linux: および Mac の mac: のようなプレフィックスを持つものがありますが、プレフィックスを持たないよく使われるエンコーディングのエイリアスもあり、それらもやはりオペレーティング システムによって提供されていることに注意してください。
また、ブラウザの違いによっても、動作が異なります。このような違いは、Internet Explorer は Windows 上でしか使えず、Safari は Mac 上でしか使えない、というようなプラットフォームの違いが部分的に関係しています。
Curl 統合開発環境(IDE) は、Windows と Linux でのみサポートされています。Curl IDE ドキュメンテーション は Windows、Linux、Mac をカバーしています。Mac 上でアプレットをデバッグする必要がある場合は、Curl テクニカルサポートまでお問い合わせください。多くの場合、アプレットはWindows または Linux でデバッグされ、Mac 上にデプロイされます。

Linux のプラットフォーム

Linux 版の Curl RTE と Curl IDE は、RedHat 9、SuSE 8.2、および TurboLinux Desktop 10 上でテスト済みです。必要な RPM パッケージをインストールしたカーネル バージョン 2.4 以降のシステムで動作が確認されています。
Linux と Windows 上の Curl RTE の実行では、ユーザー インターフェイスに多少の違いがあります。この違いは、Curl と対応プラットフォーム間の互換性を維持するためのものです。
Linux のプラットフォーム上では、Curl RTE は CUPS を使用して印刷を行います。詳細については、「LinuxPrinting.org の CUPS Quick Start」を参照してください。
Linux のプラットフォームでは、コマンド ライン スクリプトを使用して Curl RTE を管理することも可能です。次の表では、このスクリプトと対応するメニュー アイテム、および簡単な説明を一覧表示しています。
スクリプト名メニュー項目説明
curl-ide-docCurl RTE / Curl IDE ドキュメンテーションCurl RTE を起動し、ドキュメント・ビューワを実行します。
curl-rte-managerCurl RTE / RTE コントロール パネルCurl RTE を起動し、RTE のコントロール パネルを開きます。
curl-ide-labCurl IDECurl IDE を起動します。

Mac のプラットフォーム

Mac のユーザー インターフェイスは、機能も外観も Windows および Linux のものとは大きく異なります。Mac ユーザーの期待に応えるアプリを作成したいならば、アップル社の Mac ユーザーの経験を様々な角度から取り上げている、「アップル ヒューマン インターフェイス ガイドライン」について精通している必要があります。このガイドラインは、「Apple Developer Connection」のWeb サイトを検索して見ることができます。
既定では、Mac OS 上の Curl RTE は アクア の外観を持つコントロールやダイアログを使用します。次のセクションでは Curl アプリケーションが Mac ユーザー の期待に応えるために必要な事項を説明しています。
要約:
  • キーボード イベント を操作するコードの中では、accel?ctrl? の代わりに使用してください。
  • メニュー アクセラレータ の文字列には、 "accel" を "ctrl" の代わりに使用してください。メニュー アクセラレーター を指定する構文は、各プラットフォームに対して異なるアクセラレータ キー を指定することができます。Mac の標準アクセラレーター とのキーの重複を避けるためにこの機能を使用してください。
  • アプレットで MenuBar を使用している場合は、View.mac-menu-bar を使用し、アプレットがアクティブにな時はそれをスクリーンの上部に表示させます。
  • キーボード ショートカット キー(下線文字) は Mac OS では使われません。Curl RTE は Mac OS 上ではそれらを無視します。

アクア ルック・アンド・フィール

Mac の OS X で実行するアプリケーションは、the-default-look-and-feel 定数によって指定された、アップル社の アクア ユーザー インターフェイスを採用した Curl の実装を既定のルック・アンド・フィールとして使用します。これらのコントロールは 非 ローカル オプション control-color に対応しないことに注意してください。

キーボード 処理

Mac のキーボードは修飾キーとして command キー をもっており、これはWindows の標準キーボードにはついていません。Mac OS はこのキーを アクセラレータキー として使います。加えて、Alt キー (alt もしくは option のラベルのキー) は、Windos と Linux とは異なる使い方がされます。バージョン 6.0 の Curl RTE は ゲッターの StateMask.accel?GuiInputEvent.accel? を提供し、アプレットにこれらの違いを吸収させます。多くの場合、これらは キーの修飾がアプレットが動作するプラットフォーム上で適切に動作するかをチェックするので、ctrl? プロパティ の代わりに使われます。
アプリケーションがキーボードイベントを直接制御する場合、GuiInputEvent.accel? プロパティを使って、イベントが起こったときにそのプラットフォーム上での アクセラレータキー が押されたかを判別できます。これはWindows と Linux の Ctrl キーと Mac の Command キー の状態を反映します。StateMask.accel? ゲッターは同様の動作をします。
Mac 上でのみ実行されるアプリケーションを記述している場合は、新しいゲッター StateMask.command? を使って Mac プラットフォーム上での command 修飾キーの状態を判別します。
Mac では、alt または option キーを使用して追加の文字、シンボル、および発音区別符号(diacritical mark)を入力します。その結果、Curl は Mackintosh での cooked キー イベントを次のように生成します。raw キー イベントが alt? = truecommand? = false を持つ場合は、cooked キー イベント alt? = false を持ち、Mac ユーザーが求める挿入可能な値と等しくなります。raw および cooked キーボード イベントについての詳細は、「キー イベント」を参照してください。
Mac のキーボードについては、さらにいくつかの注意すべきポイントがあります。

キーボード ショートカット

アプリケーションにキーボード アクセラレータを実装する場合は、Mac の OS X によって予約済みのキー シーケンス、またはアップル社が共通のアプリケーション タスクに推奨するキー シーケンスの使用を避けてください。これらの標準のアクセラレータのリストについては、アップル ヒューマン インターフェイス ガイドラインの「Keyboard Shortcuts Quick Reference」をご覧ください。platform-switch マクロを使い、各プラットフォームごとに適切なアクセラレータを指定する必要があります。Mac OS X は、自動的にメニュー バー内でメニュー アイテムと関連するキーを表示します。幾つかのキーは、全く表示されないかもしれません。特に、スペース、ページダウン、ホーム、タブ等のような明示的な表現を持たないキーは、最も避けられます。それらを表すのに使われるシンボルは、多くのユーザにとってなじみがないでしょう。

メニュー

Mac のメニュー バー

独立型アプレットで実行される Curl のアプリケーション、あるいはメニュー バーを含む View オブジェクトを作成する Curl のアプリケーションでは、メニュー バーの配置において Mac UI の基準を守る必要があります。Mac のアプリケーションでは、Windows のアプリケーションで一般的な各ウィンドウの上部ではなく、スクリーンの上部にメイン アプリケーションのメニュー バーを配置します。新しいプロパティの View.mac-menu-bar は、Mac アプリケーション のメニューの実装に使用されます。このプロパティが設定され、アプリケーションが Mac のプラットフォームで実行されると、指定されたメニュー バーが標準的な Mac のメニュー バーに変換されます。また、Windows のアプリケーションでは適切ですが、メニューをグラフィック階層に追加しないように注意してください。これは platform-switch を使うことで制御できます。View.mac-menu-barplatform-switch を使用した例については、「表示メニューの作成」を参照してください。
Mac 形式のメニュー バーへの変換には、アイコン、アイテム名、およびキー アクセラレータが含まれます。キー アクセラレータが Mac のメニュー API で有効でない場合、これは無視されます。Mac のメイン メニュー バーでは、すべてのアクセラレータが(おそらく他の修飾子と組み合わせた) command キー修飾子を使用しなければなりません。次のセクションで説明されているように、メニュー アイテム ナビゲーション キー(アクセスキー または ニーモニック と呼ばれる場合があります)は無視されます。
また、変換は、MenuAction Action イベント ハンドラと MenuAction のコマンド バインドをキャプチャします。
SubMenu.add および SubMenu.clear を使用してサブメニューを変更できます。menu-pane-proc を使用してサブメニューを生成する場合、サブメニューが変わるたびに MenuBar.refresh を呼び出す必要があります。たとえば、最近使用したファイルを示すサブメニューは、ユーザーが新しいファイルを開くたびに更新されます。

標準の Mac メニュー

Mac プラットフォームには2つの標準メニューがあります。アプリケーション メニューは常にメニュー バー の左端に表示されます。ウィンドウ メニュー は常に右端にあります。Curl RTE は自動的に View に対する両方のメニューをトップレベルにあるメニューバーを用いて調整します。
アプリケーション メニュー は Curl RTE によって調整されます。アプレットは set-application-name を呼び出すことでこのメニューに対するアプリケーション名を提供します。アプリケーション メニュー は複数の標準アイテムを含んでおり、それらはMac OS によって完全に制御されています。

キーボード アクセラレータ

MenuAction はキーワード引数 key-accel-string を使用してメニュー アクションのキー アクセラレータを作成します。キーボード アクセラレータについての詳細は、「キーボード アクセラレータ」を参照してください。Mac 上でメニュー アクセラレータをサポートするには、key-accel-string が次の2つの修飾子をサポートします。
また、プラットフォーム名と、コロンで区切られ、角括弧で囲まれたアクセラレータを指定することにより、プラットフォーム特有のアクセラレータを key-accel-string に指定することができます。プラットフォーム名は platform-switch で認識されなければなりません。たとえば、次の文字列は Mac で command-U を、Windows では ctrl-Q を、そして それ以外のプラットフォームでは ctrl-W を指定します。
ctrl-w[mac:command-u][win32:ctrl-q]
Windows のプラットフォームでは、key-accel-string からの文字列を使用してキー アクセラレータを識別します。Mac のプラットフォームでは必要に応じて文字列をグラフィック シンボルに変換します。上記のコードは Windows のメニューでは Ctrl-q を表示し、Mac のメニューでは -u を表示します。

キーボード ニーモニック

多くの Windows アプリケーションで、各メニュー アイテムのラベルの中でアクセス キーを教えるために メニュー アクセス キー(下線を引いた文字、ニーモニック とも呼ばれます)を提供しています。アップル社ではこのようなアクセス キー またはニーモニックをメイン メニュー バーで提供しておらず、いかなる場所でもそれらの使用を推奨していません。
Curl API では、キーワード引数 key-accessMenuAction.default に使用してメニュー のアクセス キー を指定できます。これらは Windows と Linux で使用され、Mac では無視されます。

ボタン ショートカットとニーモニック

GUI ツールキットはボタンのラベル上のニーモニックもサポートしています。メニュー アクセス キー と同様に、これらは Windows と Linux で使用され、Mac では無視されます。

メニュー アイテムのアイコン

アップル ヒューマン インターフェイス ガイドラインではメニュー内でアイコンを使用しないよう推奨しています。メニュー アイコンを使用する場合、Mac 以外のプラットフォームという条件つきで使用してください。

コンテキスト メニュー

コンテキスト メニューを呼び出す Windows の標準は右クリックで、マウスボタンを離すとメニューが表示されます。Mac の標準ではコントロール クリックで、ボタンを押すとメニューが表示されます。Curl RTE はプラットフォームの標準に従います。

スクロール バー 処理

アップル ヒューマン インターフェイス ガイドラインでは、スクロール バーは不要な時でも表示されたままにすることを推奨しています。「スクロール バーの存在の制御」のセクションでは、スクロール バーの取り扱いテクニックについて説明しています。特に「スクロール バーを可視状態に保つ」と題された例に注目してください。そこでは可視状態でありながら不要な時は無効になるスクロール バーを持つ ScrollBox の作成の仕方を示しています。

アプリケーションの起動

Mac 上で起動されたアプリケーションは独立型の Curl のアプレットと同等です。通常は、Mac の OS X で起動されたアプリケーションは Finder Dock に対応するアイコンを持っています。Curl では、現時点で dock アイコンをサポートしていませんが、独立型アプレット はサポートしています。