Skip to content

Commit

Permalink
Image Editor: Keep text on top.
Browse files Browse the repository at this point in the history
Sorts children by a new z-order.
  • Loading branch information
alan-signal authored and greyson-signal committed Mar 26, 2020
1 parent d46894e commit 0e2df2a
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ public boolean onTouchEvent(MotionEvent event) {

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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,15 @@
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;
Expand All @@ -32,10 +35,13 @@
*/
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;
Expand All @@ -54,16 +60,22 @@ 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) {
id = ParcelUtils.readUUID(in);
flags = new EditorFlags(in.readInt());
ParcelUtils.readMatrix(localMatrix, in);
renderer = in.readParcelable(Renderer.class.getClassLoader());
zOrder = in.readInt();
in.readTypedList(children, EditorElement.CREATOR);
}

Expand Down Expand Up @@ -127,6 +139,7 @@ private static void drawChildren(@NonNull List<EditorElement> children, @NonNull

public void addElement(@NonNull EditorElement element) {
children.add(element);
Collections.sort(children, Z_ORDER_COMPARATOR);
}

public Matrix getLocalMatrix() {
Expand Down Expand Up @@ -328,6 +341,7 @@ public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(this.flags.asInt());
ParcelUtils.writeMatrix(dest, localMatrix);
dest.writeParcelable(renderer, flags);
dest.writeInt(zOrder);
dest.writeTypedList(children);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@
*/
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 = () -> {
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -241,7 +240,7 @@ protected void addText() {
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();
Expand All @@ -254,20 +253,11 @@ protected void addText() {
@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);
Expand Down Expand Up @@ -307,7 +297,7 @@ public void onModeStarted(@NonNull ImageEditorHud.Mode mode) {

case INSERT_STICKER: {
Intent intent = new Intent(getContext(), ImageEditorStickerSelectActivity.class);
startActivityForResult(intent, SELECT_NEW_STICKER_REQUEST_CODE);
startActivityForResult(intent, SELECT_STICKER_REQUEST_CODE);
break;
}

Expand Down

0 comments on commit 0e2df2a

Please sign in to comment.