我不宅,我只是不出門

Murmur of a technical dude

Firefox Gecko GFX

with one comment

利用 ATSUI 來把 Mozilla Firefox 文字部份的 rendering 重寫了一遍。原本 Gecko GFX 並不是用 ATSUI 而是用 QuickDraw 來繪圖並且自己處理 unicode font mapping, char glyph 等等。其實我猜大部份的程式碼應該是來自於 Mac OS 9(程式碼都還看得到 OS 8/9 這些文字的註解),畢竟 netscape 出來的時候,Mac OS X 還不知道在哪,那陣子 transition 的陣痛期,大概很多程式碼還都使用 QuickDraw 的部份。而 mozilla/gfx/src/mac 裡面的程式碼份量,足足比其他平台像是 GTK, Windows, Xlib 多了三到五倍之多。可見有很大部份的相關處理都不是由系統來完成。

雖然說 Mozilla 核心是跨平台,支援 W3C HTML 最標準的 browser,但是實際上是可能在某些平台和某些語言是如此。像是 Gecko rendering engine 目前在 Mac 上並不支援由右到左的書寫方式;甚至 CSS 可以寫 font-family: Arial, Tahoma 這種字型定義,但是在 Mac 部份卻無法達到設計者的要求。比如說可能 A 字元在 Arial 有,B 字元沒有,則在 Mac GFX 的處理上,的確會以 Arial 來繪出文字沒錯,但是沒有的 B Glyph,則直接 fallback 隨便找個字型就畫出來(中文缺字也大概是在這問題上)。在這兩個問題上,Safari 程式碼明顯都比 Mozilla GFX 好,因為 Safari 程式都有如此的設計。雖然 Safari 在某些網頁的相容性並不比 Firefox 好,甚至有 JavaScript 跑不出結果。但是 UI/Layout 上絕對是完全領先 Firefox 沒話說。

至於要使用 QuickDraw 還是 CoreGraphics (Quartz 2D)?因為並不是完全重寫 Mozilla 視窗部份程式碼,因此還是使用 QuickDraw 來作比較沒問題。至於 CoreGraphics,雖然說一堆網頁和 Apple 說 Quartz 會比 QuickDraw 好,但是實際上並不完全如此。比方來說,Quartz 2D Extreme 僅在 ATI 9800 or GeForceFX 以上的平台有支援,在像 iBook 這種 ATI 9200 上來說,缺乏 GL_ABR_fragement_program 的功能,是沒辦法支援 Quartz 2D Extreme。(有些人可能只會覺得 GPU 只有差 Dashboard 水波紋,其實裡面還有其他文章,價格差那麼多不是騙假的)。至於嘗試在 Firefox 開 CoreGraphics context 並且叫 ATSUI 畫到上面,雖然文件說 ATSUI on CG 會有 8-bit sub-pixel Anti-Aliases,一般 ATSUI on QD 只有 4-bit aligned AA。但是比較一下原本官方的 Firefox 畫面結果,放大後覺得字型邊邊反鋸齒的效果並沒有差太多。看來不是 Tiger 的 Quartz 2D 作得很好,就是 iBook 看不出來效果。因此 CoreGraphics 擺一邊,直接拿 QD 來用 ATSUI 就夠了。

而 Safari,當然是兩套都有寫進去,CoreGraphics 和 ATSUI 兩種都有各自程式碼,但是預設當然是用 CoreGraphics 來畫文字囉,不過有些特殊字元也會交給 ATSUI 來畫。如果有開啟 Debug Menu 的話,其中有一個 Use ATSU for All Text,便是直接全部使用 ATSUI 來作文字繪製囉。題外話,當 mozilla & safari 相較起來,safari 的程式碼明顯很容易看懂,mozilla’s GFX on mac 實在很難懂 XD。此外,對於基本的 ATSUI rendering 程式測試也差不多了,再來就是把它尚未弄好的缺失弄齊。程式碼現在真是大雜膾,有 C++(mozilla的)、Carbon(mozilla的,部份自己的)、還有 Cocoa(來自WebCore和自己的)。

Tags: , Firefox

Written by jclin

2005/10/03 於 12:31 上午

張貼於talk

一個回應

Subscribe to comments with RSS.

  1. This post has been removed by the author.

    Marouflash

    2005/10/04 at 2:30 下午


發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: