From dc16a7d916ee03f1508275be147f2e7764ced1d0 Mon Sep 17 00:00:00 2001 From: hyemdooly Date: Mon, 9 Oct 2023 21:22:36 +0900 Subject: [PATCH 01/28] =?UTF-8?q?feat:=20button=20bindingAdapter=EB=A1=9C?= =?UTF-8?q?=20isSelected=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 1 + .../java/woowacourse/paint/utils/BindingAdapter.kt | 12 ++++++++++++ build.gradle.kts | 1 + 3 files changed, 14 insertions(+) create mode 100644 app/src/main/java/woowacourse/paint/utils/BindingAdapter.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d07ba820..ee49ffc9 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,6 +1,7 @@ plugins { id("com.android.application") id("org.jetbrains.kotlin.android") + id("kotlin-kapt") } android { diff --git a/app/src/main/java/woowacourse/paint/utils/BindingAdapter.kt b/app/src/main/java/woowacourse/paint/utils/BindingAdapter.kt new file mode 100644 index 00000000..b23af66d --- /dev/null +++ b/app/src/main/java/woowacourse/paint/utils/BindingAdapter.kt @@ -0,0 +1,12 @@ +package woowacourse.paint.utils + +import android.widget.Button +import androidx.databinding.BindingAdapter + +object BindingAdapter { + @BindingAdapter("isSelected") + @JvmStatic + fun isSelected(button: Button, isSelected: Boolean) { + button.isSelected = isSelected + } +} diff --git a/build.gradle.kts b/build.gradle.kts index 547b25c8..d8627a2a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,6 +7,7 @@ plugins { val kotlinVersion = "1.8.10" kotlin("android") version kotlinVersion apply false kotlin("jvm") version kotlinVersion apply false + kotlin("kapt") version "1.9.10" apply false id("org.jlleitschuh.gradle.ktlint") version "10.3.0" apply false } From dee7ae14edde6855fbafadcc8d0ee6ad4ff5a826 Mon Sep 17 00:00:00 2001 From: hyemdooly Date: Mon, 9 Oct 2023 21:23:06 +0900 Subject: [PATCH 02/28] =?UTF-8?q?feat:=20=EC=84=A0=ED=83=9D=EB=90=9C=20?= =?UTF-8?q?=EB=B2=84=ED=8A=BC=20=EC=83=89=EA=B9=94=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/color/brush_selected.xml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 app/src/main/res/color/brush_selected.xml diff --git a/app/src/main/res/color/brush_selected.xml b/app/src/main/res/color/brush_selected.xml new file mode 100644 index 00000000..ee3d6ff0 --- /dev/null +++ b/app/src/main/res/color/brush_selected.xml @@ -0,0 +1,5 @@ + + + + + From 74f09cb4b6a8698d54641f88a5e73dfaa0f8999c Mon Sep 17 00:00:00 2001 From: hyemdooly Date: Mon, 9 Oct 2023 21:23:31 +0900 Subject: [PATCH 03/28] =?UTF-8?q?feat:=20=EB=B8=8C=EB=9F=AC=EC=89=AC=20?= =?UTF-8?q?=EC=9A=94=EC=86=8C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/woowacourse/paint/PaintChangingState.kt | 1 + app/src/main/java/woowacourse/paint/canvas/Brushes.kt | 5 +++++ app/src/main/res/values/strings.xml | 5 +++++ 3 files changed, 11 insertions(+) create mode 100644 app/src/main/java/woowacourse/paint/canvas/Brushes.kt diff --git a/app/src/main/java/woowacourse/paint/PaintChangingState.kt b/app/src/main/java/woowacourse/paint/PaintChangingState.kt index bb45f621..bafbe293 100644 --- a/app/src/main/java/woowacourse/paint/PaintChangingState.kt +++ b/app/src/main/java/woowacourse/paint/PaintChangingState.kt @@ -4,4 +4,5 @@ sealed class PaintChangingState { object Nothing : PaintChangingState() object ColorChanging : PaintChangingState() object WidthChanging : PaintChangingState() + object BrushChanging : PaintChangingState() } diff --git a/app/src/main/java/woowacourse/paint/canvas/Brushes.kt b/app/src/main/java/woowacourse/paint/canvas/Brushes.kt new file mode 100644 index 00000000..9b2f5186 --- /dev/null +++ b/app/src/main/java/woowacourse/paint/canvas/Brushes.kt @@ -0,0 +1,5 @@ +package woowacourse.paint.canvas + +enum class Brushes { + PEN, RECTANGLE, CIRCLE, ERASER +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0bded494..8b393621 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2,4 +2,9 @@ Paint 색상 변경 굵기 변경 + 브러쉬 변경 + + 직사각형 + + 지우개 From 4e324fd5843197c649fb6dca12d7b16852274640 Mon Sep 17 00:00:00 2001 From: hyemdooly Date: Mon, 9 Oct 2023 21:29:52 +0900 Subject: [PATCH 04/28] =?UTF-8?q?feat:=20=EB=B8=8C=EB=9F=AC=EC=89=AC=20?= =?UTF-8?q?=EC=84=A0=ED=83=9D=20=EA=B8=B0=EB=8A=A5=20UI=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/woowacourse/paint/MainViewModel.kt | 17 +++++ .../paint/canvas/{Brushes.kt => Brush.kt} | 2 +- app/src/main/res/layout/activity_main.xml | 73 ++++++++++++++++++- 3 files changed, 87 insertions(+), 5 deletions(-) rename app/src/main/java/woowacourse/paint/canvas/{Brushes.kt => Brush.kt} (77%) diff --git a/app/src/main/java/woowacourse/paint/MainViewModel.kt b/app/src/main/java/woowacourse/paint/MainViewModel.kt index 4f3481e1..72daf508 100644 --- a/app/src/main/java/woowacourse/paint/MainViewModel.kt +++ b/app/src/main/java/woowacourse/paint/MainViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.Transformations import androidx.lifecycle.ViewModel +import woowacourse.paint.canvas.Brush import woowacourse.paint.canvas.PaletteColor import woowacourse.paint.model.ColorUiModel @@ -18,6 +19,10 @@ class MainViewModel : ViewModel() { val colors: LiveData> get() = _colors + private var _selectedBrush = MutableLiveData(Brush.PEN) + val selectedBrush: LiveData + get() = _selectedBrush + val selectedColor: LiveData get() = Transformations.map(_colors) { colors -> colors.firstOrNull { it.isPicked }?.color ?: DEFAULT_SELECTED_COLOR @@ -27,6 +32,14 @@ class MainViewModel : ViewModel() { val width: LiveData get() = _width + fun setBrushSettingState() { + if (_paintChangingState.value == PaintChangingState.BrushChanging) { + _paintChangingState.value = PaintChangingState.Nothing + return + } + _paintChangingState.value = PaintChangingState.BrushChanging + } + fun setColorSettingState() { if (_paintChangingState.value == PaintChangingState.ColorChanging) { _paintChangingState.value = PaintChangingState.Nothing @@ -43,6 +56,10 @@ class MainViewModel : ViewModel() { _paintChangingState.value = PaintChangingState.WidthChanging } + fun pickBrush(brush: Brush) { + _selectedBrush.value = brush + } + fun pickColor(model: ColorUiModel) { val colors = _colors.value ?: return _colors.value = colors.map { it.copy(isPicked = it.color == model.color) } diff --git a/app/src/main/java/woowacourse/paint/canvas/Brushes.kt b/app/src/main/java/woowacourse/paint/canvas/Brush.kt similarity index 77% rename from app/src/main/java/woowacourse/paint/canvas/Brushes.kt rename to app/src/main/java/woowacourse/paint/canvas/Brush.kt index 9b2f5186..804f7ef8 100644 --- a/app/src/main/java/woowacourse/paint/canvas/Brushes.kt +++ b/app/src/main/java/woowacourse/paint/canvas/Brush.kt @@ -1,5 +1,5 @@ package woowacourse.paint.canvas -enum class Brushes { +enum class Brush { PEN, RECTANGLE, CIRCLE, ERASER } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 11529f90..676e110e 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -9,6 +9,8 @@ + + @@ -43,11 +45,75 @@ android:orientation="horizontal" android:visibility="@{viewModel.paintChangingState instanceof PaintChangingState.ColorChanging ? View.VISIBLE : View.GONE}" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" + app:layout_constraintBottom_toTopOf="@id/ll_brushes" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@id/rs_thickness_changer" tools:listitem="@layout/item_color_palette" /> + + +