Skip to content

Commit 9b95d6d

Browse files
authored
Merge pull request #211 from rosuH/dev
Fix compatibility issues of single image watermark && Build script improvements.
2 parents 10e5ee6 + fc6f50d commit 9b95d6d

7 files changed

Lines changed: 49 additions & 30 deletions

File tree

app/build.gradle.kts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ android {
1515
applicationId = "me.rosuh.easywatermark"
1616
minSdk = (Apps.minSdk)
1717
targetSdk = (Apps.targetSdk)
18-
versionCode = 20804
19-
versionName = "2.8.4"
18+
versionCode = 20805
19+
versionName = "2.8.5"
2020
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
2121
setProperty("archivesBaseName", "$applicationId-v$versionName($versionCode)")
2222
}
@@ -94,9 +94,9 @@ dependencies {
9494

9595
implementation("id.zelory:compressor:3.0.1")
9696

97-
implementation("org.jetbrains.kotlin:kotlin-stdlib:1.7.10")
98-
implementation("androidx.appcompat:appcompat:1.5.0")
99-
implementation("com.google.android.material:material:1.8.0-alpha01")
97+
implementation("org.jetbrains.kotlin:kotlin-stdlib:${Versions.kotlin}")
98+
implementation("androidx.appcompat:appcompat:${Versions.appCompat}")
99+
implementation("com.google.android.material:material:${Versions.materialDesign}")
100100
implementation("androidx.fragment:fragment-ktx:1.5.2")
101101
implementation("androidx.activity:activity-ktx:1.5.1")
102102
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.5.1")

app/src/main/java/me/rosuh/easywatermark/ui/MainViewModel.kt

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import me.rosuh.easywatermark.data.repo.TemplateRepository
3030
import me.rosuh.easywatermark.data.repo.UserConfigRepository
3131
import me.rosuh.easywatermark.data.repo.WaterMarkRepository
3232
import me.rosuh.easywatermark.ui.widget.WaterMarkImageView
33+
import me.rosuh.easywatermark.ui.widget.utils.WaterMarkShader
3334
import me.rosuh.easywatermark.utils.FileUtils.Companion.outPutFolderName
3435
import me.rosuh.easywatermark.utils.bitmap.calculateInSampleSize
3536
import me.rosuh.easywatermark.utils.bitmap.decodeBitmapFromUri
@@ -257,14 +258,14 @@ class MainViewModel @Inject constructor(
257258
imageInfo.scaleY = 1 / matrixValues[Matrix.MSCALE_X]
258259
val bitmapPaint = TextPaint().applyConfig(imageInfo, tmpConfig, isScale = false)
259260
val layoutPaint = Paint()
260-
layoutPaint.shader = when (waterMark.value?.markMode) {
261+
val shader = when (waterMark.value?.markMode) {
261262
WaterMarkRepository.MarkMode.Text -> {
262263
WaterMarkImageView.buildTextBitmapShader(
263264
imageInfo,
264265
waterMark.value!!,
265266
bitmapPaint,
266267
Dispatchers.IO
267-
)?.bitmapShader
268+
)
268269
}
269270
WaterMarkRepository.MarkMode.Image -> {
270271
val iconBitmapRect = decodeSampledBitmapFromResource(
@@ -288,7 +289,7 @@ class MainViewModel @Inject constructor(
288289
bitmapPaint,
289290
scale = true,
290291
Dispatchers.IO
291-
)?.bitmapShader
292+
)
292293
}
293294
null -> return@withContext Result.failure(
294295
null,
@@ -297,16 +298,29 @@ class MainViewModel @Inject constructor(
297298
)
298299
}
299300

301+
layoutPaint.shader = shader?.bitmapShader
302+
300303
if (imageInfo.obtainTileMode() == Shader.TileMode.CLAMP) {
301304
canvas.translate(
302305
0 + imageInfo.offsetX * mutableBitmap.width,
303306
0 + imageInfo.offsetY * mutableBitmap.height
304307
)
308+
canvas.drawRect(
309+
0f,
310+
0f,
311+
(shader?.width ?: 0).toFloat(),
312+
(shader?.height ?: 0).toFloat(),
313+
layoutPaint
314+
)
315+
} else {
316+
canvas.drawRect(
317+
0f,
318+
0f,
319+
mutableBitmap.width.toFloat(),
320+
mutableBitmap.height.toFloat(),
321+
layoutPaint
322+
)
305323
}
306-
canvas.drawRect(
307-
0f, 0f,
308-
mutableBitmap.width.toFloat(), mutableBitmap.height.toFloat(), layoutPaint
309-
)
310324

311325
return@withContext if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
312326
val imageCollection =

app/src/main/java/me/rosuh/easywatermark/ui/widget/WaterMarkImageView.kt

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -276,16 +276,23 @@ class WaterMarkImageView : androidx.appcompat.widget.AppCompatImageView, Corouti
276276
drawableBounds.left + curImageInfo.offsetX * drawableBounds.width(),
277277
drawableBounds.top + curImageInfo.offsetY * drawableBounds.height()
278278
)
279+
drawRect(
280+
0f,
281+
0f,
282+
(layoutShader?.width ?: 0).toFloat(),
283+
(layoutShader?.height ?: 0).toFloat(),
284+
layoutPaint
285+
)
279286
} else {
280287
translate(drawableBounds.left, drawableBounds.top)
288+
drawRect(
289+
0f,
290+
0f,
291+
drawableBounds.right - drawableBounds.left,
292+
drawableBounds.bottom - drawableBounds.top,
293+
layoutPaint
294+
)
281295
}
282-
drawRect(
283-
0f,
284-
0f,
285-
drawableBounds.right - drawableBounds.left,
286-
drawableBounds.bottom - drawableBounds.top,
287-
layoutPaint
288-
)
289296
}
290297
}
291298

