Commit Graph

84 Commits

Author SHA1 Message Date
Xavier Ducrohet
bbefc8662a LayoutLib: Fix multi-line text rendering.
Stupid indices.

Change-Id: I1dbdd04b8f25a5769de8dc21e6c513cef3e35635
2011-01-13 18:02:08 -08:00
Xavier Ducrohet
918aaa5717 LayoutLib: Use the new log tag constants from LayoutLog
Change-Id: I29dd578ae16405358d3673caf13528be393f0967
2011-01-13 11:08:27 -08:00
Xavier Ducrohet
ee592fe4e6 LayoutLib: move MockView back into its original package.
This is used by Eclipse when the custom view is not found.
It couldn't find the view in the new package either.

We should probably move this logic of creating a mock view
into the layout library instead.

Change-Id: Ifa1a717cddf7004a7719bb4d0798cd53b43273ea
2011-01-12 20:36:02 -08:00
Xavier Ducrohet
56222cfbe9 LayoutLib: use tags in logs.
Change-Id: Ib85272249d285ecef409bf063903bcd91514a424
2011-01-12 15:59:49 -08:00
Xavier Ducrohet
6c740cf71e LayoutLib: Improve error reporting.
Change-Id: I37cad7e2efb959202960c57b271c55c759867139
2011-01-11 13:21:57 -08:00
Xavier Ducrohet
0de1607093 LayoutLib: fix XmlUtils.convertValueToInt
It looks like the device implementation of Integer.parseInt
is able to handle converting hexa value > 80000000 while the
desktop VM cannot.

This patch provide a fix for this.

While implementing it and running the TestDegates test I realized
that some delegate methods for Region were mising, so this adds them
too.

Change-Id: Ifee1efd47c8c52adc2f4658ec4fc8bd55adb84b4
2011-01-11 12:15:15 -08:00
Xavier Ducrohet
b6e53f4812 LayoutLib: add a few misc implementations.
Change-Id: I586f1d5ecc4f254fc04ea1171eb499d06ac592eb
2011-01-07 18:37:49 -08:00
Xavier Ducrohet
46a329244d LayoutLib: finish Typeface and unload them in dispose.
Change-Id: I3a48f84678f62d669d303fc73b041bb3fe5f333b
2011-01-07 18:16:43 -08:00
Xavier Ducrohet
10af738336 LayoutLib: Finish the matrix delegate.
Change-Id: Ife70a4707c113f4a2aed18e303cb2f221c73db2a
2011-01-06 19:20:03 -08:00
Xavier Ducrohet
a7cac5e054 LayoutLib: fix clipping issues.
There were two issues:
- Graphics2D.setClip only works on rectangular shapes.
  This means doing a setClip on a non rectangular shape should
  basically reset the clip and intersect with the new shape.

- the current clip can be null, so the combineShape method
  must handle it.

Change-Id: Id2cd7475e991d8b533ff2e8850cc2c27663f9e52
2011-01-06 18:13:49 -08:00
Xavier Ducrohet
c226e571fd LayoutLib: Misc javadoc fixes.
Change-Id: Iabe081c20b361b034c2e66b975b8756c0fdcd3d1
2011-01-03 03:28:20 -08:00
Xavier Ducrohet
b44b43b157 LayoutLib: Support Region through delegates.
also finish supporting some clip operation
on the canvas.

Change-Id: I743b9e52a7aa6e9340506f1c904cc1cfbf3ff81f
2010-12-24 00:21:51 -08:00
Xavier Ducrohet
d43909c750 LayoutLib: add support for unsupported drawing modifiers.
DrawFilter, Rasterizer, ColorFilter and MaskFilter
are not supported but we need to provide their
JNI counterparts anyway, to at least display warnings
when they are used.

Also improved the API to query Paint for Shaders
and PathEffects, and clean up some code by
moving asserts into the DelegateManager.

Change-Id: I8942514565d28576d5608c6373bda25d86d42ff2
2010-12-24 00:21:51 -08:00
Xavier Ducrohet
b1da1afa74 LayoutLib: improve bitmap support.
Change-Id: I703c2bdf51380b54fd5c20b08d3bc74833d9bc6e
2010-12-22 10:30:53 -08:00
Xavier Ducrohet
d38e776a3c LayoutLib: support for layers.
Layers require that drawing methods potentially
draw in more than one bitmaps.

To handle this this patch offers the following:
- move all drawing methods to use Drawable
- Drawables are now handled by GcSnapshot since
  its the one handling the layers
- moved Canvas_Delegate.createCustomGraphics to
  GcSnapshot which does not expose the Graphics2D
  objects anymore so its draw() methods are the only
  way to draw.
