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