/**
 * 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.flat;

import android.graphics.Canvas;
import android.text.Layout;

import com.facebook.fbui.widget.text.LayoutMeasureUtil;

/**
 * DrawTextLayout is a DrawCommand that draw {@link Layout}.
 */
/* package */ final class DrawTextLayout extends AbstractDrawCommand {

  private Layout mLayout;
  private float mLayoutWidth;
  private float mLayoutHeight;

  /* package */ DrawTextLayout(Layout layout) {
    setLayout(layout);
  }

  /**
   * Assigns a new {@link Layout} to draw.
   */
  public void setLayout(Layout layout) {
    mLayout = layout;
    mLayoutWidth = layout.getWidth();
    mLayoutHeight = LayoutMeasureUtil.getHeight(layout);
  }

  public Layout getLayout() {
    return mLayout;
  }

  public float getLayoutWidth() {
    // mLayout.getWidth() doesn't return correct width of the text Layout
    return mLayoutWidth;
  }

  public float getLayoutHeight() {
    return mLayoutHeight;
  }

  @Override
  protected void onDraw(Canvas canvas) {
    float left = getLeft();
    float top = getTop();

    canvas.translate(left, top);
    mLayout.draw(canvas);
    canvas.translate(-left, -top);
  }
}

/**
 * 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.flat;

import android.graphics.Canvas;
import android.text.Layout;

import com.facebook.fbui.textlayoutbuilder.util.LayoutMeasureUtil;

/**
 * DrawTextLayout is a DrawCommand that draw {@link Layout}.
 */
/* package */ final class DrawTextLayout extends AbstractDrawCommand {

  private Layout mLayout;
  private float mLayoutWidth;
  private float mLayoutHeight;

  /* package */ DrawTextLayout(Layout layout) {
    setLayout(layout);
  }

  /**
   * Assigns a new {@link Layout} to draw.
   */
  public void setLayout(Layout layout) {
    mLayout = layout;
    mLayoutWidth = layout.getWidth();
    mLayoutHeight = LayoutMeasureUtil.getHeight(layout);
  }

  public Layout getLayout() {
    return mLayout;
  }

  public float getLayoutWidth() {
    // mLayout.getWidth() doesn't return correct width of the text Layout
    return mLayoutWidth;
  }

  public float getLayoutHeight() {
    return mLayoutHeight;
  }

  @Override
  protected void onDraw(Canvas canvas) {
    float left = getLeft();
    float top = getTop();

    canvas.translate(left, top);
    mLayout.draw(canvas);
    canvas.translate(-left, -top);
  }
}

Make Nodes use TextLayoutBuilder's LayoutMeasureUtil