T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« トランスポーターは便利!? | トップページ | 変更仕様を確定 »

歴史の深さというか・・・

今は、Mirror-DTC Ver1.4.4の開発フェーズで、既にWindows/macOS用のβ1版を公開中なのだが、その次のステップとして、トランスポーターを更新中だ。まず、他OS版よりも低機能なmacOS版を他OS並みに変更したのだが、結構疲れた。

macOS版が他OS版、つまり、Windows / Ubuntu版よりも低機能なのは、macOS版には、転送中Windowを隠す機能がないからだ。

何故、macOS版には当該機能がなかったのか、というと、この機能を実現するためには、デスクトップ上ではWindowを見えなくしつつ、その表示内容はMirror-DTCクライアント向けにキャプチャーして転送できる必要があったからだ。

つまり、macOSには、そんな処理を実現できる様なAPIが見つからなかったので、当該機能は実装していなかったのだが、今年はまだ3月という事もあり、少し時間をかけて調べてみた所、他アプリのウインドウを移動させる処理は、アクセシビリティ関連のAPIを使えば実現できる事が判った。

なので、転送中Windowを完全に隠す事は出来ないにしても、画面の端に追いやって、邪魔にならなくする事で、同様の使い勝手を実現できるかなあ、という事で、Ver1.4.4のmacOS版には、他OS版と同様のWindowを隠す処理を実装する事にした訳だ。

しかし、他OS版と同様の機能を実現する為には、昨日書いた様に、macOS的には「ステージマネージャー」相当の使い勝手も、実現する必要がある。

具体的には、転送中アプリの操作をしたい様な場合には、そのウインドウをアクティブ化すれば、普通にデスクトップ画面に表示される様にし、操作が終わったら、ウインドウを非アクティブ化する事で、自動的に、また、ウインドウが隠される様にする機能の実装も必要だった訳だ。

Windows版の場合、ウインドウが隠されていても、タスクバーのアイコンをクリックすれば、アクティブ化されるので、自動的にウインドウが表示されるし、他ウインドウやデスクトップをクリックしてそのウインドウを非アクティブ化すれば、自動的に、また隠される。

なので、この挙動に慣れれば、「ステージマネージャー」と同様に、デスクトップをすっきりとした状態で、色々なアプリを操作できる。

この様な操作形態は、Ubuntu版にも踏襲してあるので、Ubuntu環境でも、macOS環境の「ステージマネージャー」の様な使い勝手が実現できているのだが、macOS版については、そもそも、ウインドウを隠す機能を実装していなかったので、この「ステージマネージャー」相当の機能も実現していなかった。

このため、今回、ウインドウを隠す機能を搭載する事にしたので、同時に、「ステージマネージャー」相当のこの機能も実装しようとしたのだが、その為には、アクティブウインドウを検出する処理が必要になった。

アクティブウインドウというのは、macOSの場合、デスクトップの最上部のメニューを所有しているアプリのメインウインドウになるのだが、このウインドウの検出方法が判らなかった訳だ。

具体的には、CoreGraphics関連のAPIを使えば、デスクトップに表示されているウインドウを列挙する事は簡単で、その列挙順は、表示されているウインドウのZオーダーになる。

なので、その最初に列挙されるウインドウは最前面ウインドウになるのだが、その最前面ウインドウがアクティブウインドウであるとは限らない。

何故なら、そのウインドウがアクティブではない可能性があるからなのだが、そのウインドウがアクティかどうかというのは、前述のウインドウ列挙用のAPIで出力されたデータからは取り出せなかった。

何故、取り出せないのか、というと、多分、CoreGraphicsというのは、そういう処理とは関係ないレベルのAPIになるから! かもしれないのだが、そんな事は、20年前からMacを使ってきている作者的にも、知ったことではない訳だ。

つまり、作者が最初にMacを知ったのは、大学の4年生だった頃に、大学から駅までの道路の途中で宣伝用のビラか何かを配っている人を見かけた時なので、西暦で言えば、1984年くらいだった筈だ。

