ImageSizeResolver change (accept async-drawable)

This commit is contained in:
Dimitry Ivanov 2019-06-22 12:09:53 +03:00
parent 4fec46fb4d
commit 213f5cf281
5 changed files with 54 additions and 36 deletions

View File

@ -11,3 +11,5 @@
* TagHandler now has `supportedTags()` method
* html is moved completely to html-plugin
* OnTextAddedListener
* ImageSizeResolver signature change (accept AsyncDrawable)
* JLatexMathPlugin builder has vertical & horizontal padding

View File

@ -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

View File

@ -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);
}

View File

@ -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,

View File

@ -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) {