Commit Graph

55 Commits

Author SHA1 Message Date
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
Romain Guy
1639351139 Make libhwui entirely optional.
The makefile variable USE_OPENGL_RENDERER must be set to true to compile
libhwui and the related code in the JNI layer.

This change also removes obsolete APIs from Canvas that must not be used
and would be confusing if left in. These APIs were remnants of our first
attempt at an OpenGL renderer for the view hierarchy and had not been
taken out before Android 1.0 was released.

Change-Id: I2475ff1307212bab26c926724f3c508681c7dae1
2010-08-08 17:45:07 -07:00
Xavier Ducrohet
b8bb8ac5bb Fix the layoutlib Paint.set(Paint) method.
It would change the text rendering info but not recompute
the Java Font objects. The effect is a broken font rendering
in the EditText (which use this method to copy some Paint
object before using the copy for the actual drawing)

Change-Id: I6d8d1bf86f0d77d088f60ad81c71dd3ebab727b0
2010-07-16 16:46:39 -07:00
Xavier Ducrohet
c56653bff1 Adds back the finalize method on the replaced Paint class.
without it com.android.layoutlib.bridge.TestClassReplacement fails.

Change-Id: Iafb6548f45c31e901591a45239224895c4403be8
2010-04-08 17:18:35 -07:00
Carl Shapiro
05c376b00b Remove empty finalize methods. 2010-02-24 18:43:36 -08:00
Xavier Ducrohet
3330927bdd ADT/Layoutlib: implement sweep gradient.
Change-Id: I2d460decff82f5f64b0a5cfeaa68156aad4fb3e6
2010-01-19 18:51:06 -08:00
Xavier Ducrohet
45a7c28598 ADT/Layoutlib: implement radial gradient.
Also refactored some parts of LinearGradient to reuse them
in the radial gradient

Change-Id: I2ec69bd60190bd014217d989177dcc7269188dea
2010-01-19 14:03:31 -08:00
Xavier Ducrohet
36ab1284d8 ADT/Layoutlib: Add dash support to stroke.
Change-Id: I09a7e84948be013cbb11f6d9774ab81df897b424
2010-01-15 11:24:44 -08:00
Xavier Ducrohet
5ac8f409f5 ADT/Layoutlib: properly handle stroke information.
Change-Id: Iec9284d0e65d1313739e361d1fd5a522646fd1fd
2010-01-14 19:43:54 -08:00
Xavier Ducrohet
79f05bb4a5 Merge "ADT/Layoutlib: improved gradient drawing for perf." into eclair 2010-01-14 19:10:44 -08:00
Xavier Ducrohet
e8f4d7deab ADT/Layoutlib: improved gradient drawing for perf.
Change-Id: I79b909d7787e4442e7cfdf196de1ac0c077da7f8
2010-01-14 18:45:04 -08:00
Xavier Ducrohet
89d538dcca ADT/Layoutlib: don't draw 0-sized rectangle, AWT doesn't like that.
Change-Id: I298d00208ace2421478c5864cc5a66a508b2b411
2010-01-14 18:38:06 -08:00
Xavier Ducrohet
2dbb923aa0 ADT/Layoutlib: always use custom gradient (java) Paint.
The normal linear paint from AWT does not support our TileModes.

Change-Id: I24667671dabdf1a5dffa342e4de9cc69487db0b6
2010-01-14 17:17:25 -08:00
Xavier Ducrohet
374abf0b95 ADT/Layout: support for 3+ color in linear gradients
Change-Id: I14c6a5a1de41470c6f1c66d490492ecc727302f2
2010-01-14 15:15:35 -08:00
Xavier Ducrohet
5e08302426 ADT/Layoutlib: shader clean-up.
Change-Id: I0a200f438b7ccde2bfc19fd23614a647cb19d312
2010-01-14 10:37:13 -08:00
Xavier Ducrohet
63b2e61627 ADT/Layoutlib: 2 color, linear gradient support.
Change-Id: Ifaafa4fc42a22f4851449a7c35a5b82e211aafe7
2010-01-13 20:30:26 -08:00
Xavier Ducrohet
608cd11cdc ADT/Layoutlib: implement Canvas.concat(Matrix)
This prevented ImageView from making proper use of ScaleType.

