mazilla mozilla
はじめに
モジラとは
当ページの主旨
モジラの特徴
モジラ概観
モジュール
Webツール
モジラの技術
その他のリソース
モジラのビルド
ビルド環境の構築
ソースのチェックアウト
ビルド手順
ビルド後のイメージ
モジラを実行
エンベッディング
エンベッディングとは
エンベッディングの概念
PPBrowserの構造
PPBrowserの解析
エンベッディングの構造
marbrowの構造
marbrowの解析
フィジラ
フィジラとは
フィジラのビルド
フィジラのエンベッディング
FAQ
やつぎ氏との会話

PPBrowserの構造

PPBrowserってどうなってるの!


モジラには、Macintoshでのエンベッディングのお手本として、Conrad Carlen氏のPPBrowserがあります。

ここでは、このPPBrowserを解析し、モジラエンベッディングの構造を探っていきます。


◆ ビルド ◆

ソースは、本体のモジラソースに含まれており、既にチェックアウト済みです。

mozilla/embedding/browser/powerplant/

下記のCodeWarriorプロジェクトにより、ビルドできます。

mozilla/embedding/browser/powerplant/PPBrowser.mcp

下記の場所にビルド結果の実行形式が出力されます。

mozilla/dist/viewer/PP Browser
mozilla/dist/viewer_debug/PP BrowserDebug

【PPBrowserのスクリーンショット】


◆ ソース構造 ◆

■ Application