@@ -572,10 +579,8 @@ class WaterMarkImageView : androidx.appcompat.widget.AppCompatImageView, Corouti
572579
}
573580
val tileMode = imageInfo.obtainTileMode()
574581
val showDebugRect = config.enableBounds
575-
val rawWidth =
576-
srcBitmap.width.toFloat().coerceAtLeast(1f).coerceAtMost(imageInfo.width.toFloat())
582+
val rawWidth = srcBitmap.width.toFloat().coerceAtLeast(1f)
577583
val rawHeight = srcBitmap.height.toFloat().coerceAtLeast(1f)
578-
.coerceAtMost(imageInfo.height.toFloat())
579584

580585
val maxSize = calculateMaxSize(rawHeight, rawWidth)
581586

@@ -691,9 +696,7 @@ class WaterMarkImageView : androidx.appcompat.widget.AppCompatImageView, Corouti
691696
}
692697

693698
val textWidth = staticLayout.width.toFloat().coerceAtLeast(1f)
694-
.coerceAtMost(imageInfo.width.toFloat())
695699
val textHeight = staticLayout.height.toFloat().coerceAtLeast(1f)
696-
.coerceAtMost(imageInfo.height.toFloat())
697700

698701
val radians = Math.toRadians(
699702
when (config.degree) {

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ buildscript {
88
}
99
dependencies {
1010
classpath("com.android.tools.build:gradle:7.3.0-rc01")
11-
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.0")
11+
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.kotlin}")
1212
classpath("org.jlleitschuh.gradle:ktlint-gradle:10.1.0")
1313
classpath("com.google.dagger:hilt-android-gradle-plugin:2.42")
1414
// NOTE: Do not place your application dependencies here; they belong

buildSrc/src/main/kotlin/Dependencies.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,7 @@ object ProductFlavors {
1919
}
2020

2121
object Versions {
22-
const val kotlin = "1.5.30-RC"
22+
const val kotlin = "1.7.10"
23+
const val appCompat = "1.5.0"
24+
const val materialDesign = "1.8.0-alpha01"
2325
}

cmonet/build.gradle.kts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ android {
3535

3636
dependencies {
3737

38-
implementation("androidx.core:core-ktx:1.7.0")
39-
implementation("androidx.appcompat:appcompat:1.4.1")
40-
implementation("com.google.android.material:material:1.6.0-alpha03")
38+
implementation("androidx.core:core-ktx:${Versions.kotlin}")
39+
implementation("androidx.appcompat:appcompat:${Versions.appCompat}")
40+
implementation("com.google.android.material:material:${Versions.materialDesign}")
4141
testImplementation("junit:junit:4.13.2")
4242
androidTestImplementation("androidx.test.ext:junit:1.1.3")
4343
androidTestImplementation("androidx.test.espresso:espresso-core:3.4.0")

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ org.gradle.jvmargs=-Xmx2048m
1616
# https://developer.android.com/topic/libraries/support-library/androidx-rn
1717
android.useAndroidX=true
1818
# Automatically convert third-party libraries to use AndroidX
19-
android.enableJetifier=true
19+
android.enableJetifier=false
2020
# Kotlin code style for this project: "official" or "obsolete":
2121
kotlin.code.style=official
2222
org.gradle.parallel=true

0 commit comments

Comments
 (0)