Add text styles support to image editor.

Co-authored-by: Greyson Parrelli <greyson@signal.org>
This commit is contained in:
Alex Hart
2021-09-08 17:01:20 -03:00
committed by Greyson Parrelli
parent 05f7dce503
commit 715ad0d459
8 changed files with 212 additions and 22 deletions

View File

@@ -1,7 +1,5 @@
package org.thoughtcrime.securesms.scribbles;
import static android.app.Activity.RESULT_OK;
import android.Manifest;
import android.content.Intent;
import android.content.res.Configuration;
@@ -14,7 +12,6 @@ import android.net.Uri;
import android.os.Bundle;
import android.view.HapticFeedbackConstants;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
@@ -71,6 +68,8 @@ import java.util.Collections;
import java.util.List;
import java.util.Objects;
import static android.app.Activity.RESULT_OK;
public final class ImageEditorFragment extends Fragment implements ImageEditorHudV2.EventListener,
MediaSendPageFragment,
TextEntryDialogFragment.Controller
@@ -351,6 +350,13 @@ public final class ImageEditorFragment extends Fragment implements ImageEditorHu
imageEditorView.zoomToFitText(editorElement, textRenderer);
}
@Override
public void onTextStyleToggle() {
if (currentSelection != null && currentSelection.getRenderer() instanceof MultiLineTextRenderer) {
((MultiLineTextRenderer) currentSelection.getRenderer()).nextMode();
}
}
@Override
public void onTextEntryDialogDismissed(boolean hasText) {
imageEditorView.doneTextEditing();
@@ -366,7 +372,7 @@ public final class ImageEditorFragment extends Fragment implements ImageEditorHu
protected void addText() {
String initialText = "";
int color = imageEditorHud.getActiveColor();
MultiLineTextRenderer renderer = new MultiLineTextRenderer(initialText, color);
MultiLineTextRenderer renderer = new MultiLineTextRenderer(initialText, color, MultiLineTextRenderer.Mode.REGULAR);
EditorElement element = new EditorElement(renderer, EditorModel.Z_TEXT);
imageEditorView.getModel().addElementCentered(element, 1);

View File

@@ -64,6 +64,7 @@ class ImageEditorHudV2 @JvmOverloads constructor(
private val colorIndicator: ImageView = findViewById(R.id.image_editor_hud_color_indicator)
private val bottomGuideline: Guideline = findViewById(R.id.image_editor_bottom_guide)
private val brushPreview: BrushWidthPreviewView = findViewById(R.id.image_editor_hud_brush_preview)
private val textStyleToggle: ImageView = findViewById(R.id.image_editor_hud_text_style_button)
private val selectableSet: Set<View> = setOf(drawButton, textButton, stickerButton, blurButton)
@@ -73,7 +74,7 @@ class ImageEditorHudV2 @JvmOverloads constructor(
private val drawButtonRow: Set<View> = setOf(cancelButton, doneButton, drawButton, textButton, stickerButton, blurButton)
private val cropButtonRow: Set<View> = setOf(cancelButton, doneButton, cropRotateButton, cropFlipButton, cropAspectLockButton)
private val allModeTools: Set<View> = drawTools + blurTools + drawButtonRow + cropButtonRow
private val allModeTools: Set<View> = drawTools + blurTools + drawButtonRow + cropButtonRow + textStyleToggle
private val viewsToSlide: Set<View> = drawButtonRow + cropButtonRow
@@ -93,6 +94,7 @@ class ImageEditorHudV2 @JvmOverloads constructor(
clearAllButton.setOnClickListener { listener?.onClearAll() }
cancelButton.setOnClickListener { listener?.onCancel() }
textStyleToggle.setOnClickListener { listener?.onTextStyleToggle() }
drawButton.setOnClickListener { setMode(Mode.DRAW) }
blurButton.setOnClickListener { setMode(Mode.BLUR) }
textButton.setOnClickListener { setMode(Mode.TEXT) }
@@ -370,7 +372,7 @@ class ImageEditorHudV2 @JvmOverloads constructor(
private fun presentModeText() {
animateModeChange(
inSet = drawButtonRow + setOf(drawSeekBar),
inSet = drawButtonRow + setOf(drawSeekBar, textStyleToggle),
outSet = allModeTools
)
animateInUndoTools()
@@ -520,6 +522,7 @@ class ImageEditorHudV2 @JvmOverloads constructor(
fun onFlipHorizontal()
fun onRotate90AntiClockwise()
fun onCropAspectLock()
fun onTextStyleToggle()
val isCropAspectLocked: Boolean
fun onRequestFullScreen(fullScreen: Boolean, hideKeyboard: Boolean)

View File

@@ -61,6 +61,7 @@ class TextEntryDialogFragment : KeyboardEntryDialogFragment(R.layout.v2_media_im
val slider: AppCompatSeekBar = view.findViewById(R.id.image_editor_hud_draw_color_bar)
val colorIndicator: ImageView = view.findViewById(R.id.image_editor_hud_color_indicator)
val styleToggle: ImageView = view.findViewById(R.id.image_editor_hud_text_style_button)
slider.setUpForColor(
Color.WHITE,
{
@@ -83,6 +84,10 @@ class TextEntryDialogFragment : KeyboardEntryDialogFragment(R.layout.v2_media_im
)
slider.progress = requireArguments().getInt("color_index")
styleToggle.setOnClickListener {
(element.renderer as MultiLineTextRenderer).nextMode()
}
}
override fun onDismiss(dialog: DialogInterface) {