CBrowserApp.cp - アプリケーションクラス (CBrowserApp)
CBrowserShell.cpp - ブラウザシェルクラス (CBrowserShell)
CBrowserWindow.cp - ウィンドウクラス (CBrowserWindow)
CFindComponent.cpp - Find Componentクラス (CFindComponent)
CThrobber.cpp - Throbberクラス (CThrobber)
CUrlField.cp - Url Fieldクラス (CUrlField)
CWebBrowserChrome.cpp - ブラウザクロームクラス (CWebBrowserChrome)
UMacUnicode.cpp - Unicode変換用ユーティリティ
Browser.ppob - PowerPlant Object リソース
Browser.rsrc - その他のリソース
cfmAlias.rsrc - Release Build用Aliasリソース [※1
cfmAliasDebug.rsrc - Debug Build用Aliasリソース [※1

■ Embed API [※2

EmbedAPI.mcp - Embedding Library用プロジェクト
EmbedAPI.o - Release Build用Embedding Library
EmbedAPIDebug.o - Debug Build用Embedding Library

■ PowerPlant
■ PowerPlant Resources
■ PowerPlant Appearance

使用するPowerPlantクラスの為のソース&リソース

■ System Libraries

使用するMacintosh Shlb用スタッブライブラリ

■ NS Libraries - モジラ用ライブラリ (Release/Debug共通)

NSAppStartup.o - モジラ用スタートアップ (mozilla/dist/mac/lib/) [※3

■ NS Libraries/Release - モジラ用ライブラリ (Release用) [※4

appfilelocprovider.o - (mozilla/modules/appfilelocprovider/)
mpfilelocprovider.o - (mozilla/modules/mpfilelocprovider/)
gfx.shlb - (mozilla/dist/viewer/Essential Files/)
NSRuntime.shlb- (mozilla/dist/viewer/Essential Files/)
NSStdLib.shlb- (mozilla/dist/viewer/Essential Files/)
NSPR20.shlb- (mozilla/dist/viewer/Essential Files/)
RaptorShell.shlb- (mozilla/dist/viewer/Essential Files/)
widget.shlb- (mozilla/dist/viewer/Essential Files/)
xpcom.shlb- (mozilla/dist/viewer/Essential Files/)

■ NS Libraries/Release - モジラ用ライブラリ (Debug用) [※4

appfilelocproviderDebug.o - (mozilla/modules/appfilelocprovider/)
mpfilelocproviderDebug.o - (mozilla/modules/mpfilelocprovider/)
gfxDebug.shlb - (mozilla/dist/viewer_debug/Essential Files/)
NSRuntimeDebug.shlb - (mozilla/dist/viewer_debug/Essential Files/)
NSStdLibDebug.shlb - (mozilla/dist/viewer_debug/Essential Files/)
NSPR20Debug.shlb - (mozilla/dist/viewer_debug/Essential Files/)
RaptorShellDebug.shlb - (mozilla/dist/viewer_debug/Essential Files/)
widgetDebug.shlb - (mozilla/dist/viewer_debug/Essential Files/)
xpcomDebug.shlb - (mozilla/dist/viewer_debug/Essential Files/)


【※1】

cfmAlias.rsrc、cfmAliasDebug.rsrcは、モジラ実行形式が使用するShlbのパス指定を行う為のAliasリソースを含みます。

  • cfmAlias.rsrc - resType = 'alis'、resID = 129
  • cfmAliasDebug.rsrc - resType = 'alis'、resID = 128

このAliasリソースのリソースID を、PPC PEF Setting の Library Folder ID: に指定することにより、Shlb の相対パスを設定します。


【※2】

Embedding Library (EmbedAPI.o,EmbedAPIDebug.o)は、本体のモジラビルドでは作成されません。本体モジラビルド後、mozilla/embedding/base/macbuild/EmbedAPI.mcpプロジェクトにより、出力されます。PPBrowserでは、このEmbedAPI.mcpをサブプロジェクトとして取り込み、Embedding Libraryを出力しています。最終的に必要なものは、EmbedAPI.o,EmbedAPIDebug.oです。


【※3】

モジラでは独自のスタートアップコードを使用しています。
これは通常のスタートアップ処理に加え、GC (Garbege Collector)用の初期化/終了処理を追加したものです。
mozilla/lib/mac/NSStartup/NSStartup.mcp
これをリンクし、PPC Linker Setting で、Initialization: __NSInitialize、Termination: __NSTerminateを指定します。


【※4】

これらの内、Shlbは実際にリンクされる訳では無く、参照解決されるだけです。モジラで使用されるShlbは、

  • mozilla/dist/viewer/Essential Files/ - Release用必須Shlb
  • mozilla/dist/viewer/Components/ - Release用コンポーネントShlb
  • mozilla/dist/viewer_debug/Essential Files/ - Debug用必須Shlb
  • mozilla/dist/viewer_debug/Components/ - Debug用コンポーネントShlb

に存在しますが、これらはエイリアスで、実体は各モジュールのディレクトリ以下に存在します。

mozilla/dist/viewer/ 以下のみで、モジラの実行環境となりますが、ここにはShlbを始め多くのエイリアスを含むので、製品化の折りには、これらのエイリアスを実体解決しなければなりません。


◆ ビジュアル構造 ◆

PPBrowserはPowerPlantアプリケーションであるので、メインウインドウのビジュアル構造は、Browser.ppob内のLayoutリソース (ID=129)で静的に定義されています。

Constructorでのメインウインドウのレイアウトは、以下のようなものです。

以下にこれらの内、重要なものを示します。

LWindow
  ( class_ID='BroW', class=CBrowserWindow )

メインウィンドウ

CBrowserShell
  ( class_ID='BroS', pain_ID='WebS'、class=CBrowserShell )

ブラウザコントロール (HTML部分)

LEditText
  ( class_ID='UrlF', pain_ID='gUrl'、class=CUrlField )

URLコントロール (LocationBar)

LStaticText
  ( class_ID='UrlF', pain_ID='Stat'、class=LStaticText )

ステータスコントロール

LBevelButton
  ( class_ID='bbut', pain_ID='Back'、class=LBevelButton )

LBevelButton
  ( class_ID='bbut', pain_ID='Forw'、class=LBevelButton )

LBevelButton
  ( class_ID='bbut', pain_ID='Stop'、class=LBevelButton )

Back、Forward、Stopボタン

LProgressBar
  ( class_ID='pbar', pain_ID='Prog'、class=LProgressBar )

プログレスバーコントロール

CThrobber
  ( class_ID='Thrb', pain_ID='THRB'、class=CThrobber )

スロッバーコントロール (ネット処理時アニメするピクチャー)


◆ クラス構造 ◆

CBrowserApp (CBrowserApp.cp、CBrowserApp.h)

アプリケーションのクラスです。

CBrowserWindow (CBrowserWindow.cp、CBrowserWindow.h)

メインウィンドウのクラスです。

CBrowserShell (CBrowserShell.cp、CBrowserShell.h)

ブラウザコントロール (HTML部分)のクラスです。

CWebBrowserChrome (CWebBrowserChrome.cp、CWebBrowserChrome.h)

ブラウザクロームのクラスです。必要なインターフェースを装備しブラウザコントロールと表裏一体となることで、ブラウザクラスと他のモジラ部分とのやりとりの中継基地的存在として動作します。

CUrlField (CUrlField.cp、CUrlField.h)

URLコントロール (LocationBar)のクラスです。

CThrobber (CThrobber.cp、CThrobber.h)

スロッバーコントロール (ネット処理時アニメするピクチャー)のクラスです。

CFindComponent (CFindComponent.cp、CFindComponent.h)

ファインドコンポーネントのクラスです。

その他に、PowerPlantの既存クラスで処理されるものがあります。

  • Back、Forward、Stopボタン - LBevelButton
  • ステータスバー - LStaticText
  • プログレスバー - LProgressBar


 
 
c_o_n_t_a_c_t
Copyright (C) 2000-2002 Symphony, Inc. All Rights Reserved.
English