Also fixed Canvas.getSaveCount() that returned the wrong
value and Matrix.getTransform() which used the wrong order
for the AffineTransform constructor!!

Bug: 2364564

Change-Id: I78babf4aa6689440e52ad06b1473f75b20eb66da
2010-01-13 18:17:59 -08:00
Xavier Ducrohet
ae4bd059ca ADT/Layoutlib: Reimplement parts of BitmapFactory
The original bitmap factory is mostly done in native and deals
with the normal android Bitmap class which has been replaced
in the layoutlib by a bitmap that is merely a wrapper around
an AWT BufferedImage.

This new BitmapFactory creates the layoutlib version of
Bitmap all in Java.

Change-Id: Ice8b5d19141a9a43f83349c159201bf85604b3b0
2010-01-13 16:43:07 -08:00
Xavier Ducrohet
76410f1eb3 Properly implement Paint.breakText for layoutlib.
BUG 2260400

Change-Id: I7082e366b65da0b5de2a6dbb547f66e05e0b78e0
2009-11-13 14:10:20 -08:00
Xavier Ducrohet
9a4593ffcc Support for fallback fonts in layoutlib.
BUG 2041229

Change-Id: Ib12bcb7f6d8f0e4c2b51871f8129ecf51fa938ee
2009-11-09 14:55:08 -08:00
Xavier Ducrohet
9f751ab3fc Reimplement all the method of Paint for layoutlib
There were a few missing methods that should have been reimplmented
(because they were native).

Others have been added just to be sure so that we can test whether methods
are missing or not (test coming soon).

Change-Id: I24895c353e38545e9b1abe28d41224fdc78cadb1
2009-10-05 19:10:04 -07:00
Dianne Hackborn
de0dfb7b65 Fix issue #2125720 Weather Forecast Widget - graphics do not scale
I forgot to add the new density field to the Bitmaps' parcelable data.

Change-Id: I77cf3e93e356297e0caed6fc71b62b5cd8f79124
2009-09-23 14:26:02 -07:00
Xavier Ducrohet
f7064e18fb am ace6a5cf: Merge change 21408 into donut
Merge commit 'ace6a5cfc0d14a909b4b95bdfe16609188125baf' into eclair

* commit 'ace6a5cfc0d14a909b4b95bdfe16609188125baf':
  Improved drawing/matrix support in layoutlib
2009-08-18 11:01:19 -07:00
Xavier Ducrohet
2473ef5654 Improved drawing/matrix support in layoutlib
- Make the custom Canvas actually replace the original one so that it's used
  even by parts of the framework that allocate their own temp Canvas object.
- Better support for Matrix: added support for mapPoint() and mapRect(), and invert()
- Implemented drawBitmap() with a Matrix, and made the paint object not NPE when null.
2009-08-17 14:17:05 -07:00
Xavier Ducrohet
1d47a51426 am 94ff3f1f: Merge change 21063 into donut
Merge commit '94ff3f1f08805b68c5524b39024968aebcdc83ee' into eclair

* commit '94ff3f1f08805b68c5524b39024968aebcdc83ee':
  Fix handling of reference XML file in layout files
2009-08-13 18:43:54 -07:00
Xavier Ducrohet
314e0226a2 am e1b63d22: Merge change 21033 into donut
Merge commit 'e1b63d224a0a68191f087186c470cde317e3fa76' into eclair

* commit 'e1b63d224a0a68191f087186c470cde317e3fa76':
  Mock ServiceManager and AccesibilityManager to make the view renders in ADT
2009-08-13 18:43:46 -07:00
Xavier Ducrohet
08e2a4b56f Fix handling of reference XML file in layout files
This allows layout that references animation to properly load
in the layout editor in ADT
2009-08-13 11:23:40 -07:00
Andrei Popescu
385df699a6 remove Gears 2009-08-13 13:07:48 +01:00
Xavier Ducrohet
7953e7d89b Mock ServiceManager and AccesibilityManager to make the view renders in ADT
BUG: 2049348
2009-08-12 17:20:18 -07:00
Xavier Ducrohet
1741ec39a9 Fix external bug 2875: Matrix#mValues[7] assigned twice in place of mValues[8] 2009-06-05 12:58:29 -07:00