diff --git a/app/build.gradle b/app/build.gradle
index a3d95cd..b8e2842 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -11,7 +11,7 @@ android {
minSdk 30
targetSdk 34
versionCode 1
- versionName '24.6.10'
+ versionName '24.7.1'
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
@@ -34,14 +34,14 @@ android {
dependencies {
implementation 'androidx.activity:activity:1.9.0'
- implementation 'androidx.appcompat:appcompat:1.6.1'
+ implementation 'androidx.appcompat:appcompat:1.7.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
- implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.0'
+ implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.2'
implementation 'androidx.preference:preference:1.2.1'
implementation 'com.google.android.material:material:1.12.0'
implementation('io.github.waynejo:androidndkgif:1.0.1')
implementation(platform('org.jetbrains.kotlin:kotlin-bom:1.9.20'))
testImplementation 'junit:junit:4.13.2'
- androidTestImplementation 'androidx.test.ext:junit:1.1.5'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
+ androidTestImplementation 'androidx.test.ext:junit:1.2.1'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
}
\ No newline at end of file
diff --git a/app/src/main/java/com/misterchan/iconeditor/CellGrid.java b/app/src/main/java/com/misterchan/iconeditor/CellGrid.java
index 8c04b78..4d08553 100644
--- a/app/src/main/java/com/misterchan/iconeditor/CellGrid.java
+++ b/app/src/main/java/com/misterchan/iconeditor/CellGrid.java
@@ -1,15 +1,42 @@
package com.misterchan.iconeditor;
-import androidx.annotation.IntRange;
+import android.graphics.Canvas;
+import android.graphics.Paint;
public class CellGrid {
public boolean enabled = false;
- @IntRange(from = 0)
public int sizeX = 16, sizeY = 16;
- @IntRange(from = 0)
public int spacingX = 0, spacingY = 0;
public int offsetX = 0, offsetY = 0;
+
+ public void draw(Canvas canvas, float l, float t, float r, float b, float tx, float ty, float s, Paint paint) {
+ if (sizeX + spacingX > 1) {
+ final float scaledSizeX = sizeX * s, scaledSpacingX = spacingX * s;
+ float x = (tx >= 0.0f ? tx : tx % (scaledSizeX + scaledSpacingX)) + offsetX % (sizeX + spacingX) * s;
+ while (true) {
+ if (x >= l) canvas.drawLine(x, t, x, b, paint);
+ if ((x += scaledSizeX) > r) break;
+ if (spacingX != 0) {
+ if (x >= l) canvas.drawLine(x, t, x, b, paint);
+ if ((x += scaledSpacingX) > r) break;
+ }
+ }
+ }
+ if (sizeY + spacingY > 1) {
+ final float scaledSizeY = sizeY * s, scaledSpacingY = spacingY * s;
+ float y = (ty >= 0.0f ? ty : ty % (scaledSizeY + scaledSpacingY)) + offsetY % (sizeY + spacingY) * s;
+ if (y < ty) y += scaledSizeY + scaledSpacingY;
+ while (true) {
+ if (y >= t) canvas.drawLine(l, y, r, y, paint);
+ if ((y += scaledSizeY) > b) break;
+ if (spacingY != 0) {
+ if (y >= t) canvas.drawLine(l, y, r, y, paint);
+ if ((y += scaledSpacingY) > b) break;
+ }
+ }
+ }
+ }
}
diff --git a/app/src/main/java/com/misterchan/iconeditor/dialog/AnimationClipper.java b/app/src/main/java/com/misterchan/iconeditor/dialog/AnimationClipper.java
index 2e7d46b..d34e101 100644
--- a/app/src/main/java/com/misterchan/iconeditor/dialog/AnimationClipper.java
+++ b/app/src/main/java/com/misterchan/iconeditor/dialog/AnimationClipper.java
@@ -32,7 +32,7 @@ public interface OnConfirmListener {
public AnimationClipper(Context context, Project project, OnConfirmListener listener) {
builder = new MaterialAlertDialogBuilder(context)
- .setIcon(R.drawable.ic_content_cut).setTitle(R.string.clip)
+ .setIcon(R.drawable.ic_content_cut).setTitle(R.string.clip_verb)
.setView(R.layout.animation_clipper)
.setPositiveButton(R.string.ok, (dialog, which) ->
listener.onConfirm(from, to))
diff --git a/app/src/main/java/com/misterchan/iconeditor/dialog/CellGridManager.java b/app/src/main/java/com/misterchan/iconeditor/dialog/CellGridManager.java
index 9a5e72a..18fa6b1 100644
--- a/app/src/main/java/com/misterchan/iconeditor/dialog/CellGridManager.java
+++ b/app/src/main/java/com/misterchan/iconeditor/dialog/CellGridManager.java
@@ -40,34 +40,14 @@ public CellGridManager(Context context, CellGrid cellGrid, OnApplyListener onUpd
.setView(R.layout.cell_grid);
}
- public void show() {
- final AlertDialog dialog = builder.show();
-
- cbEnabled = dialog.findViewById(R.id.cb_enabled);
- tietSizeX = dialog.findViewById(R.id.tiet_size_x);
- tietSizeY = dialog.findViewById(R.id.tiet_size_y);
- tietSpacingX = dialog.findViewById(R.id.tiet_spacing_x);
- tietSpacingY = dialog.findViewById(R.id.tiet_spacing_y);
- tietOffsetX = dialog.findViewById(R.id.tiet_offset_x);
- tietOffsetY = dialog.findViewById(R.id.tiet_offset_y);
-
- cbEnabled.setChecked(cellGrid.enabled);
- tietSizeX.setText(String.valueOf(cellGrid.sizeX));
- tietSizeY.setText(String.valueOf(cellGrid.sizeY));
- tietSpacingX.setText(String.valueOf(cellGrid.spacingX));
- tietSpacingY.setText(String.valueOf(cellGrid.spacingY));
- tietOffsetX.setText(String.valueOf(cellGrid.offsetX));
- tietOffsetY.setText(String.valueOf(cellGrid.offsetY));
- }
-
private void onPositiveButtonClick(DialogInterface dialog, int which) {
final int sizeX, sizeY, spacingX, spacingY, offsetX, offsetY;
try {
- sizeX = Integer.parseUnsignedInt(tietSizeX.getText().toString());
- sizeY = Integer.parseUnsignedInt(tietSizeY.getText().toString());
- spacingX = Integer.parseUnsignedInt(tietSpacingX.getText().toString());
- spacingY = Integer.parseUnsignedInt(tietSpacingY.getText().toString());
+ sizeX = Integer.parseInt(tietSizeX.getText().toString());
+ sizeY = Integer.parseInt(tietSizeY.getText().toString());
+ spacingX = Integer.parseInt(tietSpacingX.getText().toString());
+ spacingY = Integer.parseInt(tietSpacingY.getText().toString());
offsetX = Integer.parseInt(tietOffsetX.getText().toString());
offsetY = Integer.parseInt(tietOffsetY.getText().toString());
} catch (NumberFormatException e) {
@@ -84,4 +64,24 @@ private void onPositiveButtonClick(DialogInterface dialog, int which) {
onUpdateListener.onApply();
}
+
+ public void show() {
+ final AlertDialog dialog = builder.show();
+
+ cbEnabled = dialog.findViewById(R.id.cb_enabled);
+ tietSizeX = dialog.findViewById(R.id.tiet_size_x);
+ tietSizeY = dialog.findViewById(R.id.tiet_size_y);
+ tietSpacingX = dialog.findViewById(R.id.tiet_spacing_x);
+ tietSpacingY = dialog.findViewById(R.id.tiet_spacing_y);
+ tietOffsetX = dialog.findViewById(R.id.tiet_offset_x);
+ tietOffsetY = dialog.findViewById(R.id.tiet_offset_y);
+
+ cbEnabled.setChecked(cellGrid.enabled);
+ tietSizeX.setText(String.valueOf(cellGrid.sizeX));
+ tietSizeY.setText(String.valueOf(cellGrid.sizeY));
+ tietSpacingX.setText(String.valueOf(cellGrid.spacingX));
+ tietSpacingY.setText(String.valueOf(cellGrid.spacingY));
+ tietOffsetX.setText(String.valueOf(cellGrid.offsetX));
+ tietOffsetY.setText(String.valueOf(cellGrid.offsetY));
+ }
}
diff --git a/app/src/main/java/com/misterchan/iconeditor/tool/BrushTool.java b/app/src/main/java/com/misterchan/iconeditor/tool/BrushTool.java
index b04df15..11e6616 100644
--- a/app/src/main/java/com/misterchan/iconeditor/tool/BrushTool.java
+++ b/app/src/main/java/com/misterchan/iconeditor/tool/BrushTool.java
@@ -8,9 +8,17 @@
import androidx.annotation.NonNull;
+import com.misterchan.iconeditor.util.BitmapUtils;
+
public class BrushTool {
public enum TipShape {
- PRESET_BRUSH, REF
+ PRESET_BRUSH, CLIP;
+
+ private static final TipShape[] values = values();
+
+ public static TipShape valueAt(int ordinal) {
+ return values[ordinal];
+ }
}
private static final Paint PAINT = new Paint() {
@@ -38,9 +46,10 @@ public void setToBrush(long color) {
tipShape = TipShape.PRESET_BRUSH;
}
- public void setToRef(Bitmap src, long color) {
+ public void setToClip(Bitmap src, long color) {
+ if (src == null) return;
set(src, color);
- tipShape = TipShape.REF;
+ tipShape = TipShape.CLIP;
}
public void set(long color) {
@@ -48,8 +57,10 @@ public void set(long color) {
}
private void set(@NonNull Bitmap src, long color) {
- if (tipShape == TipShape.REF && this.src != null) this.src.recycle();
- this.src = src;
+ if (src != this.src) {
+ if (this.src != null) this.src.recycle();
+ this.src = BitmapUtils.createBitmap(src);
+ }
final Bitmap dst = Bitmap.createBitmap(src.getWidth(), src.getHeight(), Bitmap.Config.ARGB_8888);
dst.eraseColor(color);
new Canvas(dst).drawBitmap(src, 0.0f, 0.0f, PAINT);
diff --git a/app/src/main/java/com/misterchan/iconeditor/ui/MainActivity.java b/app/src/main/java/com/misterchan/iconeditor/ui/MainActivity.java
index 7de864a..2239aca 100644
--- a/app/src/main/java/com/misterchan/iconeditor/ui/MainActivity.java
+++ b/app/src/main/java/com/misterchan/iconeditor/ui/MainActivity.java
@@ -714,10 +714,7 @@ public void onDestroyActionMode(ActionMode mode) {
final int checkedItem = brush.tipShape.ordinal();
new MaterialAlertDialogBuilder(this).setTitle(R.string.tip_shape)
.setSingleChoiceItems(R.array.brush_tip_shapes, checkedItem, (dialog, which) -> {
- updateBrush(switch (which) {
- default -> BrushTool.TipShape.PRESET_BRUSH;
- case 1 -> BrushTool.TipShape.REF;
- });
+ updateBrush(BrushTool.TipShape.valueAt(which));
})
.setPositiveButton(R.string.ok, null)
.show();
@@ -2951,8 +2948,8 @@ public void onIVTouch(View v, MotionEvent event) {
}
case R.id.b_translation, R.id.b_scale, R.id.b_rotation, R.id.b_poly, R.id.b_mesh -> {
final boolean isTransformerButtonChecked = switch (activityMain.tools.btgTools.getCheckedButtonId()) {
- case R.id.b_translation, R.id.b_scale, R.id.b_rotation, R.id.b_poly, R.id.b_mesh ->
- true;
+ case R.id.b_translation, R.id.b_scale, R.id.b_rotation, R.id.b_poly,
+ R.id.b_mesh -> true;
default -> false;
};
if (isChecked) {
@@ -3180,7 +3177,6 @@ private boolean checkOrRequestPermission() {
@SuppressLint("NonConstantResourceId")
private boolean checkRefNecessity() {
return switch (activityMain.tools.btgTools.getCheckedButtonId()) {
- case R.id.b_brush -> brush.tipShape == BrushTool.TipShape.REF;
case R.id.b_magic_eraser, R.id.b_magic_paint -> true;
default -> false;
};
@@ -3627,56 +3623,15 @@ private void drawGridOntoView() {
for (float y = t; y <= b; y += scale)
gridCanvas.drawLine(l, y, r, y, PAINT_GRID);
}
- gridCanvas.drawLine(l, t, l - 100.0f, t, PAINT_IMAGE_BOUND);
- gridCanvas.drawLine(r, t, r + 100.0f, t, PAINT_IMAGE_BOUND);
- gridCanvas.drawLine(r, t - 100.0f, r, t, PAINT_IMAGE_BOUND);
- gridCanvas.drawLine(r, b, r, b + 100.0f, PAINT_IMAGE_BOUND);
- gridCanvas.drawLine(r + 100.0f, b, r, b, PAINT_IMAGE_BOUND);
- gridCanvas.drawLine(l, b, l - 100.0f, b, PAINT_IMAGE_BOUND);
- gridCanvas.drawLine(l, b + 100.0f, l, b, PAINT_IMAGE_BOUND);
- gridCanvas.drawLine(l, t, l, t - 100.0f, PAINT_IMAGE_BOUND);
+ CanvasUtils.drawRightAngles(gridCanvas, l, t, r, b, PAINT_IMAGE_BOUND);
}
final CellGrid cellGrid = project.cellGrid;
if (cellGrid.enabled) {
final Bitmap background = frame.getBackgroundLayer().bitmap;
+ final float l = translationX >= 0.0f ? translationX : translationX % scale, t = translationY >= 0.0f ? translationY : translationY % scale;
final float r = Math.min(translationX + toScaled(background.getWidth()), viewWidth), b = Math.min(translationY + toScaled(background.getHeight()), viewHeight);
- if (cellGrid.sizeX > 1) {
- final float t = translationY >= 0.0f ? translationY : translationY % scale;
- final float scaledSizeX = toScaled(cellGrid.sizeX), scaledSpacingX = toScaled(cellGrid.spacingX);
- float x = (translationX >= 0.0f ? translationX : translationX % (scaledSizeX + scaledSpacingX))
- + toScaled(cellGrid.offsetX % (cellGrid.sizeX + cellGrid.spacingX));
- if (x < translationX) x += scaledSizeX + scaledSpacingX;
- if (cellGrid.spacingX <= 0) {
- do gridCanvas.drawLine(x, t, x, b, PAINT_CELL_GRID);
- while ((x += scaledSizeX) <= r);
- } else {
- do {
- gridCanvas.drawLine(x, t, x, b, PAINT_CELL_GRID);
- if ((x += scaledSizeX) > r) break;
- gridCanvas.drawLine(x, t, x, b, PAINT_CELL_GRID);
- if ((x += scaledSpacingX) > r) break;
- } while (true);
- }
- }
- if (cellGrid.sizeY > 1) {
- final float l = translationX >= 0.0f ? translationX : translationX % scale;
- final float scaledSizeY = toScaled(cellGrid.sizeY), scaledSpacingY = toScaled(cellGrid.spacingY);
- float y = (translationY >= 0.0f ? translationY : translationY % (scaledSizeY + scaledSpacingY))
- + toScaled(cellGrid.offsetY % (cellGrid.sizeY + cellGrid.spacingY));
- if (y < translationY) y += scaledSizeY + scaledSpacingY;
- if (cellGrid.spacingY <= 0) {
- do gridCanvas.drawLine(l, y, r, y, PAINT_CELL_GRID);
- while ((y += scaledSizeY) <= b);
- } else {
- do {
- gridCanvas.drawLine(l, y, r, y, PAINT_CELL_GRID);
- if ((y += scaledSizeY) > b) break;
- gridCanvas.drawLine(l, y, r, y, PAINT_CELL_GRID);
- if ((y += scaledSpacingY) > b) break;
- } while (true);
- }
- }
+ cellGrid.draw(gridCanvas, l, t, r, b, translationX, translationY, scale, PAINT_CELL_GRID);
}
for (final Guide guide : project.guides) {
@@ -3904,12 +3859,9 @@ ActivityMainBinding getBinding() {
}
private FloatingLayer getCurrentFloatingLayer() {
- if (!transformer.isRecycled()) {
- return transformer;
- } else if (!dpPreview.isRecycled()) {
- return dpPreview;
- }
- return null;
+ return !transformer.isRecycled() ? transformer
+ : !dpPreview.isRecycled() ? dpPreview
+ : null;
}
private Rect getVisibleSubset() {
@@ -4413,18 +4365,21 @@ private boolean onLayerOptionsItemSelected(MenuItem item, int itemId) {
layer.paint.getAlpha()));
}
case R.id.i_layer_blend_mode_clear,
- R.id.i_layer_blend_mode_src, R.id.i_layer_blend_mode_dst,
- R.id.i_layer_blend_mode_src_over, R.id.i_layer_blend_mode_dst_over,
- R.id.i_layer_blend_mode_src_in, R.id.i_layer_blend_mode_dst_in,
- R.id.i_layer_blend_mode_src_out, R.id.i_layer_blend_mode_dst_out,
- R.id.i_layer_blend_mode_src_atop, R.id.i_layer_blend_mode_dst_atop,
- R.id.i_layer_blend_mode_xor, R.id.i_layer_blend_mode_plus,
- R.id.i_layer_blend_mode_modulate, R.id.i_layer_blend_mode_screen, R.id.i_layer_blend_mode_overlay,
- R.id.i_layer_blend_mode_darken, R.id.i_layer_blend_mode_lighten,
- R.id.i_layer_blend_mode_color_dodge, R.id.i_layer_blend_mode_color_burn,
- R.id.i_layer_blend_mode_hard_light, R.id.i_layer_blend_mode_soft_light,
- R.id.i_layer_blend_mode_difference, R.id.i_layer_blend_mode_exclusion, R.id.i_layer_blend_mode_multiply,
- R.id.i_layer_blend_mode_hue, R.id.i_layer_blend_mode_saturation, R.id.i_layer_blend_mode_color, R.id.i_layer_blend_mode_luminosity -> {
+ R.id.i_layer_blend_mode_src, R.id.i_layer_blend_mode_dst,
+ R.id.i_layer_blend_mode_src_over, R.id.i_layer_blend_mode_dst_over,
+ R.id.i_layer_blend_mode_src_in, R.id.i_layer_blend_mode_dst_in,
+ R.id.i_layer_blend_mode_src_out, R.id.i_layer_blend_mode_dst_out,
+ R.id.i_layer_blend_mode_src_atop, R.id.i_layer_blend_mode_dst_atop,
+ R.id.i_layer_blend_mode_xor, R.id.i_layer_blend_mode_plus,
+ R.id.i_layer_blend_mode_modulate, R.id.i_layer_blend_mode_screen,
+ R.id.i_layer_blend_mode_overlay,
+ R.id.i_layer_blend_mode_darken, R.id.i_layer_blend_mode_lighten,
+ R.id.i_layer_blend_mode_color_dodge, R.id.i_layer_blend_mode_color_burn,
+ R.id.i_layer_blend_mode_hard_light, R.id.i_layer_blend_mode_soft_light,
+ R.id.i_layer_blend_mode_difference, R.id.i_layer_blend_mode_exclusion,
+ R.id.i_layer_blend_mode_multiply,
+ R.id.i_layer_blend_mode_hue, R.id.i_layer_blend_mode_saturation,
+ R.id.i_layer_blend_mode_color, R.id.i_layer_blend_mode_luminosity -> {
layer.paint.setBlendMode(switch (itemId) {
case R.id.i_layer_blend_mode_clear -> BlendMode.CLEAR;
case R.id.i_layer_blend_mode_src -> BlendMode.SRC;
@@ -5862,12 +5817,8 @@ private float toViewYRel(int y) {
private void updateBrush(BrushTool.TipShape tipShape) {
if (tipShape == null) tipShape = brush.tipShape;
switch (tipShape) {
+ case CLIP -> brush.setToClip(clipboard, paint.getColorLong());
case PRESET_BRUSH -> brush.setToBrush(paint.getColorLong());
- case REF -> {
- updateReference(true);
- if (brush.tipShape == BrushTool.TipShape.PRESET_BRUSH)
- brush.setToRef(ref.bm(), paint.getColorLong());
- }
}
}
@@ -5878,8 +5829,5 @@ private void updateReference() {
private void updateReference(boolean nonNull) {
final Bitmap rb = frame.mergeReferenceLayers();
ref.set(rb != null ? rb : nonNull || checkRefNecessity() ? BitmapUtils.createBitmap(bitmap) : null);
- if (activityMain.tools.btgTools.getCheckedButtonId() == R.id.b_brush && brush.tipShape == BrushTool.TipShape.REF) {
- brush.setToRef(ref.bm(), paint.getColorLong());
- }
}
}
diff --git a/app/src/main/java/com/misterchan/iconeditor/util/CanvasUtils.java b/app/src/main/java/com/misterchan/iconeditor/util/CanvasUtils.java
index cf323c8..2346c61 100644
--- a/app/src/main/java/com/misterchan/iconeditor/util/CanvasUtils.java
+++ b/app/src/main/java/com/misterchan/iconeditor/util/CanvasUtils.java
@@ -15,4 +15,15 @@ public static void drawInclusiveLine(Canvas canvas, int startX, int startY, int
canvas.drawLine(startX, startY, stopX, stopY, paint);
}
+
+ public static void drawRightAngles(Canvas canvas, float l, float t, float r, float b, Paint paint) {
+ canvas.drawLine(l, t, l - 100.0f, t, paint);
+ canvas.drawLine(r, t, r + 100.0f, t, paint);
+ canvas.drawLine(r, t - 100.0f, r, t, paint);
+ canvas.drawLine(r, b, r, b + 100.0f, paint);
+ canvas.drawLine(r + 100.0f, b, r, b, paint);
+ canvas.drawLine(l, b, l - 100.0f, b, paint);
+ canvas.drawLine(l, b + 100.0f, l, b, paint);
+ canvas.drawLine(l, t, l, t - 100.0f, paint);
+ }
}
diff --git a/app/src/main/res/layout/cell_grid.xml b/app/src/main/res/layout/cell_grid.xml
index d799f84..2587037 100644
--- a/app/src/main/res/layout/cell_grid.xml
+++ b/app/src/main/res/layout/cell_grid.xml
@@ -47,7 +47,7 @@
android:layout_height="wrap_content"
android:backgroundTint="@android:color/transparent"
android:hint="@string/x"
- android:inputType="number"
+ android:inputType="numberSigned"
android:textAlignment="textEnd" />
@@ -67,7 +67,7 @@
android:layout_height="wrap_content"
android:backgroundTint="@android:color/transparent"
android:hint="@string/y"
- android:inputType="number"
+ android:inputType="numberSigned"
android:textAlignment="textEnd" />
@@ -96,7 +96,7 @@
android:layout_height="wrap_content"
android:backgroundTint="@android:color/transparent"
android:hint="@string/x"
- android:inputType="number"
+ android:inputType="numberSigned"
android:textAlignment="textEnd" />
@@ -116,7 +116,7 @@
android:layout_height="wrap_content"
android:backgroundTint="@android:color/transparent"
android:hint="@string/y"
- android:inputType="number"
+ android:inputType="numberSigned"
android:textAlignment="textEnd" />
diff --git a/app/src/main/res/menu/frame.xml b/app/src/main/res/menu/frame.xml
index 5060831..6e24d92 100644
--- a/app/src/main/res/menu/frame.xml
+++ b/app/src/main/res/menu/frame.xml
@@ -31,6 +31,6 @@
android:id="@+id/i_frame_clip"
android:icon="@drawable/ic_content_cut"
android:iconTint="?attr/colorOnSurfaceVariant"
- android:title="@string/clip" />
+ android:title="@string/clip_verb" />
\ No newline at end of file
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 26d462c..18a7f34 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -40,7 +40,8 @@
清除
清除目标
清除参考线
- 剪辑
+ 剪贴簿数据
+ 剪辑
剪贴
克隆笔
关闭
diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml
index 78e2fb1..53199ab 100644
--- a/app/src/main/res/values-zh-rHK/strings.xml
+++ b/app/src/main/res/values-zh-rHK/strings.xml
@@ -40,7 +40,8 @@
淸除
淸除目標
淸除參考線
- 剪輯
+ 剪貼簿數據
+ 剪輯
剪裁
克隆筆
關閉
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index 34ef474..fa7e431 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -16,7 +16,7 @@
- @string/preset_brush
- - @string/reference
+ - @string/clip_noun
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 94c6570..51adb52 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -50,7 +50,8 @@
Clear
Clear Destination
Clear Guides
- Clip
+ Clip
+ Clip
Clipped
Cloner
Close
diff --git a/build.gradle b/build.gradle
index 58a3bbb..f58ae3f 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,7 +1,7 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
- id 'com.android.application' version '8.4.1' apply false
- id 'com.android.library' version '8.4.1' apply false
+ id 'com.android.application' version '8.5.0' apply false
+ id 'com.android.library' version '8.5.0' apply false
}
tasks.register('clean', Delete) {
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index df03796..6c1bd69 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Tue May 21 17:02:37 HKT 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists