OSDN Git Service

refactor drawing to support layers
authorCary Clark <cary@android.com>
Tue, 23 Feb 2010 15:46:08 +0000 (10:46 -0500)
committerCary Clark <cary@android.com>
Wed, 24 Feb 2010 21:04:13 +0000 (16:04 -0500)
commit87962ce00229855c098ba12cee8d5c015a835289
treec6e9990575cad9cc687cf0c79573c13ac4d02f1b
parent4175d59b46f96005f0c64978b1a94e3fe60f1e8e
refactor drawing to support layers

Drawing elements that appear atop or below layers need to be
drawn both in the proper order and with the correct canvas to
respect clipping and the matrix.

Drawing the find results, text selection, or the cursor ring,
interleaves with any layers that may be drawn. The main picture
is treated as owned by a LayerAndroid so each component can
decide when to draw.

This change leave the main picture in WebViewCore.cpp, and
draws everything else in WebView.cpp -- in the future, additional
refactoring can put all drawing in one place.

The logic of what to draw is still in WebView.java, but the
actual drawing calls are now triggered inside the layer code.

Android.mk
- Add rule to trigger building without layers from buildspec.mk.

LayerAndroid.*
- Replace FindOnPage reference with abstract DrawExtra class to
  draw adornments in the layers' canvas context.
- Add a LayerAndroid constructor to create a dummy layer with a
  SkPicture* and a uniqueId==-1 so that extras can detect when
  they are drawn by the main picture.

android_graphics.*
- Move cursor ring drawing out of WebView.cpp to here.
- Separate cursor ring setup from actual drawing.
- Get the cursor ring metrics in local coordinates.

ChromeClientAndroid.cpp
- Fix compiler warnings.

WebViewCore.*
- Move updateCursorBounds from WebView.cpp. This permits it to
  be called from CursorRing::setup.

CachedFrame.*
CachedNode.*
CachedLayer.*
- Add local bounds getters.

CachedRoot.h
- Move class FindCanvas to the android namespace.

DrawExtra.h
- Add an abstract class called by LayerAndroid to optionally
  draw extra elements in its canvas context.

FindCanvas.*
SelectText.*
- Refactor drawing to draw in layers context.

WebView.cpp
- Move drawing from WebView.java.
- Remove selection code to SelectText.cpp.
- Use inverseScale to simplify viewPort metrics.
- Simplify layer root so java doesn't need to know about it.

Requires companion change in frameworks/base

http://b/2457316
http://b/2454127
http://b/2454149
21 files changed:
Android.mk
WebCore/platform/graphics/android/LayerAndroid.cpp
WebCore/platform/graphics/android/LayerAndroid.h
WebCore/platform/graphics/android/android_graphics.cpp
WebCore/platform/graphics/android/android_graphics.h
WebKit/android/WebCoreSupport/ChromeClientAndroid.cpp
WebKit/android/jni/WebViewCore.cpp
WebKit/android/jni/WebViewCore.h
WebKit/android/nav/CachedFrame.cpp
WebKit/android/nav/CachedFrame.h
WebKit/android/nav/CachedLayer.cpp
WebKit/android/nav/CachedLayer.h
WebKit/android/nav/CachedNode.cpp
WebKit/android/nav/CachedNode.h
WebKit/android/nav/CachedRoot.h
WebKit/android/nav/DrawExtra.h [new file with mode: 0644]
WebKit/android/nav/FindCanvas.cpp
WebKit/android/nav/FindCanvas.h
WebKit/android/nav/SelectText.cpp
WebKit/android/nav/SelectText.h
WebKit/android/nav/WebView.cpp