1. Skia developed for Android:
* Windows : Skia + "Chromium Win"
* Linux : Skia + "Chromium Linux"
* Mac : mostly matches Safari,doesn't use Skia
2. GraphicsContext represents a generic drawing surface.
Implementation split into two parts:
* GraphicsContext.cpp : Cross-platform code
* GraphicsContext[Skia|Mac].cpp : Platform-specific
Shared header with #ifdefs,only one object
3. Fonts
* Font.cpp
* FontChromiumWin.cpp
* FontLinux.cpp
* FontMac.mm
Fast path for simple text
* GlyphPageTreeNode : Font,Character -> Font,Glyph
* GlyphWidthMap : Glyph -> Width
Complex path (Arabic,Indic)
* Uniscribe,ATSUI,Harfbuzz
4. Images
* Image.cpp
* ImageSkia.cpp
* ImageMac.cpp
Hooks in all image decoders
2 level memory cache
* Decoded (uncompressed) data
* Encoded (compressed) data
5. Painting in Test Shell(Win/Linux)
* Get an "invalid rect" from the OS
* Make a skia::PlatformCanvas,setup transform
(wraps a SkCanvas to integrate with the OS)
* Create a GraphicsContextSkia with the bitmap
* WebKit paints into the canvas
* Copy canvas to invalid area on screen
6. Painting in Chrome
Browser and renderer must run asynchronously
* Browser maintains a "backing store" of the tab
* renderer paints get copied into this backing store
RenderWidget,RenderWindgetHost handle paint & input
RenderView inherits from RenderWidget to represent a "web page"
* Windows : Skia + "Chromium Win"
* Linux : Skia + "Chromium Linux"
* Mac : mostly matches Safari,doesn't use Skia
2. GraphicsContext represents a generic drawing surface.
Implementation split into two parts:
* GraphicsContext.cpp : Cross-platform code
* GraphicsContext[Skia|Mac].cpp : Platform-specific
Shared header with #ifdefs,only one object
3. Fonts
* Font.cpp
* FontChromiumWin.cpp
* FontLinux.cpp
* FontMac.mm
Fast path for simple text
* GlyphPageTreeNode : Font,Character -> Font,Glyph
* GlyphWidthMap : Glyph -> Width
Complex path (Arabic,Indic)
* Uniscribe,ATSUI,Harfbuzz
4. Images
* Image.cpp
* ImageSkia.cpp
* ImageMac.cpp
Hooks in all image decoders
2 level memory cache
* Decoded (uncompressed) data
* Encoded (compressed) data
5. Painting in Test Shell(Win/Linux)
* Get an "invalid rect" from the OS
* Make a skia::PlatformCanvas,setup transform
(wraps a SkCanvas to integrate with the OS)
* Create a GraphicsContextSkia with the bitmap
* WebKit paints into the canvas
* Copy canvas to invalid area on screen
6. Painting in Chrome
Browser and renderer must run asynchronously
* Browser maintains a "backing store" of the tab
* renderer paints get copied into this backing store
RenderWidget,RenderWindgetHost handle paint & input
RenderView inherits from RenderWidget to represent a "web page"