- handles creating layers in GcSnapshot.save() and
  blitting them in restore()

Other changes:
- Clean up the create/save API in GcSnapshot
- Fixed drawing bitmaps with alpha and other
  composite modes.

Change-Id: I1e230087493d044a10de71f4b6d29083e3f3bf64
2010-12-22 10:30:53 -08:00
Xavier Ducrohet
63fd87113c LayoutLib: Misc rendering fixes.
- always set up the stroke. Paint may not have the proper
  style when drawing lines. stroke should still be setup.

- Fixed vertical linear gradient. Old code generated
  a gradient ratio of NaN

- Fixed alpha rendering when using shaders. In that
  case the alpha channel from the paint color should be
  used in conjunction with the shader.

- Fixed miter limit. Java expects the value to be multiplied
  by the stroke width

- Fixed support for drawing ALPHA_8 bitmaps. Java2D doesn't
  have bitmaps with only alpha channels, so we keep using
  ARGB bitmaps but when drawing them into a bitmap we erase
  the color information.

Change-Id: I4f04341fc843e3f7dadd1fdbf709b11a4f1e24b9
2010-12-21 10:43:18 -08:00
Xavier Ducrohet
d348b6eaa9 LayoutLib: support for Path and BitmapShader using delegates.
Also created delegates for all missing shader, xfermode
and patheffect classes. Moved the logic of the xfermode,
and patheffects that was in Canvas_Delegate into the
xfermode/patheffect classes, and added support (in all
3 clases) for knowing if the shader/xfermode/patheffect
is actually supported or not. Make use of fidelityWarning
in LayoutLog if they are not.
2010-12-21 10:43:18 -08:00
Xavier Ducrohet
19a021038f LayoutLib: Update layoutlib with revised API.
Change-Id: I78929df621f48e85d9cbefe1f5590f9ce99bbaff
2010-12-21 10:43:17 -08:00
Xavier Ducrohet
cfdc784b6c LayoutLib: replace the stack of Graphics2D with custom snapshots.
The first step is to allow the canvas to save only the matrix or
the clip. Previously, since the graphics2D were created completely
new on each save, everything was saved.

Also allows to set transform/clip on the Canvas when no bitmap
has been set (and therefore no Graphics2D exists).

This is required by BitmapFactory.

Change-Id: I37eff6dde1ca708d58ba317b40e9b3236f3ef3d0
2010-12-15 13:44:03 -08:00
Patrick Dubroy
22ff4ef09f Fix build break due to additional arg in Bitmap ctor 2010-12-14 17:26:27 -08:00
Xavier Ducrohet
d9c64369cf LayoutLib: Fix gradient rendering.
- fully support canvas transform
- fully support shader local transform
- fix repeat/mirror issue in the negative values.

Change-Id: Ib2aa7ade1c2702da4364cbda9a5a3ae72c1d3174
2010-12-14 14:49:55 -08:00
Xavier Ducrohet
f1416e4dff LayoutLib: Misc fix to rendering.
Change-Id: Ia73fab1be3c01e6ce5791973e636e45a0f75ceb6
2010-12-14 12:00:14 -08:00
Xavier Ducrohet
90c6b7e639 LayoutLib: Use the new ninepatch API to suppor density.
LayoutLib now compiles against a prebuilt of ninepatch.

Change-Id: I0a1ca60af90933c171ab3aa456b47f0329df2f55
2010-12-13 19:08:38 -08:00
Xavier Ducrohet
8da36314fd LayoutLib: implement more of Canvas/Paint.
Change-Id: I8e2a7a3bddbce08db5eb641b5075bedd75f7be27
2010-12-13 16:42:01 -08:00
Xavier Ducrohet
ffb42f6c50 LayoutLib: Adapt to new LayoutLib
API now uses ResourceValue instead of IResourceValue
Capabilities renamed Capability

Change-Id: Ia5d2b6c8d536e020a1f5496fb2285f67fc4346c4
2010-12-10 11:40:27 -08:00
Xavier Ducrohet
8d74c978bb LayoutLib: explicitely override PropertyValuesHolder native code.
Change-Id: Ic7dd9efc990d01b20db144117cb11eb130349048
2010-12-07 12:10:51 -08:00
Xavier Ducrohet
864f33a9f8 Merge "LayoutLib: Update font object when text info changes in paint delegate" 2010-12-06 11:32:43 -08:00
Xavier Ducrohet
b5ddf041d6 LayoutLib: Update font object when text info changes in paint delegate
Change-Id: I6ff7e1ec4513918256aee99acc5ea298a5fdb8a8
2010-12-06 11:12:47 -08:00
Xavier Ducrohet
168677c9e2 LayoutLib: Fix logging.
- Use the new logging API
- remove log object reference everywhere but in Bridge
- all logging code accesses Bridge.getLog()
- prepareScene sets the current scene log object in Bridge.

