Image Editor: Keep text on top.
Sorts children by a new z-order.
This commit is contained in:
parent
d46894e5db
commit
0e2df2adbb
4 changed files with 24 additions and 16 deletions
|
@ -320,7 +320,7 @@ public final class ImageEditorView extends FrameLayout {
|
|||
|
||||
private EditSession startADrawingSession(@NonNull PointF point) {
|
||||
BezierDrawingRenderer renderer = new BezierDrawingRenderer(color, thickness * Bounds.FULL_BOUNDS.width(), cap, model.findCropRelativeToRoot());
|
||||
EditorElement element = new EditorElement(renderer);
|
||||
EditorElement element = new EditorElement(renderer, EditorModel.Z_DRAWING);
|
||||
model.addElementCentered(element, 1);
|
||||
|
||||
Matrix elementInverseMatrix = model.findElementInverseMatrix(element, viewMatrix);
|
||||
|
|
|
@ -3,12 +3,15 @@ package org.thoughtcrime.securesms.imageeditor.model;
|
|||
import android.graphics.Matrix;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import org.thoughtcrime.securesms.imageeditor.Renderer;
|
||||
import org.thoughtcrime.securesms.imageeditor.RendererContext;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
@ -32,10 +35,13 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class EditorElement implements Parcelable {
|
||||
|
||||
private static final Comparator<EditorElement> Z_ORDER_COMPARATOR = (e1, e2) -> Integer.compare(e1.zOrder, e2.zOrder);
|
||||
|
||||
private final UUID id;
|
||||
private final EditorFlags flags;
|
||||
private final Matrix localMatrix = new Matrix();
|
||||
private final Matrix editorMatrix = new Matrix();
|
||||
private final int zOrder;
|
||||
|
||||
@Nullable
|
||||
private final Renderer renderer;
|
||||
|
@ -54,9 +60,14 @@ public final class EditorElement implements Parcelable {
|
|||
private AlphaAnimation alphaAnimation = AlphaAnimation.NULL_1;
|
||||
|
||||
public EditorElement(@Nullable Renderer renderer) {
|
||||
this(renderer, 0);
|
||||
}
|
||||
|
||||
public EditorElement(@Nullable Renderer renderer, int zOrder) {
|
||||
this.id = UUID.randomUUID();
|
||||
this.flags = new EditorFlags();
|
||||
this.renderer = renderer;
|
||||
this.zOrder = zOrder;
|
||||
}
|
||||
|
||||
private EditorElement(Parcel in) {
|
||||
|
@ -64,6 +75,7 @@ public final class EditorElement implements Parcelable {
|
|||
flags = new EditorFlags(in.readInt());
|
||||
ParcelUtils.readMatrix(localMatrix, in);
|
||||
renderer = in.readParcelable(Renderer.class.getClassLoader());
|
||||
zOrder = in.readInt();
|
||||
in.readTypedList(children, EditorElement.CREATOR);
|
||||
}
|
||||
|
||||
|
@ -127,6 +139,7 @@ public final class EditorElement implements Parcelable {
|
|||
|
||||
public void addElement(@NonNull EditorElement element) {
|
||||
children.add(element);
|
||||
Collections.sort(children, Z_ORDER_COMPARATOR);
|
||||
}
|
||||
|
||||
public Matrix getLocalMatrix() {
|
||||
|
@ -328,6 +341,7 @@ public final class EditorElement implements Parcelable {
|
|||
dest.writeInt(this.flags.asInt());
|
||||
ParcelUtils.writeMatrix(dest, localMatrix);
|
||||
dest.writeParcelable(renderer, flags);
|
||||
dest.writeInt(zOrder);
|
||||
dest.writeTypedList(children);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,6 +35,10 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class EditorModel implements Parcelable, RendererContext.Ready {
|
||||
|
||||
public static final int Z_DRAWING = 0;
|
||||
public static final int Z_STICKERS = 0;
|
||||
public static final int Z_TEXT = 1;
|
||||
|
||||
private static final Runnable NULL_RUNNABLE = () -> {
|
||||
};
|
||||
|
||||
|
|
|
@ -50,8 +50,7 @@ public final class ImageEditorFragment extends Fragment implements ImageEditorHu
|
|||
private static final String KEY_IMAGE_URI = "image_uri";
|
||||
private static final String KEY_IS_AVATAR_MODE = "avatar_mode";
|
||||
|
||||
private static final int SELECT_OLD_STICKER_REQUEST_CODE = 123;
|
||||
private static final int SELECT_NEW_STICKER_REQUEST_CODE = 124;
|
||||
private static final int SELECT_STICKER_REQUEST_CODE = 124;
|
||||
|
||||
private EditorModel restoredModel;
|
||||
|
||||
|
@ -241,7 +240,7 @@ public final class ImageEditorFragment extends Fragment implements ImageEditorHu
|
|||
String initialText = "";
|
||||
int color = imageEditorHud.getActiveColor();
|
||||
MultiLineTextRenderer renderer = new MultiLineTextRenderer(initialText, color);
|
||||
EditorElement element = new EditorElement(renderer);
|
||||
EditorElement element = new EditorElement(renderer, EditorModel.Z_TEXT);
|
||||
|
||||
imageEditorView.getModel().addElementCentered(element, 1);
|
||||
imageEditorView.invalidate();
|
||||
|
@ -254,20 +253,11 @@ public final class ImageEditorFragment extends Fragment implements ImageEditorHu
|
|||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (resultCode == RESULT_OK && requestCode == SELECT_NEW_STICKER_REQUEST_CODE && data != null) {
|
||||
if (resultCode == RESULT_OK && requestCode == SELECT_STICKER_REQUEST_CODE && data != null) {
|
||||
final Uri uri = data.getData();
|
||||
if (uri != null) {
|
||||
UriGlideRenderer renderer = new UriGlideRenderer(uri, true, imageMaxWidth, imageMaxHeight);
|
||||
EditorElement element = new EditorElement(renderer);
|
||||
imageEditorView.getModel().addElementCentered(element, 0.2f);
|
||||
currentSelection = element;
|
||||
imageEditorHud.setMode(ImageEditorHud.Mode.MOVE_DELETE);
|
||||
}
|
||||
} else if (resultCode == RESULT_OK && requestCode == SELECT_OLD_STICKER_REQUEST_CODE && data != null) {
|
||||
final Uri uri = data.getData();
|
||||
if (uri != null) {
|
||||
UriGlideRenderer renderer = new UriGlideRenderer(uri, false, imageMaxWidth, imageMaxHeight);
|
||||
EditorElement element = new EditorElement(renderer);
|
||||
EditorElement element = new EditorElement(renderer, EditorModel.Z_STICKERS);
|
||||
imageEditorView.getModel().addElementCentered(element, 0.2f);
|
||||
currentSelection = element;
|
||||
imageEditorHud.setMode(ImageEditorHud.Mode.MOVE_DELETE);
|
||||
|
@ -307,7 +297,7 @@ public final class ImageEditorFragment extends Fragment implements ImageEditorHu
|
|||
|
||||
case INSERT_STICKER: {
|
||||
Intent intent = new Intent(getContext(), ImageEditorStickerSelectActivity.class);
|
||||
startActivityForResult(intent, SELECT_NEW_STICKER_REQUEST_CODE);
|
||||
startActivityForResult(intent, SELECT_STICKER_REQUEST_CODE);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue