/** * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ package com.facebook.react.views.toolbar; import android.graphics.drawable.Drawable; import com.facebook.drawee.drawable.ForwardingDrawable; import com.facebook.imagepipeline.image.ImageInfo; import com.facebook.react.uimanager.PixelUtil; /** * Fresco currently sets drawables' intrinsic size to (-1, -1). This is to guarantee that scaling is * performed correctly. In the case of the Toolbar, we don't have access to the widget's internal * ImageView, which has width/height set to WRAP_CONTENT, which relies on intrinsic size. * * To work around this we have this class which just wraps another Drawable, but returns the correct * dimensions in getIntrinsicWidth/Height. This makes WRAP_CONTENT work in Toolbar's internals. * * This drawable uses the size of a loaded image to determine the intrinsic size. It therefore can't * be used safely until *after* an image has loaded, and must be replaced when the image is * replaced. */ public class DrawableWithIntrinsicSize extends ForwardingDrawable implements Drawable.Callback { private final ImageInfo mImageInfo; public DrawableWithIntrinsicSize(Drawable drawable, ImageInfo imageInfo) { super(drawable); mImageInfo = imageInfo; } @Override public int getIntrinsicWidth() { return mImageInfo.getWidth(); } @Override public int getIntrinsicHeight() { return mImageInfo.getHeight(); } }