その後、Macはヒット商品になったので、その搭載OSも、バージョンアップされていった筈なのだが、後からMacを真似て作られたWindowsは、初期バージョンの頃には、Macと同様に、擬似マルチタスクOSだったのだが、Windows95の頃になると、真面目なマルチタスクOS、つまり、プリエンティブマルチタスクOSへと進化した。

なので、MacのOS的にも、ちゃんとしたマルチタスクが可能なアーキテクチャに進化させる必要があったのだが、その試みはことごとく失敗した。

このため、当時、NextStepという新しいコンピュータ会社を立ち上げていたスティーブ・ジョブズを、再度、Appleに引き入れ、その最先端を行っていたNextStep用として開発されていたOSを、Mac OSXとして、Macの次世代OSとした訳だ。

しかし、従来のMacOSとの互換性も必要だったし、それからかれこれ20年以上はたっている訳なので、その間に、Mac用として新しいフレームワークなんかも導入されてきた。

その結果として、今現在のmacOSのAPIというのは、様々なフレームワークの集合体になっていて、普通のOSなら、単一フレームワークで事足りる様なことが、幾つかのフレームワークを跨いで同時に使わないと解決できなかったりしている。

つまり、Apple的には、既に存在する古いフレームワークで実現できる事に対しては、そのフレームワークでやってくれ! それで足りない機能については、新しいフレームワークで実現する! みたいな感じでやってきている感じなので、今時のフレームワークだけでは、問題を解決できなかったりする事も多々ある訳だ。

しかし、作者くらい昔からMacを使ってきている人間ですら、OS9用のAPIなんて知った事ではないし、NextStepのオリジナルマシンは触った事すらない。

と、いう事で、Windows / Ubuntu (Xorg)では、簡単に実装できた様な機能も、macOS用に実装しようとすると大変だったりするのだが、何とか、実現できた感じなので、次は、全OS版に適用する予定の8モニターエミュレーション機能を実装していく事になる。

ちなみに、作者はMac OS9用にプログラムを組んだ事はない。

また、Windows3.1用にも、プログラムを組んだ事はないのだが、その理由は、前述のプリエンティブマルチタスクが出来ない事を知っていたからだ。

つまり、作者的には、1988年くらいには、既に、X68000のOS-9/X68kで、プリエンティブなマルチタスク環境を使えていたし、更に、当時は大企業のコンピュータ開発部門のハードウェアエンジニアだった作者的には、仕事では、やはり本当のマルチタスク環境である所のSunOSが搭載されたワークステーションを使っていた。

なので、擬似マルチタスクのMacOSだとかWindows3.1なんて、子供のおもちゃでしょ? みたいな所もあった訳だ。

そして、1995年には、「闘うプログラマー」で有名になったWindows NTが、一般人的にも利用可能になったので、当時、自作PCをメインマシンにしていた作者的には、メインマシンにはWindowsNT3.51→4.0くらいをインストールして使っていた訳だ。

更に、Windows95は、アプリケーションAPI的には、WindowsNT3.51とほぼ互換性があったので、作者的には、プログラムを書く場合には、WindowsNT/95用に書く感じになった。

もっとも、作者的にも、イベントドリブンのWindowsのGUI用にコードを書くのには慣れが必要だったので、2001年には、MacのOS的にも、MacOSXがリリースされたのだが、そちらを弄っている余裕はなかった。

その後も、Windowsのシェアが絶大だったので、作者的にも、基本的には、Windowsの相手しかしていられなかったので、macOS用に真面目にコードを書き始めたのは、Mirror-DTCのmacOS版を開発し始めた頃、つまり、2011年くらいから、という事になる。

と、いう事なので、新参者!? の作者的には、macOSで何か新しい事をやろうとすると疲れる事になる訳だ。

« トランスポーターは便利!? | トップページ | 変更仕様を確定 »

2024年5月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    収集された情報がGoogleによってどの様に使用されるか、収集される情報をユーザーが管理する方法については、以下のリンクを参照下さい。

    ポリシーと規約 - Google