Add headingTypeface to SpannableTheme, use a custom heading typeface in the sample app
This commit is contained in:
		
							parent
							
								
									5ef985670a
								
							
						
					
					
						commit
						a071646fee
					
				@ -173,6 +173,9 @@ public class SpannableTheme {
 | 
			
		||||
    // by default, text color with `HEADING_DEF_BREAK_COLOR_ALPHA` applied alpha
 | 
			
		||||
    protected final int headingBreakColor;
 | 
			
		||||
 | 
			
		||||
    // by default, whatever typeface is set on the TextView
 | 
			
		||||
    protected final Typeface headingTypeface;
 | 
			
		||||
 | 
			
		||||
    // by default `SCRIPT_DEF_TEXT_SIZE_RATIO`
 | 
			
		||||
    protected final float scriptTextSizeRatio;
 | 
			
		||||
 | 
			
		||||
@ -214,6 +217,7 @@ public class SpannableTheme {
 | 
			
		||||
        this.codeTextSize = builder.codeTextSize;
 | 
			
		||||
        this.headingBreakHeight = builder.headingBreakHeight;
 | 
			
		||||
        this.headingBreakColor = builder.headingBreakColor;
 | 
			
		||||
        this.headingTypeface = builder.headingTypeface;
 | 
			
		||||
        this.scriptTextSizeRatio = builder.scriptTextSizeRatio;
 | 
			
		||||
        this.thematicBreakColor = builder.thematicBreakColor;
 | 
			
		||||
        this.thematicBreakHeight = builder.thematicBreakHeight;
 | 
			
		||||
@ -368,7 +372,11 @@ public class SpannableTheme {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void applyHeadingTextStyle(@NonNull Paint paint, @IntRange(from = 1, to = 6) int level) {
 | 
			
		||||
        if (headingTypeface == null) {
 | 
			
		||||
            paint.setFakeBoldText(true);
 | 
			
		||||
        } else {
 | 
			
		||||
            paint.setTypeface(headingTypeface);
 | 
			
		||||
        }
 | 
			
		||||
        paint.setTextSize(paint.getTextSize() * HEADING_SIZES[level - 1]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -491,6 +499,7 @@ public class SpannableTheme {
 | 
			
		||||
        private int codeTextSize;
 | 
			
		||||
        private int headingBreakHeight = -1;
 | 
			
		||||
        private int headingBreakColor;
 | 
			
		||||
        private Typeface headingTypeface;
 | 
			
		||||
        private float scriptTextSizeRatio;
 | 
			
		||||
        private int thematicBreakColor;
 | 
			
		||||
        private int thematicBreakHeight = -1;
 | 
			
		||||
@ -520,6 +529,7 @@ public class SpannableTheme {
 | 
			
		||||
            this.codeTextSize = theme.codeTextSize;
 | 
			
		||||
            this.headingBreakHeight = theme.headingBreakHeight;
 | 
			
		||||
            this.headingBreakColor = theme.headingBreakColor;
 | 
			
		||||
            this.headingTypeface = theme.headingTypeface;
 | 
			
		||||
            this.scriptTextSizeRatio = theme.scriptTextSizeRatio;
 | 
			
		||||
            this.thematicBreakColor = theme.thematicBreakColor;
 | 
			
		||||
            this.thematicBreakHeight = theme.thematicBreakHeight;
 | 
			
		||||
@ -634,6 +644,12 @@ public class SpannableTheme {
 | 
			
		||||
            return this;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        @NonNull
 | 
			
		||||
        public Builder headingTypeface(Typeface headingTypeface) {
 | 
			
		||||
            this.headingTypeface = headingTypeface;
 | 
			
		||||
            return this;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        @NonNull
 | 
			
		||||
        public Builder scriptTextSizeRatio(@FloatRange(from = .0F, to = Float.MAX_VALUE) float scriptTextSizeRatio) {
 | 
			
		||||
            this.scriptTextSizeRatio = scriptTextSizeRatio;
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,7 @@
 | 
			
		||||
package ru.noties.markwon.sample.extension;
 | 
			
		||||
 | 
			
		||||
import android.app.Activity;
 | 
			
		||||
import android.graphics.Typeface;
 | 
			
		||||
import android.os.Bundle;
 | 
			
		||||
import android.widget.TextView;
 | 
			
		||||
 | 
			
		||||
@ -13,6 +14,7 @@ import java.util.Arrays;
 | 
			
		||||
 | 
			
		||||
import ru.noties.markwon.SpannableBuilder;
 | 
			
		||||
import ru.noties.markwon.SpannableConfiguration;
 | 
			
		||||
import ru.noties.markwon.spans.SpannableTheme;
 | 
			
		||||
import ru.noties.markwon.tasklist.TaskListExtension;
 | 
			
		||||
 | 
			
		||||
public class MainActivity extends Activity {
 | 
			
		||||
@ -51,8 +53,13 @@ public class MainActivity extends Activity {
 | 
			
		||||
        final IconSpanProvider spanProvider = IconSpanProvider.create(this, 0);
 | 
			
		||||
 | 
			
		||||
        // create an instance of visitor to process parsed markdown
 | 
			
		||||
        SpannableConfiguration configuration = SpannableConfiguration.builder(this)
 | 
			
		||||
                .theme(SpannableTheme.builder()
 | 
			
		||||
                        .headingTypeface(Typeface.MONOSPACE)
 | 
			
		||||
                        .build())
 | 
			
		||||
                .build();
 | 
			
		||||
        final IconVisitor visitor = new IconVisitor(
 | 
			
		||||
                SpannableConfiguration.create(this),
 | 
			
		||||
                configuration,
 | 
			
		||||
                builder,
 | 
			
		||||
                spanProvider
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
@ -11,6 +11,7 @@
 | 
			
		||||
        android:layout_height="wrap_content"
 | 
			
		||||
        android:padding="8dip"
 | 
			
		||||
        android:textAppearance="?android:attr/textAppearanceMedium"
 | 
			
		||||
        android:textSize="15sp"
 | 
			
		||||
        tools:text="@string/input"/>
 | 
			
		||||
 | 
			
		||||
</ScrollView>
 | 
			
		||||
@ -6,6 +6,7 @@
 | 
			
		||||
        # Hello! @ic-android-black-24\n\n
 | 
			
		||||
        Home 36 black: @ic-home-black-36\n\n
 | 
			
		||||
        Memory 48 black: @ic-memory-black-48\n\n
 | 
			
		||||
        ### I AM ANOTHER HEADER\n\n
 | 
			
		||||
        Sentiment Satisfied 64 red: @ic-sentiment_satisfied-red-64
 | 
			
		||||
    ]]>
 | 
			
		||||
    </string>
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user