757 Commits

Author SHA1 Message Date
Florin Malita
cf6edd2b22 Merge "Pass full matrix + clip save flags to the native SkCanvas." 2014-06-10 21:32:31 +00:00
Leon Scroggins III
17a8bfc38a In Bitmap.reconfigure, update the pixelref's info.
This fixes CTS tests which are crashing on an SkASSERT due to a
mismatch of SkImageInfo between the SkPixelRef and SkBitmap.

Also directly call ref() and unref() instead of SkSafeRef/SkSafeUnref,
since we would already crash if the SkPixelRef in question was NULL.

Also if the user attempts to reconfigure to 4444, use 8888 instead.

Change-Id: I473ef225c6cd1c92d67ae103c53c6cff0dad92de
2014-06-11 18:53:42 -04:00
Robert Phillips
b59508fce5 Changes to framework for ToT Skia.
Consists of 3 cherry-pick from changes by robertphillips@google.com
in master-skia:

-----------------------------------------------------------------------

New AndroidPicture wrapper class

Address code review comments & use new SkPictureRecorder::partialReplay
entry point

Addressing code review issues

Switch MakePartialCopy to makePartialCopy

Conflicts:
	core/jni/android/graphics/Picture.cpp

Ie530ab15b3d549f0ecfb0ecc131f9144a7b72a91

Remove AndroidPicture from GraphicsJNI and split into .h and .cpp

-----------------------------------------------------------------------

Fix lingering legacy picture recording behavior
Address code review issues

Iaf870c2c400dbe70dc32d6d445574904f5ea718f

-----------------------------------------------------------------------

Update Android to new SkCanvas::drawPicture interface

