Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit da18d159 authored by Seigo Nonaka's avatar Seigo Nonaka
Browse files

Add vertical layout flag to Paint class

Bug: 355296926
Test: minikin_tests
Flag: com.android.text.flags.vertical_text_layout
Change-Id: I3b5fd6d55c65bcb6491060cdc621488d69235e57
parent 4e83698c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -16830,6 +16830,7 @@ package android.graphics {
    field @FlaggedApi("com.android.text.flags.letter_spacing_justification") public static final int TEXT_RUN_FLAG_LEFT_EDGE = 8192; // 0x2000
    field @FlaggedApi("com.android.text.flags.letter_spacing_justification") public static final int TEXT_RUN_FLAG_RIGHT_EDGE = 16384; // 0x4000
    field public static final int UNDERLINE_TEXT_FLAG = 8; // 0x8
    field @FlaggedApi("com.android.text.flags.vertical_text_layout") public static final int VERTICAL_TEXT_FLAG = 4096; // 0x1000
  }
  public enum Paint.Align {
+7 −0
Original line number Diff line number Diff line
@@ -202,3 +202,10 @@ flag {
  description: "Deprecate the Paint#elegantTextHeight API and stick it to true"
  bug: "349519475"
}

flag {
  name: "vertical_text_layout"
  namespace: "text"
  description: "Make Paint class work for vertical layout text."
  bug: "355296926"
}
+20 −2
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ package android.graphics;
import static com.android.text.flags.Flags.FLAG_FIX_LINE_HEIGHT_FOR_LOCALE;
import static com.android.text.flags.Flags.FLAG_LETTER_SPACING_JUSTIFICATION;
import static com.android.text.flags.Flags.FLAG_DEPRECATE_ELEGANT_TEXT_HEIGHT_API;

import static com.android.text.flags.Flags.FLAG_VERTICAL_TEXT_LAYOUT;

import android.annotation.ColorInt;
import android.annotation.ColorLong;
@@ -35,6 +35,7 @@ import android.compat.annotation.ChangeId;
import android.compat.annotation.EnabledSince;
import android.compat.annotation.UnsupportedAppUsage;
import android.graphics.fonts.FontVariationAxis;
import android.graphics.text.TextRunShaper;
import android.os.Build;
import android.os.LocaleList;
import android.text.GraphicsOperations;
@@ -269,7 +270,24 @@ public class Paint {
    public static final int EMBEDDED_BITMAP_TEXT_FLAG = 0x400;
    /** @hide bit mask for the flag forcing freetype's autohinter on for text */
    public static final int AUTO_HINTING_TEXT_FLAG = 0x800;
    /** @hide bit mask for the flag enabling vertical rendering for text */

    /**
     * A flat that controls text to be written in vertical orientation
     *
     * <p>
     * This flag is used for telling the underlying text layout engine that the text is for vertical
     * direction. By enabling this flag, text measurement, drawing and shaping APIs works for
     * vertical text layout. For example, {@link Canvas#drawText(String, float, float, Paint)} draws
     * text from top to bottom. {@link Paint#measureText(String)} returns vertical advances instead
     * of horizontal advances. {@link TextRunShaper} shapes text vertically and report glyph IDs for
     * vertical layout.
     *
     * <p>
     * Do not set this flag for making {@link android.text.Layout}. The {@link android.text.Layout}
     * class and its subclasses are designed for horizontal text only and does not work for vertical
     * text.
     */
    @FlaggedApi(FLAG_VERTICAL_TEXT_LAYOUT)
    public static final int VERTICAL_TEXT_FLAG = 0x1000;

    /**
+1 −0
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ minikin::MinikinPaint MinikinUtils::prepareMinikinPaint(const Paint* paint,
    minikinPaint.fontStyle = resolvedFace->fStyle;
    minikinPaint.fontFeatureSettings = paint->getFontFeatureSettings();
    minikinPaint.fontVariationSettings = paint->getFontVariationOverride();
    minikinPaint.verticalText = paint->isVerticalText();

    const std::optional<minikin::FamilyVariant>& familyVariant = paint->getFamilyVariant();
    if (familyVariant.has_value()) {
+2 −0
Original line number Diff line number Diff line
@@ -158,6 +158,7 @@ public:
    SkSamplingOptions sampling() const {
        return SkSamplingOptions(this->filterMode());
    }
    bool isVerticalText() const { return mVerticalText; }

    void setVariationOverride(minikin::VariationSettings&& varSettings) {
        mFontVariationOverride = std::move(varSettings);
@@ -202,6 +203,7 @@ private:
    bool mUnderline = false;
    bool mDevKern = false;
    minikin::RunFlag mRunFlag = minikin::RunFlag::NONE;
    bool mVerticalText = false;
};

}  // namespace android
Loading