chromium/ui/android/java/src/org/chromium/ui/resources/LayoutResource.java

// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.ui.resources;

import android.graphics.Rect;
import android.graphics.RectF;

import org.chromium.ui.resources.statics.NinePatchData;

/** A resource that provides sizing information for layouts. */
public class LayoutResource {
    private final RectF mPadding;
    private final RectF mBitmapSize;
    private final RectF mAperture;

    public LayoutResource(float pxToDp, Resource resource) {
        Rect padding = new Rect();
        Rect aperture = new Rect();
        NinePatchData ninePatchData = resource.getNinePatchData();
        if (ninePatchData != null) {
            padding = ninePatchData.getPadding();
            aperture = ninePatchData.getAperture();
        }
        Rect bitmapSize = resource.getBitmapSize();

        mPadding =
                new RectF(
                        padding.left * pxToDp,
                        padding.top * pxToDp,
                        padding.right * pxToDp,
                        padding.bottom * pxToDp);

        mBitmapSize =
                new RectF(
                        bitmapSize.left * pxToDp,
                        bitmapSize.top * pxToDp,
                        bitmapSize.right * pxToDp,
                        bitmapSize.bottom * pxToDp);

        mAperture =
                new RectF(
                        aperture.left * pxToDp,
                        aperture.top * pxToDp,
                        aperture.right * pxToDp,
                        aperture.bottom * pxToDp);
    }

    /**
     * @return The padded content area of this resource in dp.  For 9-patches this will represent
     *         the valid content of the 9-patch. In all other cases, it will be an empty rect.
     */
    public RectF getPadding() {
        return mPadding;
    }

    /**
     * @return The size of the bitmap in dp;
     */
    public RectF getBitmapSize() {
        return mBitmapSize;
    }

    /**
     * @return The aperture of this resource in dp.  For 9-patches this will represent the area of
     *         the {@link Bitmap} that should not be stretched. In all other cases, it will be an
     *         empty rect.
     */
    public RectF getAperture() {
        return mAperture;
    }
}