As of Skia 9b14f26d (Alter SkCanvas::drawPicture (devirtualize,
take const SkPicture, take pointer) -
https://codereview.chromium.org/313613004) SkCanvas::drawPicture
has an alternate signature. The old entry point is deprecated.

I63395da61ecc3b58bfd2bc094752081f4b2f7535

-----------------------------------------------------------------------

Change-Id: I041133aeb5639abd853370e512acf93870f82aea
2014-06-11 18:27:48 -04:00
Florin Malita
b85056018b Pass full matrix + clip save flags to the native SkCanvas.
With granular state flags being deprecated, always pass full
save flags to the native canvas.

Legacy behavior is emulated in NativeCanvasWrapper, with a focus
on minimizing the overhead when there are no side effects to be
persisted.

Change-Id: Ifdad2ff9bb3a1f9736c6c41afc9ec6c07f62320e
2014-06-10 16:55:00 -04:00
Raph Levien
0627ec08dc Support fake italics
This patch adds fake italics, using essentially the same mechanism as
the fake bold implementation. Also combines fake bold/italic settings
with ones explicitly set in the paint.

Change-Id: Ia7eb3ddc8a6192d191711ba723ffd0d1d9d93f2e
2014-06-10 11:49:44 -07:00
Raph Levien
1fc0fa87d4 Support for fake bold in Minikin builds
Part of the fix for bug 15436379 Fake bold doesn't fully work (Minikin)

This patch queries the Minikin layout for when fake bold is needed,
and applies that to both shaping and drawing paint.

Also simplifies refcounting (the lifetime of all MinikinFont objects
is subsumed by the enclosing FontCollection).

Note: the fake bold flag set by the user is ignored in this patch.

Fake italics would be possible using the same mechanism, but it's
slightly more complicated (fake and user-set textSkewX values would need
to be combined, and the latter restored after drawing).

Change-Id: Ica2c4604846cbb37e5a783778b18d8993c9d4563
2014-06-10 11:37:55 -07:00
Raph Levien
71f75f1e7b Merge "Fix getFontMetrics problems" 2014-06-06 17:10:32 +00:00
Raph Levien
817ef4ae79 Fix getFontMetrics problems
Fixes a number of individual problems. In Minikin builds, gets base font
from TypefaceImpl rather than using whatever random font was in the
paint. Respects elegant metrics in ascent and descent methods as well as
getFontMetrics. Sets fixed ascent and descent values to 1900, -500,
which matches the Roboto font.

Part of the fix for bug 15467288 "Inconsistent line heights on
Minikin builds"

Change-Id: I12915f4a62de28932469c7279241eecf7320c47b
2014-06-06 10:06:01 -07:00
Florin Malita
53be7b79fb Merge "Implement SkCanvasGlue::clipRegion() using clipPath()." 2014-06-06 14:04:32 +00:00
Florin Malita
1dc14ba388 Implement SkCanvasGlue::clipRegion() using clipPath().
(Canvas clipRegion() public API is scheduled for deprecation)

The SkCanvas clip stack does not support clipRegion() ops. Implementing
these in terms of clipPath() makes persisting clips for SaveFlags
emulation purposes a whole lot simpler.

Change-Id: I41d1eb9e292ce370fba224338f9071d5e4068621
2014-06-05 16:51:35 -04:00
Raph Levien
2400476943 am e0ebf19c: Merge "Support for context in Minikin shaping" into lmp-preview-dev
* commit 'e0ebf19cbfa60ba3eb0891d5e8416b70b212bc36':
  Support for context in Minikin shaping
2014-06-05 20:08:57 +00:00
Raph Levien
4c25e5a1f9 am 79fbad97: Merge "Support for scaleX and skewX in Minikin" into lmp-preview-dev
* commit '79fbad97705d191f80d7af7e494ca4a5fed3a783':
  Support for scaleX and skewX in Minikin
2014-06-05 20:08:56 +00:00
Raph Levien
0ead890d1c Merge "Support for context in Minikin shaping" into lmp-preview-dev 2014-06-05 19:37:08 +00:00
Raph Levien
30d3c97f29 Merge "Support for scaleX and skewX in Minikin" into lmp-preview-dev 2014-06-05 19:26:33 +00:00
Raph Levien
6bfd7e7df3 Support for context in Minikin shaping
This patch uses the Minikin's new doLayout API that supports context,
and has some simple refactoring (pass css as string rather than setting
on the Layout object) to use this api.

Change-Id: I899474f81d377f3106e95ee3eb8d0fcc44c23ac2
2014-06-05 11:01:21 -07:00
Raph Levien
e95b5850ac Support for scaleX and skewX in Minikin
Passes textScaleX and textSkewX parameters, as well as paint flags from
the paint to Minikin, to support nontrivial scale and stretch of text.
Passing paint flags should minimize kerning artifacts arising from
mismatch of glyph rendering in layout and drawing.

Also, replaces unsafe snprintf to a fixed size buffer with a safe
version, which still avoids an allocation per layout operation.

This is part of the fix for bug 15186705 "Usability of the suggestion
strip in recent OTA's is severely reduced"

Change-Id: I79788383135836f4c21fb84405f36382627bf959
2014-06-05 10:57:18 -07:00
Raph Levien
8608bbb207 am 626b82f6: Merge "Query style from asset-created font (Minikin)" into lmp-preview-dev
* commit '626b82f63e4d7ea97187bec313b5cb687bb501b7':
  Query style from asset-created font (Minikin)
2014-06-04 22:19:56 +00:00
Raph Levien
f8423bae17 am 8fad12dc: Merge "Fix incorrect getStringBounds (Minikin)" into lmp-preview-dev
* commit '8fad12dc66f47af2fd394f44858802d10cf110f1':
  Fix incorrect getStringBounds (Minikin)
2014-06-04 21:32:07 +00:00
Raph Levien
1633caef58 Query style from asset-created font (Minikin)
This patch sets fStyle on the TypefaceImpl based on querying the font,
which is important in the Typeface.createFromAsset path. This fixes both
the style returned from getStyle() and also selects fallback fonts to
best match the style of the main font.

Fixes bug 15429916: "Typeface.getStyle always returning 0 in some L
devices".

Change-Id: I1992ba1e65e7f488d331e175f5f12843f67c2faa
2014-06-04 13:46:35 -07:00
Raph Levien
c5dc037008 am aef648f4: Merge "Better Minikin integration" into lmp-preview-dev
* commit 'aef648f405a6f2ed2e523e69cd6f1da884f4b9dd':
  Better Minikin integration
2014-06-04 18:44:32 +00:00
Florin Malita
676f92e9a7 Merge "Canvas JNI cleanup." 2014-06-04 16:04:45 +00:00
Florin Malita
95d49149cc Canvas JNI cleanup.
As pointed out in a previous patch review, some native Canvas methods do not
receive a native canvas handle and instead have to use GraphicsJNI to query
the object mNativeCanvasWrapper field.

To avoid the extra JNI call, this change adds the missing Java wrapper
methods and ensures that all native calls are passed efficient native
handles.

Also, some native methods are consolidated: save, saveAll -> save,
clipRect* -> clipRect.

Change-Id: I2eae4a633f6a463d9fbae2ca632661acc8b5cfc3
2014-06-04 11:09:18 -04:00
Leon Scroggins III
a578ab00c4 Merge "Ignore inPurgeable and inInputShareable." 2014-06-04 14:04:18 +00:00
Raph Levien
854363e3d2 Fix incorrect getStringBounds (Minikin)
This patch wires up getStringBounds to do the layout with Minikin to get
accurate bounds, and with the correct typeface. It fixes bug 15416575
"getStringBounds gives wrong result in Minikin".

Change-Id: I5c020bc372acb1d785a33c3c296239c151bd8c87
2014-06-03 21:11:06 -07:00
Raph Levien
f2114d5646 Better Minikin integration
This patch improves the Minikin integration in a number of ways,
including:

Software rendering does text decorations and handles alignment
correctly. This fixes bug 15139067 "Centered text isn't working".

Paint implements getTextPath. This fixes bug 15143354 "Text rendering in
Maps Navigation wrong typeface?"

Also a bit of refactoring, since there was duplicated code for iterating
font runs that's now a static method in MinikinUtils.

Change-Id: I4cfdb2c0559982376348325a757d95235fab1768
2014-06-03 17:44:35 -07:00
Leon Scroggins III
0aa39dc2dc Ignore inPurgeable and inInputShareable.
These are discouraged anyway, due to the fact that using them may
result in decoding on the UI thread. Now that they are ignored, the
images will still be decoded; they just will never have their
memory purged, meaning there could be a RAM penalty. This is
acceptable, since apps are encouraged to instead use inBitmap to
manage bitmap memory.

This incidentally fixes BUG:15390468 by converting purgeable index8
(e.g. gif) images to non purgeable.

Change-Id: Ieaf3ab25d28d93fb94bdaea1eb3bd762f163b09a
2014-06-03 14:05:58 -04:00
Raph Levien
690d45157d am faa91203: Merge "Support fallbacks for custom typefaces (Minikin)" into lmp-preview-dev
* commit 'faa912037ca4895eb99155a4a53354435ee413c2':
  Support fallbacks for custom typefaces (Minikin)
2014-06-03 17:15:56 +00:00
Raph Levien
1044046aa9 am 8e3605e4: Merge "Check for NULL on TypefaceImpl unref" into lmp-preview-dev
* commit '8e3605e4de5a109792acca22c37976ac52ee571e':
  Check for NULL on TypefaceImpl unref
2014-06-03 17:15:21 +00:00
Raph Levien
596f0b1a03 Merge "Support fallbacks for custom typefaces (Minikin)" into lmp-preview-dev 2014-06-02 22:54:58 +00:00
Raph Levien
a0cba0fde3 Check for NULL on TypefaceImpl unref
It's possible for a TypefaceImpl to contain a null pointer, which was
causing crashes on unref. This patch just checks for NULL.

Fixes bug 15104801 "Aviate Launcher crashes on startup - Hammerhead L
AAV49B"

Change-Id: Idf9f176c54bf81ff3daacc0b33e95aa9d8bbe57f
2014-06-02 13:37:34 -07:00
Raph Levien
d573794d83 Support fallbacks for custom typefaces (Minikin)
This patch adds the fallback font list to custom typefaces created from
files and assets, as well as those created by name. This is a fix for
the deskclock half of bug 15139067 "Centered text isn't working".

Change-Id: I0cc60951953dfb73817a98ddfee5713f0387ee90
2014-06-02 10:56:23 -07:00
Florin Malita
9ec2eabe5a Merge "Add a native Canvas wrapper." 2014-06-02 13:37:11 +00:00
Mike Reed
686534db8d switch to non-deprecated SkBlurStyle type
Will allow skia to remove SK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE

Change-Id: I0039dd7e0e807080d2b4f9e648df93123dd09e8d
2014-05-30 21:05:47 +00:00
Florin Malita
5c3d927e17 Add a native Canvas wrapper.
Instead of storing a direct SkCanvas reference, Canvas now tracks
an opaque native wrapper class. The native wrapper can be used to
store additional info for emulating deprecated Skia features
(at this point it only stores a canvas).

Some notes:

* all native handle -> SkCanvas conversions are routed through a
  handful of native utility methods.
* safeCanvasSwap() refactored as a lower level setNativeBitmp() - which
  is what clients need.
* removed unused get_thread_msec() (Canvas.cpp)

Change-Id: I715a5a6f1e1621c1cfc1e510ae4f2ea15cf11114
2014-05-30 16:11:04 -04:00
Raph Levien
ca672f2758 am 953fe800: Merge "Language and variant selection for Minikin" into lmp-preview-dev
* commit '953fe800caf1771217ff1e828d6aa93fbc16729c':
  Language and variant selection for Minikin
2014-05-29 22:38:34 +00:00
Raph Levien
f9e3d31127 Language and variant selection for Minikin
This is the frameworks/base side of what's needed to support language
selection (especially Han unification, but also compact/elegant
selection for scripts that require more vertical space).

This is part of the fix for bug 15179652 "Japanese font isn't shown on
LMP".

Change-Id: I8f0f3aa9a1915659f8d0b590cf1c56529356049a
2014-05-29 14:21:24 -07:00
Leon Scroggins III
8f8c085164 Merge "Remove call to deprecated SkBitmap::asImageInfo." 2014-05-27 20:42:44 +00:00
Leon Scroggins III
28408c2395 Remove call to deprecated SkBitmap::asImageInfo.
Instead, call SkBitmap::info().

Change-Id: Ib6e56c6e103afa5748405574043860449c33c467
2014-05-27 16:20:21 -04:00
Leon Scroggins III
5f6aa983d6 Fix FILTER_BITMAP_FLAG regression in DrawFilter.
Skia removed the corresponding kFilterBitmapFlag, replacing it with a
separate function: setFilterLevel. If the flag is set, turn it into a
call to setFilterLevel.

Corresponds to changes in I2736f3f68683651574d79a169ff0ab563e0a469e to
fix Paint.setFlags().

BUG:15112859
Change-Id: I269cbd7a624e5dde5688305e1ba97075ba73f4fd
2014-05-27 12:15:32 -04:00
Leon Scroggins III
0fa2bd699a DO NOT MERGE Inspect SkShader to determine hw shader.
cherry-pick of Iaa7189178bda1c55f96da044d2a9fa602ba36034

Instead of duplicating internal info about SkShader, inspect the
SkShader installed on the SkPaint.

core/java/android/view/GLES20Canvas.java:
Remove setupModifiers, nResetModifiers, and nSetupShader.

core/jni/android/graphics/Shader.cpp:
Remove calls to create/destroy the (previously) attached SkiaShader.

core/jni/android_view_GLES20Canvas.cpp:
Remove native code for setupShader and resetModifiers.

graphics/java/android/graphics/BitmapShader.java:
graphics/java/android/graphics/ComposeShader.java:
graphics/java/android/graphics/LinearGradient.java:
graphics/java/android/graphics/RadialGradient.java:
graphics/java/android/graphics/Shader.java:
graphics/java/android/graphics/SweepGradient.java:
Remove code keeping track of native SkiaShader.

libs/hwui/Caches.h:
Include Extensions.h.

libs/hwui/DeferredDisplayList.cpp:
Compare shaders on the paint, instead of on DrawModifiers.

libs/hwui/DisplayList.cpp:
libs/hwui/DisplayList.h:
Remove vector of SkiaShaders.

libs/hwui/DisplayListOp.h:
Access the SkShader on mPaint.
Remove SetupShaderOp and ResetShaderOp.

libs/hwui/DisplayListRenderer.cpp:
libs/hwui/DisplayListRenderer.h:
Remove resetShader, setupShader, refShader, and mShaderMap.

libs/hwui/FontRenderer.cpp:
Pass SkShader to setupDrawShader and setupDrawShaderUniforms.

libs/hwui/OpenGLRenderer.cpp:
libs/hwui/OpenGLRenderer.h:
Add LayerShader, a class inheriting from SkShader, to mimic the
behavior of SkiaLayerShader. Unlike SkiaLayerShader, it can be set on
the SkPaint so it can be inspected later.
Set a LayerShader instead of a SkiaLayerShader.
setupDrawShader and setupDrawShaderUniforms now inspect an SkShader
passed in.
Inspect SkShader instead of mDrawModifiers.mShader.
Remove resetShader and setupShader.
setupDrawColorUniforms now takes a boolean indicating whether there is
a shader.
Add an inline function for accessing the SkShader on an SkPaint.
In setupDrawBlending(Layer*, bool), do not check the shader (which will
never be set), but do check whether the color filter may change the
alpha (newly fixed behavior).
In setupDrawBlending(SkPaint, ...), check the SkShader and whether the
color filter affects alpha (the latter is new behavior).

libs/hwui/Renderer.h:
Remove pure virtual functions setupShader and resetShader.

libs/hwui/ResourceCache.cpp:
libs/hwui/ResourceCache.h:
Remove functions for refing/unrefing shaders.

libs/hwui/SkiaShader.cpp:
libs/hwui/SkiaShader.h:
Much of this code was redundant and has been removed.
Convert structs into class with nothing but static functions for
calling describe/setupProgram.

libs/hwui/TextureCache.cpp:
libs/hwui/TextureCache.h:
Use the SkPixelRef as the key to the bitmap Lru cache, since shader
inspection will provide a different SkBitmap pointer (though it will
hold the correct SkPixelRef with the correct generation ID).

tests/CanvasCompare/src/com/android/test/hwuicompare/DisplayModifier.java:
tests/CanvasCompare/src/com/android/test/hwuicompare/ResourceModifiers.java:
Update manual test to have more shaders: radial, sweep, compose,
invalid compose.

BUG:10650594
Change-Id: I2e7182b3fc28268e7ca82fac6780540b6b45365c
2014-05-23 11:50:38 -04:00
Chris Craik
d490aa4260 Merge "Inspect SkShader to determine hw shader." 2014-05-23 00:03:46 +00:00
Leon Scroggins III
d1ad5e62fd Inspect SkShader to determine hw shader.
Instead of duplicating internal info about SkShader, inspect the
SkShader installed on the SkPaint.

core/java/android/view/GLES20Canvas.java:
Remove setupModifiers, nResetModifiers, and nSetupShader.

core/jni/android/graphics/Shader.cpp:
Remove calls to create/destroy the (previously) attached SkiaShader.

core/jni/android_view_GLES20Canvas.cpp:
Remove native code for setupShader and resetModifiers.

graphics/java/android/graphics/BitmapShader.java:
graphics/java/android/graphics/ComposeShader.java:
graphics/java/android/graphics/LinearGradient.java:
graphics/java/android/graphics/RadialGradient.java:
graphics/java/android/graphics/Shader.java:
graphics/java/android/graphics/SweepGradient.java:
Remove code keeping track of native SkiaShader.

libs/hwui/Caches.h:
Include Extensions.h.

libs/hwui/DeferredDisplayList.cpp:
Compare shaders on the paint, instead of on DrawModifiers.

libs/hwui/DisplayList.cpp:
libs/hwui/DisplayList.h:
Remove vector of SkiaShaders.

libs/hwui/DisplayListOp.h:
Access the SkShader on mPaint.
Remove SetupShaderOp and ResetShaderOp.

libs/hwui/DisplayListRenderer.cpp:
libs/hwui/DisplayListRenderer.h:
Remove resetShader, setupShader, refShader, and mShaderMap.

libs/hwui/FontRenderer.cpp:
Pass SkShader to setupDrawShader and setupDrawShaderUniforms.

libs/hwui/OpenGLRenderer.cpp:
libs/hwui/OpenGLRenderer.h:
Add LayerShader, a class inheriting from SkShader, to mimic the
behavior of SkiaLayerShader. Unlike SkiaLayerShader, it can be set on
the SkPaint so it can be inspected later.
Set a LayerShader instead of a SkiaLayerShader.
setupDrawShader and setupDrawShaderUniforms now inspect an SkShader
passed in.
Inspect SkShader instead of mDrawModifiers.mShader.
Remove resetShader and setupShader.
setupDrawColorUniforms now takes a boolean indicating whether there is
a shader.
Add an inline function for accessing the SkShader on an SkPaint.
In setupDrawBlending(Layer*, bool), do not check the shader (which will
never be set), but do check whether the color filter may change the
alpha (newly fixed behavior).
In setupDrawBlending(SkPaint, ...), check the SkShader and whether the
color filter affects alpha (the latter is new behavior).

libs/hwui/Renderer.h:
Remove pure virtual functions setupShader and resetShader.

libs/hwui/ResourceCache.cpp:
libs/hwui/ResourceCache.h:
Remove functions for refing/unrefing shaders.

libs/hwui/SkiaShader.cpp:
libs/hwui/SkiaShader.h:
Much of this code was redundant and has been removed.
Convert structs into class with nothing but static functions for
calling describe/setupProgram.

libs/hwui/TextureCache.cpp:
libs/hwui/TextureCache.h:
Use the SkPixelRef as the key to the bitmap Lru cache, since shader
inspection will provide a different SkBitmap pointer (though it will
hold the correct SkPixelRef with the correct generation ID).

tests/CanvasCompare/src/com/android/test/hwuicompare/DisplayModifier.java:
tests/CanvasCompare/src/com/android/test/hwuicompare/ResourceModifiers.java:
Update manual test to have more shaders: radial, sweep, compose,
invalid compose.

BUG:10650594

Change-Id: Iaa7189178bda1c55f96da044d2a9fa602ba36034
2014-05-22 14:46:59 -04:00
Mathieu Chartier
304bbd287c Temporary fix for buffer overrun issue.
Allocating the bitmap using getSafeSize() causes problems since
getSafeSize64() < getSize() if there is a stride. Since everywhere
else uses getSize() it results in a lot of possible buffer overruns.
The fix reverts to using getSize instead of getSafeSize64.

Bug: 15089814
Change-Id: Ia471cf9715672d57bb7eb61bf735064aeb405ffe
2014-05-21 15:14:02 -07:00
Victoria Lease
49f0db3481 fix argument order in call to SkBlurDrawLooper constructor
This fixes all sorts of badness.

Bug: 15074512
Change-Id: I5e96983c58d19e0dc2d8fa61d1efa9dcff076ca1
2014-05-19 16:12:22 -07:00
Raph Levien
b98de0dcd6 Get rid of dirFlags log spam
I was logging the BiDi flags for debugging, did not mean to commit this.

Change-Id: I0a89c68fe17562f2ed38843efacbaa310dca24fa
2014-05-16 11:50:50 -07:00
Svetoslav
dbef65f1a1 Merge "Adding APIs to render PDF documents." 2014-05-15 20:15:06 +00:00
Mike Reed
4c9355c35a Frameworks changes to support latest Skia (r14729)
Required for a merge in external/skia
(I88b4d5cc81c357a8e223bd7860b1029590265200).

Includes two cherry-picks:

I456df543e1925b280f785c7b3bb81370157f9b09:
replace SkRasterizer* with NativeRasterizer* in JNI

I98adb200e023369d3ee75f21927fa98f23095a77:
Fix Paint.getFlags,setFlags wrt FILTER_BITMAP_FLAG

In Paint.setFlags(), turn FILTER_BITMAP_FLAG into a call to
SkPaint::setFilterLevel().

In Paint.getFlags(), read SkPaint::getFilterLevel() to determine
whether to include FILTER_BITMAP_FLAG in the result.

Fixes CTS tests with ToT Skia.

Change-Id: I2736f3f68683651574d79a169ff0ab563e0a469e
2014-05-15 10:17:44 -04:00
Raph Levien
1044a8211d Merge "BiDi support for Minikin" 2014-05-15 02:11:48 +00:00
Raph Levien
9e2b288ba8 Merge "Proper refcounting for Minikin objects" 2014-05-15 02:03:48 +00:00
Raph Levien
018646adac Merge "Parsing of XML font configuration files for Minikin" 2014-05-15 02:03:34 +00:00