Change-Id: Ib0517ccd6454c4baf218b6baa978a126f91671e7
2010-12-06 10:11:44 -08:00
Xavier Ducrohet
9eb6d412af LayoutLib: Reuse canvas when possible.
Also moved the prepare/cleanupThread methods to Bridge
as they are not really specific to the scene anymore.

Change-Id: I7b93821913ce4d2fcbe3d8be489be6533ff87e57
2010-12-02 10:58:19 -08:00
Xavier Ducrohet
2eea6fab1c Layoutlib: Animation support.
New locking mechanims to prevent concurrent renderings.

There's now a thread specific prepareThread() method (only
prepares the looper) and its associated cleanupThread().

For the rendering itself, acquire must be called before doing
any type of Android specific work on the scene (inflate or rendering)
After instantiation, init() must be called, which also acts as acquire.

Added a lot of checks to make sure method aren't called without
acquire or if scenes try to be rendered while acquire was called
from the same thread but on another scene.

Animation implementation:
- Handler delegate to use our own queue (since the animation runs
  through handler messages). This uses a callback to process
  the message. This callback is per-thread and only used in
  animation threads.
- SystemClock delegate to provide clock implementation.
- AnimationThread to handle playing the animation and calling back
  to the animation listener.

Change-Id: Ia39aba7ed476759df1da3200e413fe3e92590d15
2010-11-29 12:05:43 -08:00
Xavier Ducrohet
2d56b273ef Layoutlib: use default nine patch classes.
Move away from using our own implementation of NinePatchDrawable.
Now use native delegate for a few methods of NinePatch.

The byte[] used to describe the 9-patch chunk is entirely controlled
by the delegate. Therefore, while the default version (JNI) use the
array as a representation of a C struct, this version uses the array
as a serialized version of NinePatchChunk.

A cache mechanism using SoftReferences allows us to not deserialize
the array every time rendering needs to access the chunk itself.

The Bridge-level cache mechanism for bitmaps and nine-patches as
changed. Since the new nine-patches doesn't hold the bitmap
data anymore (it's stored in a normal Android bitmap which
is cached itself through the cache), then the nine-patch cache
has been changed to only contain the nine patch chunk.

Also initialize the canvas with the display metrics to prepare
for correct scaling when density of the assets don't match the target
density.

Still to come: actual density support in the 9-patch drawing code.

Change-Id: Ibefcccf4432e1986e8436e0c41a0107741593536
2010-11-23 11:54:25 -08:00
Xavier Ducrohet
9223b6737c Layoutlib: support for editing embedded layouts.
When Resources.getLayout(int) is called to return a parser
for an embedded layout, this queries the current parser for
a custom parser (Eclipse will provide one on top of the current
XML model being edited)

Change-Id: Ia9e837358f67daed0a835e1b3f4f50c0516ceee9
2010-11-19 16:17:27 -08:00
Xavier Ducrohet
d73868859b LayoutLib: fix some tests
Change-Id: Iacd641e2fac663ff12fe2a08ba093c4eaa2e8862
2010-11-19 12:53:20 -08:00
Xavier Ducrohet
5a09488a15 Layoutlib: Properly dispose of bitmap delegate.
This is done by initializing the android.util.Finalizers that's
reponsible for calling out to the native bitmap destructor.
Also implemented the native bitmap destructor

Also fix Bridge by removing obsolete API methods, and removing
some unneeded synchronized blocks now that the whole rendering
(and scene creation) is protected by a synchronized on the bridge
object anyway.

Change-Id: Ie1792da6db354836542dfc11f457fe4a6d78ddfb
2010-11-18 18:26:55 -08:00
Xavier Ducrohet
9e27936e4a Layoutlib: Fix alpha support in Canvas/Paint.
Change-Id: I359098cfc542a7a0b7d99478c0eb13587b4439d0
2010-11-12 14:20:45 -08:00
Xavier Ducrohet
071dee288c Misc fix in layoutlib bridge + View.isIneditMode as delegate.
Change-Id: Ideab29167e933203da99d4270cebcb777726201f
2010-11-11 17:39:50 -08:00
Xavier Ducrohet
c2e9651bf3 Layoutlib: New bridge implementation using the new API 5.
Since the new API prepare for stateful layoutlib, major
reorganization of the code.

New "android" sub-package for all extended android classes.
  Also moved BridgeInflater in here so that all extended classes
  are in this package. Only delegates and classes replacing
  renamed classes are in their original android.* packages.
  Also created full file for the empty implementations of
  IWindow and IWindowSession.
