From 213f5cf281b642a0de5024ea6abdb8d2dbc53aed Mon Sep 17 00:00:00 2001 From: Dimitry Ivanov Date: Sat, 22 Jun 2019 12:09:53 +0300 Subject: [PATCH] ImageSizeResolver change (accept async-drawable) --- _CHANGES.md | 4 +- .../noties/markwon/image/AsyncDrawable.java | 15 +++---- .../markwon/image/ImageSizeResolver.java | 16 +------ .../markwon/image/ImageSizeResolverDef.java | 11 ++++- .../markwon/ext/latex/JLatexMathPlugin.java | 44 ++++++++++++++----- 5 files changed, 54 insertions(+), 36 deletions(-) diff --git a/_CHANGES.md b/_CHANGES.md index e20c7985..5d98cd37 100644 --- a/_CHANGES.md +++ b/_CHANGES.md @@ -10,4 +10,6 @@ * removed MarkwonPlugin#configureHtmlRenderer -> now part of HtmlPlugin * TagHandler now has `supportedTags()` method * html is moved completely to html-plugin -* OnTextAddedListener \ No newline at end of file +* OnTextAddedListener +* ImageSizeResolver signature change (accept AsyncDrawable) +* JLatexMathPlugin builder has vertical & horizontal padding \ No newline at end of file diff --git a/markwon-core/src/main/java/io/noties/markwon/image/AsyncDrawable.java b/markwon-core/src/main/java/io/noties/markwon/image/AsyncDrawable.java index dfbf8d19..7eb4b38d 100644 --- a/markwon-core/src/main/java/io/noties/markwon/image/AsyncDrawable.java +++ b/markwon-core/src/main/java/io/noties/markwon/image/AsyncDrawable.java @@ -53,7 +53,7 @@ public class AsyncDrawable extends Drawable { } /** - * @since 3.1.0-SNAPSHOT + * @since 4.0.0-SNAPSHOT */ @Nullable public ImageSize getImageSize() { @@ -61,7 +61,7 @@ public class AsyncDrawable extends Drawable { } /** - * @since 3.1.0-SNAPSHOT + * @since 4.0.0-SNAPSHOT */ @NonNull public ImageSizeResolver getImageSizeResolver() { @@ -69,7 +69,7 @@ public class AsyncDrawable extends Drawable { } /** - * @since 3.1.0-SNAPSHOT + * @since 4.0.0-SNAPSHOT */ public boolean hasKnownDimentions() { return canvasWidth > 0; @@ -77,7 +77,7 @@ public class AsyncDrawable extends Drawable { /** * @see #hasKnownDimentions() - * @since 3.1.0-SNAPSHOT + * @since 4.0.0-SNAPSHOT */ public int getLastKnownCanvasWidth() { return canvasWidth; @@ -85,7 +85,7 @@ public class AsyncDrawable extends Drawable { /** * @see #hasKnownDimentions() - * @since 3.1.0-SNAPSHOT + * @since 4.0.0-SNAPSHOT */ public float getLastKnowTextSize() { return textSize; @@ -285,13 +285,10 @@ public class AsyncDrawable extends Drawable { */ @NonNull private Rect resolveBounds() { - // @since 2.0.0 previously we were checking if image is greater than canvas width here // but as imageSizeResolver won't be null anymore, we should transfer this logic // there - return imageSizeResolver != null - ? imageSizeResolver.resolveImageSize(imageSize, result.getBounds(), canvasWidth, textSize) - : result.getBounds(); + return imageSizeResolver.resolveImageSize(this); } @Override diff --git a/markwon-core/src/main/java/io/noties/markwon/image/ImageSizeResolver.java b/markwon-core/src/main/java/io/noties/markwon/image/ImageSizeResolver.java index 8542cac5..456afae0 100644 --- a/markwon-core/src/main/java/io/noties/markwon/image/ImageSizeResolver.java +++ b/markwon-core/src/main/java/io/noties/markwon/image/ImageSizeResolver.java @@ -3,7 +3,6 @@ package io.noties.markwon.image; import android.graphics.Rect; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; /** * @since 1.0.1 @@ -12,19 +11,8 @@ import androidx.annotation.Nullable; public abstract class ImageSizeResolver { /** - * We do not expose canvas height deliberately. As we cannot rely on this value very much - * - * @param imageSize {@link ImageSize} parsed from HTML - * @param imageBounds original image bounds - * @param canvasWidth width of the canvas - * @param textSize current font size - * @return resolved image bounds + * @since 4.0.0-SNAPSHOT */ @NonNull - public abstract Rect resolveImageSize( - @Nullable ImageSize imageSize, - @NonNull Rect imageBounds, - int canvasWidth, - float textSize - ); + public abstract Rect resolveImageSize(@NonNull AsyncDrawable drawable); } diff --git a/markwon-core/src/main/java/io/noties/markwon/image/ImageSizeResolverDef.java b/markwon-core/src/main/java/io/noties/markwon/image/ImageSizeResolverDef.java index 1135d271..52d6abac 100644 --- a/markwon-core/src/main/java/io/noties/markwon/image/ImageSizeResolverDef.java +++ b/markwon-core/src/main/java/io/noties/markwon/image/ImageSizeResolverDef.java @@ -17,7 +17,16 @@ public class ImageSizeResolverDef extends ImageSizeResolver { @NonNull @Override - public Rect resolveImageSize( + public Rect resolveImageSize(@NonNull AsyncDrawable drawable) { + return resolveImageSize( + drawable.getImageSize(), + drawable.getResult().getBounds(), + drawable.getLastKnownCanvasWidth(), + drawable.getLastKnowTextSize()); + } + + @NonNull + protected Rect resolveImageSize( @Nullable ImageSize imageSize, @NonNull Rect imageBounds, int canvasWidth, diff --git a/markwon-ext-latex/src/main/java/io/noties/markwon/ext/latex/JLatexMathPlugin.java b/markwon-ext-latex/src/main/java/io/noties/markwon/ext/latex/JLatexMathPlugin.java index 9533f304..8b7bce3e 100644 --- a/markwon-ext-latex/src/main/java/io/noties/markwon/ext/latex/JLatexMathPlugin.java +++ b/markwon-ext-latex/src/main/java/io/noties/markwon/ext/latex/JLatexMathPlugin.java @@ -27,7 +27,6 @@ import io.noties.markwon.image.AsyncDrawable; import io.noties.markwon.image.AsyncDrawableLoader; import io.noties.markwon.image.AsyncDrawableScheduler; import io.noties.markwon.image.AsyncDrawableSpan; -import io.noties.markwon.image.ImageSize; import io.noties.markwon.image.ImageSizeResolver; import ru.noties.jlatexmath.JLatexMathDrawable; @@ -82,7 +81,11 @@ public class JLatexMathPlugin extends AbstractMarkwonPlugin { private final boolean fitCanvas; - private final int padding; + // @since 4.0.0-SNAPSHOT + private final int paddingHorizontal; + // @since 4.0.0-SNAPSHOT + + private final int paddingVertical; // @since 4.0.0-SNAPSHOT private final ExecutorService executorService; @@ -92,7 +95,8 @@ public class JLatexMathPlugin extends AbstractMarkwonPlugin { this.backgroundProvider = builder.backgroundProvider; this.align = builder.align; this.fitCanvas = builder.fitCanvas; - this.padding = builder.padding; + this.paddingHorizontal = builder.paddingHorizontal; + this.paddingVertical = builder.paddingVertical; // @since 4.0.0-SNAPSHOT ExecutorService executorService = builder.executorService; @@ -168,7 +172,11 @@ public class JLatexMathPlugin extends AbstractMarkwonPlugin { private boolean fitCanvas = true; - private int padding; + // @since 4.0.0-SNAPSHOT + private int paddingHorizontal; + + // @since 4.0.0-SNAPSHOT + private int paddingVertical; // @since 4.0.0-SNAPSHOT private ExecutorService executorService; @@ -197,7 +205,18 @@ public class JLatexMathPlugin extends AbstractMarkwonPlugin { @NonNull public Builder padding(@Px int padding) { - this.padding = padding; + this.paddingHorizontal = padding; + this.paddingVertical = padding; + return this; + } + + /** + * @since 4.0.0-SNAPSHOT + */ + @NonNull + public Builder builder(@Px int paddingHorizontal, @Px int paddingVertical) { + this.paddingHorizontal = paddingHorizontal; + this.paddingVertical = paddingVertical; return this; } @@ -251,7 +270,11 @@ public class JLatexMathPlugin extends AbstractMarkwonPlugin { .background(config.backgroundProvider.provide()) .align(config.align) .fitCanvas(config.fitCanvas) - .padding(config.padding) + .padding( + config.paddingHorizontal, + config.paddingVertical, + config.paddingHorizontal, + config.paddingVertical) .build(); // we must post to handler, but also have a way to identify the drawable @@ -305,11 +328,10 @@ public class JLatexMathPlugin extends AbstractMarkwonPlugin { @NonNull @Override - public Rect resolveImageSize( - @Nullable ImageSize imageSize, - @NonNull Rect imageBounds, - int canvasWidth, - float textSize) { + public Rect resolveImageSize(@NonNull AsyncDrawable drawable) { + + final Rect imageBounds = drawable.getResult().getBounds(); + final int canvasWidth = drawable.getLastKnownCanvasWidth(); if (fitCanvas && imageBounds.width() < canvasWidth) {