diff --git a/catroid/src/main/java/org/catrobat/catroid/formulaeditor/FormulaEditorEditText.java b/catroid/src/main/java/org/catrobat/catroid/formulaeditor/FormulaEditorEditText.java index 485d38607a1..fc2c7e5b80b 100644 --- a/catroid/src/main/java/org/catrobat/catroid/formulaeditor/FormulaEditorEditText.java +++ b/catroid/src/main/java/org/catrobat/catroid/formulaeditor/FormulaEditorEditText.java @@ -26,6 +26,7 @@ import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; +import android.graphics.Rect; import android.text.Layout; import android.text.Spannable; import android.text.style.BackgroundColorSpan; @@ -43,6 +44,8 @@ import java.util.List; import java.util.Map; +import static org.catrobat.catroid.formulaeditor.InternFormula.TokenSelectionType.USER_SELECTION; + @SuppressLint("AppCompatCustomView") public class FormulaEditorEditText extends EditText implements OnTouchListener { @@ -357,17 +360,38 @@ private String updateTextAndCursorFromInternFormula() { if (absoluteCursorPosition > length()) { absoluteCursorPosition = length(); } - highlightSelection(); - return newExternFormulaString; } @Override public boolean onTouch(View view, MotionEvent motion) { + if (motion.getAction() == MotionEvent.ACTION_UP) { + Spannable spannable = (Spannable) getText(); + int x = (int) (motion.getX() - getTotalPaddingLeft() + getScrollX()); + int y = (int) (motion.getY() - getTotalPaddingTop() + getScrollY()); + + VisualizeColorImageSpan[] spans = spannable.getSpans(0, spannable.length(), + VisualizeColorImageSpan.class); + for (int i = 0; i < spans.length; i++) { + Rect rect = spans[i].getDrawRect(); + + if (rect != null && rect.contains(x, y)) { + internFormula.internFormulaTokenSelection = new InternFormulaTokenSelection( + USER_SELECTION, i, i); + + formulaEditorFragment.showColorPickerDialog(view); + return true; + } + } + } return gestureDetector.onTouchEvent(motion); } + public void setSelectedColorValue() { + internFormula.selectWholeFormula(); + } + @Override public boolean onCheckIsTextEditor() { return false; diff --git a/catroid/src/main/java/org/catrobat/catroid/formulaeditor/InternFormula.java b/catroid/src/main/java/org/catrobat/catroid/formulaeditor/InternFormula.java index 14dc70dddea..b6dad75aee3 100644 --- a/catroid/src/main/java/org/catrobat/catroid/formulaeditor/InternFormula.java +++ b/catroid/src/main/java/org/catrobat/catroid/formulaeditor/InternFormula.java @@ -1190,4 +1190,8 @@ public void setInternTokenFormulaList(List list) { public List getInternTokenFormulaList() { return internTokenFormulaList; } + + public int getCursorPositionInternTokenIndex() { + return cursorPositionInternTokenIndex; + } } diff --git a/catroid/src/main/java/org/catrobat/catroid/formulaeditor/VisualizeColorString.kt b/catroid/src/main/java/org/catrobat/catroid/formulaeditor/VisualizeColorString.kt index 399aa8fa192..ee4b772047e 100644 --- a/catroid/src/main/java/org/catrobat/catroid/formulaeditor/VisualizeColorString.kt +++ b/catroid/src/main/java/org/catrobat/catroid/formulaeditor/VisualizeColorString.kt @@ -25,6 +25,8 @@ package org.catrobat.catroid.formulaeditor import android.content.Context import android.graphics.Bitmap +import android.graphics.Canvas +import android.graphics.Paint import android.text.style.ImageSpan import androidx.core.graphics.drawable.RoundedBitmapDrawable import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory @@ -78,4 +80,27 @@ class VisualizeColorString( class VisualizeColorImageSpan( drawable: RoundedBitmapDrawable, val colorValue: Int -) : ImageSpan(drawable, ALIGN_BOTTOM) +) : ImageSpan(drawable, ALIGN_BOTTOM) { + + var drawRect: android.graphics.Rect? = null + + override fun draw( + canvas: Canvas, + text: CharSequence, + start: Int, + end: Int, + x: Float, + top: Int, + y: Int, + bottom: Int, + paint: Paint + ) { + super.draw(canvas, text, start, end, x, top, y, bottom, paint) + drawRect = android.graphics.Rect( + x.toInt(), + top, + (x + drawable.bounds.width()).toInt(), + bottom + ) + } +} diff --git a/catroid/src/main/java/org/catrobat/catroid/ui/fragment/FormulaEditorFragment.java b/catroid/src/main/java/org/catrobat/catroid/ui/fragment/FormulaEditorFragment.java index b8905386818..d9f1c6326f5 100644 --- a/catroid/src/main/java/org/catrobat/catroid/ui/fragment/FormulaEditorFragment.java +++ b/catroid/src/main/java/org/catrobat/catroid/ui/fragment/FormulaEditorFragment.java @@ -443,7 +443,7 @@ private void showColorPicker(ShowFormulaEditorStrategy.Callback callback, dialog.show(fragmentManager, null); } - private void showColorPickerDialog(View view) { + public void showColorPickerDialog(View view) { AppCompatActivity activity = UiUtils.getActivityFromView(view); if (activity == null) { return;