New "impl" for the dirty work implementation.
Main package contains the basic implementation of the API.

Most of the code that was in Bridge is now in .impl.LayoutSceneImpl,
with the main init/inflate/render code split into the contrustrutor,
inflate() and render().

Change-Id: Ie15b15e5a1b2388cd6ef82e518345b1fc02ec981
2010-11-11 10:08:19 -08:00
Xavier Ducrohet
7f77524395 Layoutlib: Load fragments
This change does the following:
- Make the bridge context extend Activity instead of Context
so that it can act as a view factory. This is needed because
the Activity is used as factory for Fragment objects.

- Override the default Fragment.instantiate(...) method
through a delegate. This is done to load the Fragment
classes located in the project (similar to custom views).

Change-Id: If62e7c9ff2b7585677077ad825aa1c3591d1b5e0
2010-11-08 18:38:12 -08:00
Xavier Ducrohet
e0c763f54f Layoutlib: more text drawing.
Change-Id: I32f46d23e746b095be0577a53b61567a868f0b8a
2010-11-08 16:13:28 -08:00
Xavier Ducrohet
9c05b39728 Layoutlib native delegate: FloatMath.
While the difference is pretty minor since it's a small class,
the point is that the unit test will ensure that we detect
new methods added to FloatMath more easily.

Change-Id: Ia8bfee231cc4ae0cfeb18692be86d02649c187d5
2010-11-03 19:15:07 -07:00
Xavier Ducrohet
4b606da91d Layoutlib native delegate: path effects and xfermode.
Change-Id: Iafaac6dbaf452e2dba3e77c801089dad33ac4ea9
2010-11-03 19:15:07 -07:00
Xavier Ducrohet
251d2e9924 Layoutlib native delegate: primitive shapes and shaders
Change-Id: Id2b0c6231589e82d8e96c9f019042eba348a6583
2010-11-03 13:23:22 -07:00
Xavier Ducrohet
abff653ce8 More layout Canvas/Paint implementation.
Change-Id: Ib3da4a4b2259dc7c53b24444b5c0b78cee15d387
2010-11-01 18:45:20 -07:00
Xavier Ducrohet
5802deabf0 More implementation of the layoutlib Paint/Canvas delegates.
Change-Id: I0c0029b9a679af4ae0178488f70b2a90292ea42d
2010-11-01 17:52:42 -07:00
Xavier Ducrohet
9f63ff263b Layoutlib Canvas and Paint implementation through native delegates
Also fix native delegate generation to put "this" parameter even
for methods that don't have any parameters.

Change-Id: I5dd0c505871370ff7b4cda16de84a5b3ae438f73
2010-11-01 13:31:47 -07:00
Xavier Ducrohet
5de11a18e9 Implement the layoutlib Bitmap through a native delegate.
This does not implement all the native methods of the
android.graphics.Bitmap class, only what's needed to draw an
ImageView object. The rest will be implemented after Canvas and
Paint have been moved to the native delegate.

Change-Id: Ia0c3b2cafa03871c298deaef5817a25ac1c35521
2010-10-29 16:01:40 -07:00
Xavier Ducrohet
5e7ed8da0d Move layoutlib typeface implementation to delegate.
Also move BridgeContentProvider to its own class to make it
less messy in BridgeContentResolver.

Change-Id: Id3462218b500d43d4c9b20b25326ad24e4106fa5
2010-10-27 18:12:27 -07:00
Xavier Ducrohet
4f291d33e1 Reimplement the native matrix method using the new delegate way.
Instead of renaming the old Matrix class into _Original_Matrix
and have layoutlib provide a full new implementation of Matrix,
we keep the old one by only modifying it to implement the native
methods which calls out to a new Matrix_Delegate class.

The goal is to not have to maintain the java portion in
sync between the framework and the layoutlib version.

Change-Id: I3e1aefffbae45e91b75331c0c6ff2260323deacd
2010-10-27 09:55:58 -07:00
Dianne Hackborn
625ac271f8 Work on fragments in layouts.
- Change semantics if IDs associated with these fragments, to
  work correctly when placed in a container.  If the container
  has an ID or you have supplied a tag, the fragment's ID is
  optional.

- To do this, there is a new LayoutInflater API that allows code
  creating views to access the parent container that view will
  be in.

- Fix issues with state management around these fragments.  Now
  correctly retains state when switching to a layout that doesn't
  include the fragment.

Also:

- Add new simple list layouts for items that want to show an
  activated state.
- Add new Activity.dump() that can be invoked with adb shell
  dumpsys; the default implementation dumps fragment state.

Change-Id: I192f35e3ea8c53fbd26cf909095f2a994abfc1b6
2010-09-21 22:08:50 -07:00