package com.android.layoutlib.bridge.android;
-import com.android.ide.common.rendering.api.SessionParams.Key;
+import com.android.ide.common.rendering.api.SessionParams;
/**
- * This contains all known keys for the {@link RenderParams#getFlag(Key)}.
+ * This contains all known keys for the {@link SessionParams#getFlag(SessionParams.Key)}.
* <p/>
* The IDE has its own copy of this class which may be newer or older than this one.
* <p/>
* Constants should never be modified or removed from this class.
*/
-public final class RenderParamsFlags {
+public final class SessionParamsFlags {
- public static final Key<String> FLAG_KEY_ROOT_TAG =
- new Key<String>("rootTag", String.class);
- public static final Key<Boolean> FLAG_KEY_DISABLE_BITMAP_CACHING =
- new Key<Boolean>("disableBitmapCaching", Boolean.class);
- public static final Key<Boolean> FLAG_KEY_RENDER_ALL_DRAWABLE_STATES =
- new Key<Boolean>("renderAllDrawableStates", Boolean.class);
+ public static final SessionParams.Key<String> FLAG_KEY_ROOT_TAG =
+ new SessionParams.Key<String>("rootTag", String.class);
+ public static final SessionParams.Key<Boolean> FLAG_KEY_DISABLE_BITMAP_CACHING =
+ new SessionParams.Key<Boolean>("disableBitmapCaching", Boolean.class);
// Disallow instances.
- private RenderParamsFlags() {}
+ private SessionParamsFlags() {}
}
package com.android.layoutlib.bridge.impl;
+import static com.android.ide.common.rendering.api.Result.Status.ERROR_UNKNOWN;
+
import com.android.ide.common.rendering.api.DrawableParams;
import com.android.ide.common.rendering.api.HardwareConfig;
import com.android.ide.common.rendering.api.ResourceValue;
import com.android.ide.common.rendering.api.Result;
import com.android.ide.common.rendering.api.Result.Status;
import com.android.layoutlib.bridge.android.BridgeContext;
-import com.android.layoutlib.bridge.android.RenderParamsFlags;
import com.android.resources.ResourceType;
import android.graphics.Bitmap;
import android.graphics.Bitmap_Delegate;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
-import android.graphics.drawable.StateListDrawable;
import android.view.AttachInfo_Accessor;
import android.view.View.MeasureSpec;
import android.widget.FrameLayout;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
+import java.io.IOException;
/**
* Action to render a given Drawable provided through {@link DrawableParams#getDrawable()}.
return Status.ERROR_NOT_A_DRAWABLE.createResult();
}
- Drawable d = ResourceHelper.getDrawable(drawableResource, context);
-
- final Boolean allStates =
- params.getFlag(RenderParamsFlags.FLAG_KEY_RENDER_ALL_DRAWABLE_STATES);
- if (allStates == Boolean.TRUE) {
- final List<BufferedImage> result;
-
- if (d instanceof StateListDrawable) {
- result = new ArrayList<BufferedImage>();
- final StateListDrawable stateList = (StateListDrawable) d;
- for (int i = 0; i < stateList.getStateCount(); i++) {
- final Drawable stateDrawable = stateList.getStateDrawable(i);
- result.add(renderImage(hardwareConfig, stateDrawable, context));
- }
- } else {
- result = Collections.singletonList(renderImage(hardwareConfig, d, context));
- }
-
- return Status.SUCCESS.createResult(result);
- } else {
- BufferedImage image = renderImage(hardwareConfig, d, context);
- return Status.SUCCESS.createResult(image);
- }
- }
-
- private BufferedImage renderImage(HardwareConfig hardwareConfig, Drawable d,
- BridgeContext context) {
// create a simple FrameLayout
FrameLayout content = new FrameLayout(context);
// get the actual Drawable object to draw
+ Drawable d = ResourceHelper.getDrawable(drawableResource, context);
content.setBackground(d);
// set the AttachInfo on the root view.
// measure
- int w = d.getIntrinsicWidth();
- int h = d.getIntrinsicHeight();
-
- final int screenWidth = hardwareConfig.getScreenWidth();
- final int screenHeight = hardwareConfig.getScreenHeight();
-
- if (w == -1 || h == -1) {
- // Use screen size when either intrinsic width or height isn't available
- w = screenWidth;
- h = screenHeight;
- } else if (w > screenWidth || h > screenHeight) {
- // If image wouldn't fit to the screen, resize it to avoid cropping.
-
- // We need to find scale such that scale * w <= screenWidth, scale * h <= screenHeight
- double scale = Math.min((double) screenWidth / w, (double) screenHeight / h);
-
- // scale * w / scale * h = w / h, so, proportions are preserved.
- w = (int) Math.floor(scale * w);
- h = (int) Math.floor(scale * h);
- }
-
+ int w = hardwareConfig.getScreenWidth();
+ int h = hardwareConfig.getScreenHeight();
int w_spec = MeasureSpec.makeMeasureSpec(w, MeasureSpec.EXACTLY);
int h_spec = MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY);
content.measure(w_spec, h_spec);
// and draw
content.draw(canvas);
- return image;
+
+ return Status.SUCCESS.createResult(image);
}
protected BufferedImage getImage(int w, int h) {
import com.android.layoutlib.bridge.android.BridgeContext;
import com.android.layoutlib.bridge.android.BridgeLayoutParamsMapAttributes;
import com.android.layoutlib.bridge.android.BridgeXmlBlockParser;
-import com.android.layoutlib.bridge.android.RenderParamsFlags;
+import com.android.layoutlib.bridge.android.SessionParamsFlags;
import com.android.layoutlib.bridge.bars.BridgeActionBar;
import com.android.layoutlib.bridge.bars.AppCompatActionBar;
import com.android.layoutlib.bridge.bars.Config;
// it can instantiate the custom Fragment.
Fragment_Delegate.setProjectCallback(params.getProjectCallback());
- String rootTag = params.getFlag(RenderParamsFlags.FLAG_KEY_ROOT_TAG);
+ String rootTag = params.getFlag(SessionParamsFlags.FLAG_KEY_ROOT_TAG);
boolean isPreference = "PreferenceScreen".equals(rootTag);
View view;
if (isPreference) {
// This is useful when mImage is just a wrapper of Graphics2D so
// it doesn't get cached.
boolean disableBitmapCaching = Boolean.TRUE.equals(params.getFlag(
- RenderParamsFlags.FLAG_KEY_DISABLE_BITMAP_CACHING));
+ SessionParamsFlags.FLAG_KEY_DISABLE_BITMAP_CACHING));
if (newRenderSize || mCanvas == null || disableBitmapCaching) {
if (params.getImageFactory() != null) {
mImage = params.getImageFactory().getImage(