From a9ac7634cdbbbbf517bb6edaa52f4f81a07d4842 Mon Sep 17 00:00:00 2001 From: "dima.avdeev" <99798741+dima-avdeev-jb@users.noreply.github.com> Date: Thu, 22 Dec 2022 22:18:20 +0300 Subject: [PATCH] Add uikit to experimental/examples/imageviewer (#2571) --- artwork/imageviewerrepo/pictures.json | 15 + artwork/imageviewerrepo/small/1.jpg | Bin 0 -> 31640 bytes artwork/imageviewerrepo/small/10.jpg | Bin 0 -> 25623 bytes artwork/imageviewerrepo/small/11.jpg | Bin 0 -> 29792 bytes artwork/imageviewerrepo/small/12.jpg | Bin 0 -> 35783 bytes artwork/imageviewerrepo/small/13.jpg | Bin 0 -> 40818 bytes artwork/imageviewerrepo/small/2.jpg | Bin 0 -> 19408 bytes artwork/imageviewerrepo/small/3.jpg | Bin 0 -> 37904 bytes artwork/imageviewerrepo/small/4.jpg | Bin 0 -> 37395 bytes artwork/imageviewerrepo/small/5.jpg | Bin 0 -> 15048 bytes artwork/imageviewerrepo/small/6.jpg | Bin 0 -> 48366 bytes artwork/imageviewerrepo/small/7.jpg | Bin 0 -> 50261 bytes artwork/imageviewerrepo/small/8.jpg | Bin 0 -> 29756 bytes artwork/imageviewerrepo/small/9.jpg | Bin 0 -> 26145 bytes experimental/examples/imageviewer/.gitignore | 6 + .../{desktop.run.xml => desktopApp.run.xml} | 8 +- .../.run/iosApp (AndroidStudio).run.xml | 7 + .../examples/imageviewer/.run/iosApp.run.xml | 11 + experimental/examples/imageviewer/README.md | 26 +- .../imageviewer/android/build.gradle.kts | 26 -- .../java/example/imageviewer/MainActivity.kt | 23 - .../imageviewer/androidApp/build.gradle.kts | 33 ++ .../src/main/AndroidManifest.xml | 1 - .../java/example/imageviewer/MainActivity.kt | 15 + .../examples/imageviewer/build.gradle.kts | 1 + .../imageviewer/common/build.gradle.kts | 54 --- .../src/androidMain/AndroidManifest.xml | 2 - .../example/imageviewer/core/BitmapFilter.kt | 7 - .../imageviewer/model/AndroidContentState.kt | 383 ----------------- .../example/imageviewer/model/ImageHandler.kt | 131 ------ .../example/imageviewer/model/Picture.kt | 12 - .../model/filtration/BlurFilter.kt | 13 - .../model/filtration/EmptyFilter.kt | 12 - .../model/filtration/FiltersManager.kt | 54 --- .../model/filtration/GrayScaleFilter.kt | 12 - .../model/filtration/PixelFilter.kt | 12 - .../example/imageviewer/style/Decoration.kt | 38 -- .../example/imageviewer/utils/Caching.kt | 52 --- .../example/imageviewer/utils/Coroutines.kt | 9 - .../example/imageviewer/utils/GraphicsMath.kt | 195 --------- .../kotlin/example/imageviewer/view/AppUI.kt | 40 -- .../imageviewer/view/FullscreenImage.kt | 197 --------- .../example/imageviewer/view/MainScreen.kt | 218 ---------- .../res/drawable/filter_unknown.png | Bin 11150 -> 0 bytes .../example/imageviewer/core/EventLocker.kt | 18 - .../example/imageviewer/core/Repository.kt | 5 - .../imageviewer/model/ImageRepository.kt | 33 -- .../example/imageviewer/model/Miniatures.kt | 41 -- .../example/imageviewer/model/ScreenType.kt | 23 - .../example/imageviewer/style/Palette.kt | 16 - .../example/imageviewer/utils/Coroutines.kt | 7 - .../example/imageviewer/utils/Network.kt | 37 -- .../example/imageviewer/view/Clickable.kt | 21 - .../example/imageviewer/view/Draggable.kt | 88 ---- .../example/imageviewer/view/Scalable.kt | 47 --- .../example/imageviewer/view/SplashUI.kt | 27 -- .../example/imageviewer/core/BitmapFilter.kt | 7 - .../imageviewer/model/DesktopContentState.kt | 362 ---------------- .../example/imageviewer/model/ImageHandler.kt | 130 ------ .../example/imageviewer/model/Picture.kt | 12 - .../model/filtration/BlurFilter.kt | 12 - .../model/filtration/EmptyFilter.kt | 12 - .../model/filtration/FiltersManager.kt | 53 --- .../model/filtration/GrayScaleFilter.kt | 12 - .../model/filtration/PixelFilter.kt | 12 - .../example/imageviewer/style/Decoration.kt | 42 -- .../example/imageviewer/utils/Caching.kt | 53 --- .../example/imageviewer/utils/Coroutines.kt | 9 - .../example/imageviewer/utils/GraphicsMath.kt | 206 --------- .../kotlin/example/imageviewer/view/AppUI.kt | 40 -- .../imageviewer/view/FullscreenImage.kt | 207 --------- .../example/imageviewer/view/MainScreen.kt | 250 ----------- .../example/imageviewer/view/Zoomable.kt | 67 --- .../src/desktopMain/resources/images/back.png | Bin 6035 -> 0 bytes .../desktopMain/resources/images/blur_off.png | Bin 36186 -> 0 bytes .../desktopMain/resources/images/blur_on.png | Bin 38425 -> 0 bytes .../src/desktopMain/resources/images/dots.png | Bin 2242 -> 0 bytes .../desktopMain/resources/images/empty.png | Bin 50553 -> 0 bytes .../resources/images/filter_unknown.png | Bin 11150 -> 0 bytes .../resources/images/grayscale_off.png | Bin 9280 -> 0 bytes .../resources/images/grayscale_on.png | Bin 10361 -> 0 bytes .../resources/images/pixel_off.png | Bin 6916 -> 0 bytes .../desktopMain/resources/images/pixel_on.png | Bin 8144 -> 0 bytes .../desktopMain/resources/images/refresh.png | Bin 8353 -> 0 bytes .../kotlin/example/imageviewer/Main.kt | 59 --- .../{desktop => desktopApp}/build.gradle.kts | 6 +- .../{desktop => desktopApp}/rules.pro | 0 .../kotlin/example/imageviewer/Main.kt | 11 + .../examples/imageviewer/gradle.properties | 36 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 58695 -> 60756 bytes experimental/examples/imageviewer/gradlew | 263 +++++++----- experimental/examples/imageviewer/gradlew.bat | 33 +- .../iosApp/Configuration/TeamId.xcconfig | 1 + .../Imageviewer.xcodeproj/project.pbxproj | 398 ++++++++++++++++++ .../examples/imageviewer/iosApp/Podfile | 5 + .../imageviewer/iosApp/iosApp/Info.plist | 48 +++ .../imageviewer/iosApp/iosApp/iosApp.swift | 15 + .../imageviewer/run-configurations.png | Bin 0 -> 15762 bytes .../examples/imageviewer/settings.gradle.kts | 8 +- .../imageviewer/shared/build.gradle.kts | 84 ++++ .../src/androidMain/AndroidManifest.xml | 2 + .../imageviewer/ImageBitmap.android.kt | 12 + .../model/filtration/BlurFilter.kt | 14 + .../model/filtration/GrayScaleFilter.kt | 13 + .../model/filtration/PixelFilter.kt | 12 + .../imageviewer/utils/GraphicsMath.android.kt | 77 ++++ .../imageviewer/view/ImageViewer.android.kt | 78 ++++ .../imageviewer/view/PreviewImage.android.kt | 9 + .../imageviewer/view/ScalableImage.android.kt | 8 + .../view/ScrollableColumn.android.kt | 8 + .../imageviewer/view/Tooltip.android.kt | 9 + .../res/mipmap-anydpi-v26/ic_imageviewer.xml | 0 .../ic_imageviewer_round.xml | 0 .../res/mipmap-hdpi/ic_imageviewer.png | Bin .../mipmap-hdpi/ic_imageviewer_background.png | Bin .../mipmap-hdpi/ic_imageviewer_foreground.png | Bin .../res/mipmap-hdpi/ic_imageviewer_round.png | Bin .../res/mipmap-mdpi/ic_imageviewer.png | Bin .../mipmap-mdpi/ic_imageviewer_background.png | Bin .../mipmap-mdpi/ic_imageviewer_foreground.png | Bin .../res/mipmap-mdpi/ic_imageviewer_round.png | Bin .../res/mipmap-xhdpi/ic_imageviewer.png | Bin .../ic_imageviewer_background.png | Bin .../ic_imageviewer_foreground.png | Bin .../res/mipmap-xhdpi/ic_imageviewer_round.png | Bin .../res/mipmap-xxhdpi/ic_imageviewer.png | Bin .../ic_imageviewer_background.png | Bin .../ic_imageviewer_foreground.png | Bin .../mipmap-xxhdpi/ic_imageviewer_round.png | Bin .../res/mipmap-xxxhdpi/ic_imageviewer.png | Bin .../ic_imageviewer_background.png | Bin .../ic_imageviewer_foreground.png | Bin .../mipmap-xxxhdpi/ic_imageviewer_round.png | Bin .../src/androidMain/res/values-ru/strings.xml | 1 + .../src/androidMain/res/values/strings.xml | 1 + .../example/imageviewer/Dependencies.kt | 80 ++++ .../example/imageviewer/ImageBitmap.common.kt | 5 + .../example/imageviewer/ImageViewer.common.kt | 35 ++ .../example/imageviewer/core/BitmapFilter.kt | 7 + .../example/imageviewer/core/FilterType.kt | 0 .../example/imageviewer/model/Config.kt | 7 + .../imageviewer/model/ContentRepository.kt | 23 + .../example/imageviewer/model/Picture.kt | 11 + .../imageviewer/model/ScalableState.kt | 77 ++++ .../kotlin/example/imageviewer/model/State.kt | 85 ++++ .../example/imageviewer/style/Palette.kt | 41 ++ .../imageviewer/view/FullscreenImage.kt | 227 ++++++++++ .../example/imageviewer/view/LoadingScreen.kt | 24 +- .../example/imageviewer/view/MainScreen.kt | 85 ++++ .../example/imageviewer/view/Miniature.kt | 71 ++++ .../imageviewer/view/PreviewImage.common.kt | 53 +++ .../imageviewer/view/ScalableImage.common.kt | 25 ++ .../view/ScrollableColumn.common.kt | 18 + .../kotlin/example/imageviewer/view/Toast.kt | 45 +- .../imageviewer/view/Tooltip.common.kt | 9 + .../src/commonMain/resources}/back.png | Bin .../src/commonMain/resources}/blur_off.png | Bin .../src/commonMain/resources}/blur_on.png | Bin .../src/commonMain/resources}/dots.png | Bin .../src/commonMain/resources}/empty.png | Bin .../commonMain/resources}/grayscale_off.png | Bin .../commonMain/resources}/grayscale_on.png | Bin .../resources}/ic_imageviewer_round.png | Bin .../src/commonMain/resources}/icon-linux.png | Bin .../src/commonMain/resources}/icon-mac.icns | Bin .../commonMain/resources}/icon-windows.ico | Bin .../src/commonMain/resources}/pixel_off.png | Bin .../src/commonMain/resources}/pixel_on.png | Bin .../src/commonMain/resources}/refresh.png | Bin .../imageviewer/ImageBitmap.desktop.kt | 8 + .../kotlin/example/imageviewer/R.kt | 0 .../model/filtration/BlurFilter.kt | 14 + .../model/filtration/GrayScaleFilter.kt | 14 + .../model/filtration/PixelFilter.kt | 14 + .../example/imageviewer/utils/Caching.kt | 76 ++++ .../example/imageviewer/utils/GraphicsMath.kt | 96 +++++ .../imageviewer/view/ImageViewer.desktop.kt | 120 ++++++ .../imageviewer/view/PreviewImage.desktop.kt | 6 + .../imageviewer/view/ScalaImage.desktop.kt | 29 ++ .../view/ScrollableColumn.desktop.kt | 29 ++ .../imageviewer/view/Tooltip.desktop.kt} | 9 +- .../example/imageviewer/ImageBitmap.ios.kt | 7 + .../example/imageviewer/ImageViewer.ios.kt | 83 ++++ .../kotlin/example/imageviewer/main.ios.kt | 21 + .../imageviewer/view/PreviewImage.ios.kt | 6 + .../imageviewer/view/ScrollableColumn.ios.kt | 8 + .../example/imageviewer/view/Tooltip.ios.kt | 12 + .../example/imageviewer/view/addUserInput.kt | 8 + 188 files changed, 2553 insertions(+), 3608 deletions(-) create mode 100644 artwork/imageviewerrepo/pictures.json create mode 100644 artwork/imageviewerrepo/small/1.jpg create mode 100644 artwork/imageviewerrepo/small/10.jpg create mode 100644 artwork/imageviewerrepo/small/11.jpg create mode 100644 artwork/imageviewerrepo/small/12.jpg create mode 100644 artwork/imageviewerrepo/small/13.jpg create mode 100644 artwork/imageviewerrepo/small/2.jpg create mode 100644 artwork/imageviewerrepo/small/3.jpg create mode 100644 artwork/imageviewerrepo/small/4.jpg create mode 100644 artwork/imageviewerrepo/small/5.jpg create mode 100644 artwork/imageviewerrepo/small/6.jpg create mode 100644 artwork/imageviewerrepo/small/7.jpg create mode 100644 artwork/imageviewerrepo/small/8.jpg create mode 100644 artwork/imageviewerrepo/small/9.jpg rename experimental/examples/imageviewer/.run/{desktop.run.xml => desktopApp.run.xml} (63%) mode change 100755 => 100644 create mode 100644 experimental/examples/imageviewer/.run/iosApp (AndroidStudio).run.xml create mode 100644 experimental/examples/imageviewer/.run/iosApp.run.xml delete mode 100755 experimental/examples/imageviewer/android/build.gradle.kts delete mode 100755 experimental/examples/imageviewer/android/src/main/java/example/imageviewer/MainActivity.kt create mode 100755 experimental/examples/imageviewer/androidApp/build.gradle.kts rename experimental/examples/imageviewer/{android => androidApp}/src/main/AndroidManifest.xml (91%) create mode 100755 experimental/examples/imageviewer/androidApp/src/main/java/example/imageviewer/MainActivity.kt mode change 100755 => 100644 experimental/examples/imageviewer/build.gradle.kts delete mode 100755 experimental/examples/imageviewer/common/build.gradle.kts delete mode 100755 experimental/examples/imageviewer/common/src/androidMain/AndroidManifest.xml delete mode 100755 experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/core/BitmapFilter.kt delete mode 100644 experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/AndroidContentState.kt delete mode 100755 experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/ImageHandler.kt delete mode 100755 experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/Picture.kt delete mode 100755 experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/filtration/BlurFilter.kt delete mode 100755 experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/filtration/EmptyFilter.kt delete mode 100755 experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/filtration/FiltersManager.kt delete mode 100755 experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/filtration/GrayScaleFilter.kt delete mode 100755 experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/filtration/PixelFilter.kt delete mode 100755 experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/style/Decoration.kt delete mode 100755 experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/utils/Caching.kt delete mode 100644 experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/utils/Coroutines.kt delete mode 100755 experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/utils/GraphicsMath.kt delete mode 100755 experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/view/AppUI.kt delete mode 100644 experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/view/FullscreenImage.kt delete mode 100755 experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/view/MainScreen.kt delete mode 100755 experimental/examples/imageviewer/common/src/androidMain/res/drawable/filter_unknown.png delete mode 100755 experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/core/EventLocker.kt delete mode 100755 experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/core/Repository.kt delete mode 100755 experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/model/ImageRepository.kt delete mode 100755 experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/model/Miniatures.kt delete mode 100755 experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/model/ScreenType.kt delete mode 100755 experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/style/Palette.kt delete mode 100644 experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/utils/Coroutines.kt delete mode 100755 experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/utils/Network.kt delete mode 100755 experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/view/Clickable.kt delete mode 100755 experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/view/Draggable.kt delete mode 100755 experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/view/Scalable.kt delete mode 100644 experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/view/SplashUI.kt delete mode 100755 experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/core/BitmapFilter.kt delete mode 100644 experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/DesktopContentState.kt delete mode 100755 experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/ImageHandler.kt delete mode 100755 experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/Picture.kt delete mode 100755 experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/filtration/BlurFilter.kt delete mode 100755 experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/filtration/EmptyFilter.kt delete mode 100755 experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/filtration/FiltersManager.kt delete mode 100755 experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/filtration/GrayScaleFilter.kt delete mode 100755 experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/filtration/PixelFilter.kt delete mode 100755 experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/style/Decoration.kt delete mode 100755 experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/utils/Caching.kt delete mode 100644 experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/utils/Coroutines.kt delete mode 100755 experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/utils/GraphicsMath.kt delete mode 100755 experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/view/AppUI.kt delete mode 100644 experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/view/FullscreenImage.kt delete mode 100755 experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/view/MainScreen.kt delete mode 100644 experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/view/Zoomable.kt delete mode 100755 experimental/examples/imageviewer/common/src/desktopMain/resources/images/back.png delete mode 100755 experimental/examples/imageviewer/common/src/desktopMain/resources/images/blur_off.png delete mode 100755 experimental/examples/imageviewer/common/src/desktopMain/resources/images/blur_on.png delete mode 100755 experimental/examples/imageviewer/common/src/desktopMain/resources/images/dots.png delete mode 100755 experimental/examples/imageviewer/common/src/desktopMain/resources/images/empty.png delete mode 100755 experimental/examples/imageviewer/common/src/desktopMain/resources/images/filter_unknown.png delete mode 100755 experimental/examples/imageviewer/common/src/desktopMain/resources/images/grayscale_off.png delete mode 100755 experimental/examples/imageviewer/common/src/desktopMain/resources/images/grayscale_on.png delete mode 100755 experimental/examples/imageviewer/common/src/desktopMain/resources/images/pixel_off.png delete mode 100755 experimental/examples/imageviewer/common/src/desktopMain/resources/images/pixel_on.png delete mode 100755 experimental/examples/imageviewer/common/src/desktopMain/resources/images/refresh.png delete mode 100644 experimental/examples/imageviewer/desktop/src/jvmMain/kotlin/example/imageviewer/Main.kt rename experimental/examples/imageviewer/{desktop => desktopApp}/build.gradle.kts (84%) rename experimental/examples/imageviewer/{desktop => desktopApp}/rules.pro (100%) create mode 100644 experimental/examples/imageviewer/desktopApp/src/jvmMain/kotlin/example/imageviewer/Main.kt mode change 100755 => 100644 experimental/examples/imageviewer/gradle.properties create mode 100644 experimental/examples/imageviewer/iosApp/Configuration/TeamId.xcconfig create mode 100644 experimental/examples/imageviewer/iosApp/Imageviewer.xcodeproj/project.pbxproj create mode 100644 experimental/examples/imageviewer/iosApp/Podfile create mode 100644 experimental/examples/imageviewer/iosApp/iosApp/Info.plist create mode 100644 experimental/examples/imageviewer/iosApp/iosApp/iosApp.swift create mode 100644 experimental/examples/imageviewer/run-configurations.png mode change 100755 => 100644 experimental/examples/imageviewer/settings.gradle.kts create mode 100755 experimental/examples/imageviewer/shared/build.gradle.kts create mode 100755 experimental/examples/imageviewer/shared/src/androidMain/AndroidManifest.xml create mode 100644 experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/ImageBitmap.android.kt create mode 100755 experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/model/filtration/BlurFilter.kt create mode 100755 experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/model/filtration/GrayScaleFilter.kt create mode 100755 experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/model/filtration/PixelFilter.kt create mode 100644 experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/utils/GraphicsMath.android.kt create mode 100755 experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/view/ImageViewer.android.kt create mode 100644 experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/view/PreviewImage.android.kt create mode 100644 experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/view/ScalableImage.android.kt create mode 100644 experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/view/ScrollableColumn.android.kt create mode 100644 experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/view/Tooltip.android.kt rename experimental/examples/imageviewer/{common => shared}/src/androidMain/res/mipmap-anydpi-v26/ic_imageviewer.xml (100%) rename experimental/examples/imageviewer/{common => shared}/src/androidMain/res/mipmap-anydpi-v26/ic_imageviewer_round.xml (100%) rename experimental/examples/imageviewer/{common => shared}/src/androidMain/res/mipmap-hdpi/ic_imageviewer.png (100%) rename experimental/examples/imageviewer/{common => shared}/src/androidMain/res/mipmap-hdpi/ic_imageviewer_background.png (100%) rename experimental/examples/imageviewer/{common => shared}/src/androidMain/res/mipmap-hdpi/ic_imageviewer_foreground.png (100%) rename experimental/examples/imageviewer/{common => shared}/src/androidMain/res/mipmap-hdpi/ic_imageviewer_round.png (100%) rename experimental/examples/imageviewer/{common => shared}/src/androidMain/res/mipmap-mdpi/ic_imageviewer.png (100%) rename experimental/examples/imageviewer/{common => shared}/src/androidMain/res/mipmap-mdpi/ic_imageviewer_background.png (100%) rename experimental/examples/imageviewer/{common => shared}/src/androidMain/res/mipmap-mdpi/ic_imageviewer_foreground.png (100%) rename experimental/examples/imageviewer/{common => shared}/src/androidMain/res/mipmap-mdpi/ic_imageviewer_round.png (100%) rename experimental/examples/imageviewer/{common => shared}/src/androidMain/res/mipmap-xhdpi/ic_imageviewer.png (100%) rename experimental/examples/imageviewer/{common => shared}/src/androidMain/res/mipmap-xhdpi/ic_imageviewer_background.png (100%) rename experimental/examples/imageviewer/{common => shared}/src/androidMain/res/mipmap-xhdpi/ic_imageviewer_foreground.png (100%) rename experimental/examples/imageviewer/{common => shared}/src/androidMain/res/mipmap-xhdpi/ic_imageviewer_round.png (100%) rename experimental/examples/imageviewer/{common => shared}/src/androidMain/res/mipmap-xxhdpi/ic_imageviewer.png (100%) rename experimental/examples/imageviewer/{common => shared}/src/androidMain/res/mipmap-xxhdpi/ic_imageviewer_background.png (100%) rename experimental/examples/imageviewer/{common => shared}/src/androidMain/res/mipmap-xxhdpi/ic_imageviewer_foreground.png (100%) rename experimental/examples/imageviewer/{common => shared}/src/androidMain/res/mipmap-xxhdpi/ic_imageviewer_round.png (100%) rename experimental/examples/imageviewer/{common => shared}/src/androidMain/res/mipmap-xxxhdpi/ic_imageviewer.png (100%) rename experimental/examples/imageviewer/{common => shared}/src/androidMain/res/mipmap-xxxhdpi/ic_imageviewer_background.png (100%) rename experimental/examples/imageviewer/{common => shared}/src/androidMain/res/mipmap-xxxhdpi/ic_imageviewer_foreground.png (100%) rename experimental/examples/imageviewer/{common => shared}/src/androidMain/res/mipmap-xxxhdpi/ic_imageviewer_round.png (100%) rename experimental/examples/imageviewer/{common => shared}/src/androidMain/res/values-ru/strings.xml (95%) rename experimental/examples/imageviewer/{common => shared}/src/androidMain/res/values/strings.xml (93%) create mode 100644 experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/Dependencies.kt create mode 100644 experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/ImageBitmap.common.kt create mode 100644 experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/ImageViewer.common.kt create mode 100755 experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/core/BitmapFilter.kt rename experimental/examples/imageviewer/{common => shared}/src/commonMain/kotlin/example/imageviewer/core/FilterType.kt (100%) create mode 100644 experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/model/Config.kt create mode 100644 experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/model/ContentRepository.kt create mode 100644 experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/model/Picture.kt create mode 100644 experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/model/ScalableState.kt create mode 100644 experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/model/State.kt create mode 100755 experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/style/Palette.kt create mode 100644 experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/FullscreenImage.kt rename experimental/examples/imageviewer/{common => shared}/src/commonMain/kotlin/example/imageviewer/view/LoadingScreen.kt (52%) create mode 100755 experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/MainScreen.kt create mode 100644 experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/Miniature.kt create mode 100644 experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/PreviewImage.common.kt create mode 100644 experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/ScalableImage.common.kt create mode 100644 experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/ScrollableColumn.common.kt rename experimental/examples/imageviewer/{common/src/desktopMain => shared/src/commonMain}/kotlin/example/imageviewer/view/Toast.kt (53%) create mode 100644 experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/Tooltip.common.kt rename experimental/examples/imageviewer/{common/src/androidMain/res/drawable => shared/src/commonMain/resources}/back.png (100%) rename experimental/examples/imageviewer/{common/src/androidMain/res/drawable => shared/src/commonMain/resources}/blur_off.png (100%) rename experimental/examples/imageviewer/{common/src/androidMain/res/drawable => shared/src/commonMain/resources}/blur_on.png (100%) rename experimental/examples/imageviewer/{common/src/androidMain/res/drawable => shared/src/commonMain/resources}/dots.png (100%) rename experimental/examples/imageviewer/{common/src/androidMain/res/drawable => shared/src/commonMain/resources}/empty.png (100%) rename experimental/examples/imageviewer/{common/src/androidMain/res/drawable => shared/src/commonMain/resources}/grayscale_off.png (100%) rename experimental/examples/imageviewer/{common/src/androidMain/res/drawable => shared/src/commonMain/resources}/grayscale_on.png (100%) rename experimental/examples/imageviewer/{common/src/desktopMain/resources/images => shared/src/commonMain/resources}/ic_imageviewer_round.png (100%) rename experimental/examples/imageviewer/{common/src/desktopMain/resources/images => shared/src/commonMain/resources}/icon-linux.png (100%) rename experimental/examples/imageviewer/{common/src/desktopMain/resources/images => shared/src/commonMain/resources}/icon-mac.icns (100%) rename experimental/examples/imageviewer/{common/src/desktopMain/resources/images => shared/src/commonMain/resources}/icon-windows.ico (100%) rename experimental/examples/imageviewer/{common/src/androidMain/res/drawable => shared/src/commonMain/resources}/pixel_off.png (100%) rename experimental/examples/imageviewer/{common/src/androidMain/res/drawable => shared/src/commonMain/resources}/pixel_on.png (100%) rename experimental/examples/imageviewer/{common/src/androidMain/res/drawable => shared/src/commonMain/resources}/refresh.png (100%) create mode 100644 experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/ImageBitmap.desktop.kt rename experimental/examples/imageviewer/{common => shared}/src/desktopMain/kotlin/example/imageviewer/R.kt (100%) create mode 100755 experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/model/filtration/BlurFilter.kt create mode 100755 experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/model/filtration/GrayScaleFilter.kt create mode 100755 experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/model/filtration/PixelFilter.kt create mode 100755 experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/utils/Caching.kt create mode 100755 experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/utils/GraphicsMath.kt create mode 100755 experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/view/ImageViewer.desktop.kt create mode 100644 experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/view/PreviewImage.desktop.kt create mode 100644 experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/view/ScalaImage.desktop.kt create mode 100644 experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/view/ScrollableColumn.desktop.kt rename experimental/examples/imageviewer/{common/src/desktopMain/kotlin/example/imageviewer/view/Tooltip.kt => shared/src/desktopMain/kotlin/example/imageviewer/view/Tooltip.desktop.kt} (91%) create mode 100644 experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/ImageBitmap.ios.kt create mode 100755 experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/ImageViewer.ios.kt create mode 100644 experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/main.ios.kt create mode 100644 experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/view/PreviewImage.ios.kt create mode 100644 experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/view/ScrollableColumn.ios.kt create mode 100644 experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/view/Tooltip.ios.kt create mode 100644 experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/view/addUserInput.kt diff --git a/artwork/imageviewerrepo/pictures.json b/artwork/imageviewerrepo/pictures.json new file mode 100644 index 0000000000..adecca674d --- /dev/null +++ b/artwork/imageviewerrepo/pictures.json @@ -0,0 +1,15 @@ +[ + {"big": "1.jpg", "small": "small/1.jpg"}, + {"big": "2.jpg", "small": "small/2.jpg"}, + {"big": "3.jpg", "small": "small/3.jpg"}, + {"big": "4.jpg", "small": "small/4.jpg"}, + {"big": "5.jpg", "small": "small/5.jpg"}, + {"big": "6.jpg", "small": "small/6.jpg"}, + {"big": "7.jpg", "small": "small/7.jpg"}, + {"big": "8.jpg", "small": "small/8.jpg"}, + {"big": "9.jpg", "small": "small/9.jpg"}, + {"big": "10.jpg", "small": "small/10.jpg"}, + {"big": "11.jpg", "small": "small/11.jpg"}, + {"big": "12.jpg", "small": "small/12.jpg"}, + {"big": "13.jpg", "small": "small/13.jpg"} +] diff --git a/artwork/imageviewerrepo/small/1.jpg b/artwork/imageviewerrepo/small/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1543e7e33811b3bc2323c760eec81fae48f8981b GIT binary patch literal 31640 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ν07x-;>mZ^ny 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

YPfp* zb`+;8hdcYXC2q8ZkKPa%9$6g5Yx3zy+c>Ks$Ng3c;cG|y>A6!A?6D_z^wSD39sm((;+YyGZ3RH3Z56bsX8|j7B|F%}GC#%~XS% zrp-IOKXPT`Bt>p=3#x!AlR_Fzy%Il51KAR$HkF!4x_2z8=mg}Ecz)kxywv+_ zdWF*QJ-^1NYB~l6%H{6hd|nG!eKD3`X7qa3SUlUT zj0qL#y!mhjJyyG7ud6^K%zn?$Gea2_Xd!K|nHy>5S z+>wR(c~3MdH5=PX?mcj7_{QwYtIvX^@76}aqp&QhUZtUZpiv2l;2oWBSo$)`DjV#I zTTm~@tME(@@?nFv55L?-&kQtHcO`!hOa%zPS*Y=7^HkDw(786Qke(e$B zCh$YSdqDM#zjrwK>=}$`%ClZyTt`$hxF7Wb?Cmm!`9^K80l%{vGuU;{-2q0PW8-9e^`440cg-k4(7^uH$722M5%?9RlpaGLr$73_k1f1GTpi3%vs_q4q_#FL7p?egfMZ2z!vwkC_hq+hcEi}8%<^24s52llF2E^I9`DO%z@ zy~@qPM+rzs%~2iON_$`^Mp=is)XR$Eq^d94=;|97>%v?@;mCmxPt?2#EWa)hQX(}UP5tIBiZSaiG;T={3QQv$& zh?iWlI9Q`siORd@$wpefG^JsqvZ{xWI;-!>r)La=9{%FYbT;9_0=?GCl7kmqaz2@C zL_tXoHcerRkCH_UaUd;+BhT#j_Bg2`W~~*NOE>HT27mOmn?a|17t>aHE2HAR^#$Wq zC2pxV5!l7HqqQ&l#RXc@&U(ZdiFDuypRmWWB%i2k)s6(xKJ$XgX&c*V&@LLGzhDg{ zm3MGntk8|++%XvXAo>GVCx|>d_fC&V>8;Sfgqfj!hXsiRRUM1*BG!MbpS;F0KO_a`HFWxAM zud0AHR$t7!y!K|Wt#JN%>r+-)^=39Ml~Tb2%l=nh!s_afJ14waf>T;u_>6FR@>9mK zut1oy8zc!`O?jnY7!;{1v^OxTm@JD0A9@msH+$!7X#Rb{icp{PO1YN}pKT_K_3Yat zhwZ}&>E8avI5sR*tCEKyAdA##82Gh<@LRtJS&!7r*RYvzsI!HZ%uSTt{JnDWU^syo z(7I)xo^ghx*)Z^IroVMfO?d)iPA+p0Oliz-J6~9h#NH&%SHv&XP;u4J!1!>y4}B7A zgXZ0>!N#lN_O*_68vKJV1;S^31Qu#F$e3l!4M>go^L9cf)6a}?(u=%4Ub)@nyfb1M z?F8lcps2$yYj=Rdu)7>_NMg$CbocQy!*?{(x`?Mz8PmF^83hRJ;e|@zrU_C9b;u>1 ze>DfAT3Zh5G5)TJ&y~7gOr4dKrGI5vRyAx+@|~UTWg-f*GYZN)C5H{SF*|!1kwe(S zI#G=ullaAz4aR#^t!?JndR2!4+^Nl%yc1id1ghR;Dp#gwiewoI$9?_-~X zEMK_qf#61xm0Z_GiD`#x=aX~TaD_GxzC!KGP|bG+96dSXvey+U*JtAs>g9;jTw+iC zm~XK3Mq^K`^W&%bhOS->5n`i9!F8_;?LW&mff*Y6Af+2yrCTB83l%zKIC{?{P`dX- zJHrU7?c<-i?9?}AqGT>k3f%fl_6oO*$V_jz(SKM#d;7c(v4~pkyEO%l`y^P1X2R@d&u{JqCtX;-R z`i|}9Z_LnaV(vKg!zk%$Yx9)U%*I8ytvBo|Gh;G7fZ(wu#;9Rs1{sc$xzVd~d+K86 z96m=vlQB(RK3hSw(us)K^d(Ewg2IHA`ssP1D)z8SP?jAdcO7pQ zYVLt7E-R{@$?Jew zsG942eo#(Uhn8^Z_kKLl3;)Ehlz(L>U)viat%nC!UGgR$ObU&wdAar;48hI;K5eE~ zlrt1JmRdssCk`=et%`u-;#Zox2S0ST3=Zrik)aQB5;q+lZ|>4o=Er$CAK>c>(=HTF zWzZqr<=5xb7ZqhyMYTP^lE||id+W@ZHvNONpJb)?9(90!eT!k zDM@feMpi!^jdO`y;^!GbU^DG#T-Yj07D=>$X-#4WTd5tpHt-}{j%MITVevTQd*5aX zsZ?Q?sFB$Y#-Zpu0SJnnj_zFcZN?hD6$mS~F>r|)>g;8`=>HY!pHklRQqvEMF<(GZ zQ1Rn}AA9(nhzqUGc0-K|OX+^glU!y&E%gDFN>}?ka}`UP2S2G$mkhy?K3`nz`_DEg zBlG2qr1~aE+Q>CWGnI->(|Jc2*OIP&lJ|Gz$#-rB?pjztoz>$TGFwg!`t?7s=g0~+ zi5}jSKHjFr4=?fO9ZtnSiM>Oja1i!WoMORNg-_RQO3G*lBd3^m_#^+ z@?i%uhYfn)9%t|%*pGi|I!xa=I(XJgAjaDSgDLIDSh+A}DV5d{unVi$XC)ndxu@|d zv&~)8chDoU6rV&a?e%BfH3Et!_662q+R0OvNW|-xk5VG@6sGgUXGBD31g6uVGb;y~ zDbzogNIS)6#ms$?|r4wx=X+0i76HJh#1f+ z4BQ;0ekg8H& znTcOz9&a7jdr1&eju&j(y{@8KfrwO|#@@-;SRd=vQV)jK6#E!sQtaLqcVKSODuDH( z{OD2delMBk+?;vV7!=OVVwUo9v$nuCg({=6XAG5g5%HT?E7^pubsO`yE|qaQ8cE3O zK%MCoAy?1*oTjX!ch0kRRfZ=Dssy&G67Ob1U?StNvYs+tkBvIMD$xfx;$sN zKrFoyZkapS$WKI(W};D!js77%v+JlfkzRZziCEjG8k_uK5enKqJj3Hrk%@tlPow^1 zypMalxbz3sMAxMZj|;+cic4!pH`f-~jWlQIFO&1dKw`ZrMS?G%Kkn1VoQfe7V>3?U z{$x>+^9U;66C^g{l?WZy&B!b@gu`WHU&$Vn=xgHE#!ObxoQ1>}6SuHUA3{&$h_qf) zD0&>uTE5#6UZLWzOV{S?e^EzlGJt>RFXY4QA)0yNvuf!K4=lhrsP!J|P$Cbu=UrQC+EsfIxtIH~}J;?#5PF7J;ex>+y zp!w!A&QSD&=^14C5mNM(Zld{+(Wap{_$Hf7sy%LxI~?lNBc<5nt@*{rkb( z4AvVst-T+-(UZLmNIi`?UM4wQr3%k5cye1;?f&2x9$n~Jb4`2<#xR=5e*0n$OIR&a z#l!^{8a~Z_l(a{1p>&%0szUu@cY0c{NOiZtPaUZrWuG@fc~ZjZa|D?3u4hWb&(1B| zjD6Sj#SCUO-uT{==#=d4G0)rMVpW(LF<0lem8pr3WLkYn`d`ayQa6R{Ute`oA9ruh zDP3WIvr2fbQ5SaJX}-6Y;Ld4tpusVCiSK=ZCnAO?2@P+x=KTIMp~}&P`5rJl3P<$^ zk;awSL+26*OhCO5Y%Pv8?f14RpMt{+c(9-b#^Q$hJ!U%05MQc|@7Hf1FllQlJy@~& zI?`EIUjK5RVLo~4!^#tKwA2*u(`ijkL-V7rxSf+3#~e9mRcW;PK2OM^Q}RW;np8^g zNx^ee&o!qMw3H-Ic;qDx&~m@pj0d8fS{drk1s{<0ULSd zo$GmW552+YlqZs|0@POop?td<$vACY$sQSfuzlk9MhTqyuE??CeB^A8#n(hJ`#nFk zw#4)=k35|=oRG7BN3n06#KQpRM`AQK;$&P)E{YVF!Bv&kW37?^0%>&97g&w&l5M`n zl2gC_T0YjOD_wbu#G1IjW@2O^0O$3svWdw+{J1cuuB6etZ4^~jd2s4jV!!20?t6}n zzg5<(=>~g$4?IAVpS_44KWls?W3_usFMXq~vvUvRm$s+A2`#6%5=8I1rFf&>+<)D- zVl3Zqbt-#TRjy?26bdVcfv<#@wYvJkpA~!-5B^F-)Q1|sJ9c+qjlai`)3B>bcAC^U z=6>8?y9N)a3QpYRG+K?rF_et;snH9+`z~P5mMo(da~v0*)M_|SI~d-q zM-2DTWsR#vqEew>BN3DLLHsKdU1;Fh(5-=$+`2i|$5)yjI5s&Og0?tABXzgzSPyT@ zUC%cPRYoov#N7+(?nluX$=gyBcJ8S#byy6gQJap?@O<79Nas+uTVK>{+1bcgQURZ^ zV#1vMZj}4tq}E#{ydRD^B^6e^?gYyl($XjiIURd;{`81(c+N`4LdCYEU0?p>vssef zz_yF5x9QLR_v!}P#zIp*&l05Sb8>Fo6YJx?()gj7W5sh;EkRUcyoXf0l{=-Y52$}= zon-6pKZfO_Ey~)joGu5ww1YfOOhMjkySuhw+p4Qpk=nT6P*dDbPo~}E=*b)rrx>Hm zG9GW`nKTb}faRfjh%rYH%&OVzgWJ5~oXN|GfgtnM~&2KN?y#P4_72S{r#TgYuP|zr|EgD%TPvu|O!R>T4JaSd|6oUa9tjwlt`0 zAQA*aW#_L-MZVRus>d2ICXpKK*EYfCdddZtJLq9zrea*VNxs#~6Crw;QsQN|>wQQV zobo?wAYO6$v5;tDqbP@L?e)XLZ`upjt@#Ri{+xmnSxy*VfDJVd;dm}9dP~ILZhmAe zr&uJhR&UKe??sxIXu7HpD`cBIW? z&9{)@x?OCVQCjp?st%fme;U0{xu1!v37?+9stJOlo01PC_P!=;eYJ2V!@X-XOh>v{ zlGgdW#xqZSuXS>rxo;@2Z`!77`bPU%;j|0DG^*23@5jv?^;Qb4sruE_3Rh{X3jHU) zVkU0ANAC=6JSyIln}r;BE|%8vK1VePakuak5sq_ndm1~G?aFFalo~7uIvP@bAVb@I zT)6+_xn#_D8XKFbS+{*?i??NM0ChHdjc$fn2H0%fCk|#f@R4IPgquQJglIj{ZFq%b z)}}dXa+WOkVNj1m5!-Y~|C?}1=A8;E(WEn6N?xq#kBojpy#mhR#Cl|~Bs62XQDaLs@Ip;}iEU#^!@sXImAn?R zI?$lEndpiW^ANBJ4>_lp;B7}snj>dyx7e@D=Wr^?FIdV9%XE;m7ax#3{huTJlc5st9xJS(_*OFZhem0_SM*TyvkNXL#z{Gf4Q+N!=52!`XpgB&@eSnGO{0xYVk}9H^Xp! z{U(E>^X?v4H!P{VihFzbC?PjtI~C0zJ65k7CANF2bh&hi48}>Qmm;g3NoTYla;kF> zmaWTwkiL5lbWO?e5@=)%cE%AJ&7AX}wD`n-alq{6P0pozVc$P&Sb+2T2!Ef|!qMnm zS@^3~K~;N`q-$nmJo50Th?9(Aqw>al?=XKi`+)el+w87eMe-ilse<3r1gDnCD!9NFd9%qRbA^WUge&VI%n`AcC6C^+*ni7TA1ONr;WcFr?;}iBghyzU%3_%_mp}I`9w+Q6(cs7{anrI z(p_Oh9MjbHp{u9pcG;&pb7V0IKjN}b(hbT@@@eD6ZpjX&RDUE>*J19oys!O?0#i_N zwqZ7zeHyX`ewnyPM$;-HS0e{b$OHSn$gTA6h|l2@yTz~qR#E!&{40xq`Cgj07{SI% zB7I?-=m{3?z}t7?v)uLkhRLR{HL^sOr7P4lcZo4`!7DJo1kn-gSoV5MB?;kYZ}E|! zi>=+5;{%zgQzZ_S%9bgSvjO%54Z*d{;tJnkK~r{5Jj^ZN&1xM(`5$RU3tG(6DsL?I zvHkkqNyoljbgC_HP^_+W$Q%yeZGL;DefqJm#Niawks$HI(H$updH>OJBwK zg5&PtVftGmLs)x7!|uX>*j05-HDiDSN%v2J$Q=k?$Uaq~f3c|GC8)pjYN=S#XZNbv zv#$9JoVVnW`lOXGlb(P%IkIOvRpsM5Xk*Q(c=Rsr9d-nMs9IF<_PDi;+!@mF0|x!s z-KBg=-s8}XwTNOU4{p-p_ef}FKxL6DH-upd=}vHS_4Do z#h9LadYnuoU$}BYzSq^N)ii9)QG#n|hs z(-N|61%)_UzS!@s(Z2B19-_DOEMqH$6C|6H?MG!1GY^JB2spQ&_^D4<)Oh#wS$*R@@jd8^)x7Jl+Bmw3X zP~Pr+=S)%H4Z~F=(Y-gHGlA}0fE(}99GY~8MOwB}lD3^^{*gA5jlkq;a?wv}W0kt= zNe#1V%7bY3Q-D5t=g!=XaipmWcOIk;{#bE=?mTIchz>w{$Ec``nEkwS#+a#g1Gmu( zSBi>x;aQ0C*SfZ&il;>>KP9WR@}8nRL!6xiV(*aLl^Uz7JX-1Qlj;g9HOB8rPj;+j zT52XGq;kg#!0nUUIL@DOPMZ;I=I^9WiO*~6`)xJ;syi*dy;>Ton;eSO^HGrTs>%oj zQCNa-4&k^A?HJ3RDl%8(ILWoa$31sNOqXh^t1ZQ*wnr)iN`O|Ooq=uTH~=@H1o4dP z44|XPQ*bfRN_xF%in|MKHY`6Jg)8zN%Yg;+JcOi14*>D58OD`-K^=k#GxewQaecmpax-sTAvsc2rR#48-zr6MC;s^FsQIwipKS%ocNAJ+qG{p+8Ov~0&ev6s40`;opn$Hyk&G4F%v{CB1J=8G2+5%8Jd%@CiK3MFE(7hEm)gxH}J4p7j zc+;D)QB)P_s~vAv-RW$W8+~2w^Ib2MOF=;qmRX$Vg;Ct#6Y>X8C(&~AYU&<~>eJKL zOHEf!UnwS7=BBNPr0_Rfz$tM`PA?ZG>i>Rw?w2{#oPpHi#&h0mu<})D~ zCj%#g-{3tsY`N^sjx9SGI= z^Fq>;WJSlc53jG`s)}+g(kJlF@YUTb92s~csWSj$2YQp`l`8#)IrR5x%JL1r-YBX( zM23bcm6EC%!c7CI7|34d7$AfB>X$`~Jxf5>TM9!h1QNrDnQ7)w#W-NY-P;()$5C+j zC0gVa;nN7MMvRJdcwz|8KwbatqrG1#k_M0GTmZl9ljy{YOU=RfOhKX#`im)l@}0&W81(!EV+p0X-9?_D8ZLS>bL zfg;2tPDukLqQ~E(T#KI^n$}C?v_2lhQ_C<^PeW5C{{Xh8CSW#veYXeUoeLk=ChqHh zq-;H5ABB?B(p1u1dVXK3nd5da)gmk`jp?<|mf2ID4}VP;z=*@{Unbp?=@yr-q%{?? z*VHgg(f5jYrFdk8BQVU-vK{QeGB9YX|5QQM`s@Stu?6Wx&7zLmqGe_4R7c_kM!bmfU_BUZd$Z()3*se!NiKY3lll znu&92F}g9WSoXSLkFXf2&Tv<;)8Udbt9^-hB%4%dPotks^(WFNtmoHoq zE2F1smQ<3g$?PJp@F-Mbb^*rGk)2zTo2B4vm!y?>Hy4h*X-9SGm$Ont{{UUEU1-{= z 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 B9_Ii6 literal 0 HcmV?d00001 diff --git a/artwork/imageviewerrepo/small/2.jpg b/artwork/imageviewerrepo/small/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c466759b8e8c4ed59da9f6fbaa8dde9e7f4e9c2 GIT binary patch literal 19408 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

i_@% delta 19725 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 diff --git a/experimental/examples/imageviewer/gradlew b/experimental/examples/imageviewer/gradlew index fbd7c51583..a69d9cb6c2 100755 --- a/experimental/examples/imageviewer/gradlew +++ b/experimental/examples/imageviewer/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,67 +17,101 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +APP_BASE_NAME=${0##*/} # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -87,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -106,80 +140,101 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=`expr $i + 1` + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/experimental/examples/imageviewer/gradlew.bat b/experimental/examples/imageviewer/gradlew.bat index 5093609d51..f127cfd49d 100755 --- a/experimental/examples/imageviewer/gradlew.bat +++ b/experimental/examples/imageviewer/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,7 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -54,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -64,21 +64,6 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line @@ -86,17 +71,19 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/experimental/examples/imageviewer/iosApp/Configuration/TeamId.xcconfig b/experimental/examples/imageviewer/iosApp/Configuration/TeamId.xcconfig new file mode 100644 index 0000000000..bf06eb27e9 --- /dev/null +++ b/experimental/examples/imageviewer/iosApp/Configuration/TeamId.xcconfig @@ -0,0 +1 @@ +TEAM_ID= diff --git a/experimental/examples/imageviewer/iosApp/Imageviewer.xcodeproj/project.pbxproj b/experimental/examples/imageviewer/iosApp/Imageviewer.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..2e83e0d5ea --- /dev/null +++ b/experimental/examples/imageviewer/iosApp/Imageviewer.xcodeproj/project.pbxproj @@ -0,0 +1,398 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 2152FB042600AC8F00CF470E /* iosApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2152FB032600AC8F00CF470E /* iosApp.swift */; }; + C1FC908188C4E8695729CB06 /* Pods_Imageviewer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DE96E47030356CE6AD9794A /* Pods_Imageviewer.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 1EB65E27D2C0F884D0A1A133 /* Pods-Imageviewer.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Imageviewer.debug.xcconfig"; path = "Target Support Files/Pods-Imageviewer/Pods-Imageviewer.debug.xcconfig"; sourceTree = ""; }; + 2152FB032600AC8F00CF470E /* iosApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iosApp.swift; sourceTree = ""; }; + 3D7A606AB0AD7636269BD9D0 /* Pods-Imageviewer.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Imageviewer.release.xcconfig"; path = "Target Support Files/Pods-Imageviewer/Pods-Imageviewer.release.xcconfig"; sourceTree = ""; }; + 7555FF7B242A565900829871 /* Imageviewer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Imageviewer.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 7555FF8C242A565B00829871 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 8DE96E47030356CE6AD9794A /* Pods_Imageviewer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Imageviewer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AB3632DC29227652001CCB65 /* TeamId.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = TeamId.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 9964867F0862B4D9FB6ABFC7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + C1FC908188C4E8695729CB06 /* Pods_Imageviewer.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 7555FF72242A565900829871 = { + isa = PBXGroup; + children = ( + AB1DB47929225F7C00F7AF9C /* Configuration */, + 7555FF7D242A565900829871 /* iosApp */, + 7555FF7C242A565900829871 /* Products */, + E1DAFBE8E1CFC0878361EF0E /* Pods */, + B62309C7396AD7BF607A63B2 /* Frameworks */, + ); + sourceTree = ""; + }; + 7555FF7C242A565900829871 /* Products */ = { + isa = PBXGroup; + children = ( + 7555FF7B242A565900829871 /* Imageviewer.app */, + ); + name = Products; + sourceTree = ""; + }; + 7555FF7D242A565900829871 /* iosApp */ = { + isa = PBXGroup; + children = ( + 7555FF8C242A565B00829871 /* Info.plist */, + 2152FB032600AC8F00CF470E /* iosApp.swift */, + ); + path = iosApp; + sourceTree = ""; + }; + AB1DB47929225F7C00F7AF9C /* Configuration */ = { + isa = PBXGroup; + children = ( + AB3632DC29227652001CCB65 /* TeamId.xcconfig */, + ); + path = Configuration; + sourceTree = ""; + }; + B62309C7396AD7BF607A63B2 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 8DE96E47030356CE6AD9794A /* Pods_Imageviewer.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E1DAFBE8E1CFC0878361EF0E /* Pods */ = { + isa = PBXGroup; + children = ( + 1EB65E27D2C0F884D0A1A133 /* Pods-Imageviewer.debug.xcconfig */, + 3D7A606AB0AD7636269BD9D0 /* Pods-Imageviewer.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 7555FF7A242A565900829871 /* Imageviewer */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7555FFA5242A565B00829871 /* Build configuration list for PBXNativeTarget "Imageviewer" */; + buildPhases = ( + E8D673591E7196AEA2EA10E2 /* [CP] Check Pods Manifest.lock */, + 7555FF77242A565900829871 /* Sources */, + 7555FF79242A565900829871 /* Resources */, + 9964867F0862B4D9FB6ABFC7 /* Frameworks */, + F34398AEB6C0D136D245A061 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Imageviewer; + productName = iosApp; + productReference = 7555FF7B242A565900829871 /* Imageviewer.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 7555FF73242A565900829871 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1130; + LastUpgradeCheck = 1130; + ORGANIZATIONNAME = org.jetbrains; + TargetAttributes = { + 7555FF7A242A565900829871 = { + CreatedOnToolsVersion = 11.3.1; + }; + }; + }; + buildConfigurationList = 7555FF76242A565900829871 /* Build configuration list for PBXProject "Imageviewer" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 7555FF72242A565900829871; + productRefGroup = 7555FF7C242A565900829871 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 7555FF7A242A565900829871 /* Imageviewer */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 7555FF79242A565900829871 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + E8D673591E7196AEA2EA10E2 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Imageviewer-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + F34398AEB6C0D136D245A061 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Imageviewer/Pods-Imageviewer-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Imageviewer/Pods-Imageviewer-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Imageviewer/Pods-Imageviewer-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 7555FF77242A565900829871 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2152FB042600AC8F00CF470E /* iosApp.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 7555FFA3242A565B00829871 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AB3632DC29227652001CCB65 /* TeamId.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.1; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 7555FFA4242A565B00829871 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AB3632DC29227652001CCB65 /* TeamId.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.1; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 7555FFA6242A565B00829871 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1EB65E27D2C0F884D0A1A133 /* Pods-Imageviewer.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_ASSET_PATHS = ""; + DEVELOPMENT_TEAM = "${TEAM_ID}"; + ENABLE_PREVIEWS = YES; + INFOPLIST_FILE = iosApp/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 14.1; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "org.jetbrains.Imageviewer${TEAM_ID}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 7555FFA7242A565B00829871 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3D7A606AB0AD7636269BD9D0 /* Pods-Imageviewer.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_ASSET_PATHS = ""; + DEVELOPMENT_TEAM = "${TEAM_ID}"; + ENABLE_PREVIEWS = YES; + INFOPLIST_FILE = iosApp/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 14.1; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "org.jetbrains.Imageviewer${TEAM_ID}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 7555FF76242A565900829871 /* Build configuration list for PBXProject "Imageviewer" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7555FFA3242A565B00829871 /* Debug */, + 7555FFA4242A565B00829871 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7555FFA5242A565B00829871 /* Build configuration list for PBXNativeTarget "Imageviewer" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7555FFA6242A565B00829871 /* Debug */, + 7555FFA7242A565B00829871 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 7555FF73242A565900829871 /* Project object */; +} diff --git a/experimental/examples/imageviewer/iosApp/Podfile b/experimental/examples/imageviewer/iosApp/Podfile new file mode 100644 index 0000000000..5f87c3d554 --- /dev/null +++ b/experimental/examples/imageviewer/iosApp/Podfile @@ -0,0 +1,5 @@ +target 'Imageviewer' do + use_frameworks! + platform :ios, '14.1' + pod 'shared', :path => '../shared' +end \ No newline at end of file diff --git a/experimental/examples/imageviewer/iosApp/iosApp/Info.plist b/experimental/examples/imageviewer/iosApp/iosApp/Info.plist new file mode 100644 index 0000000000..9a269f5eaa --- /dev/null +++ b/experimental/examples/imageviewer/iosApp/iosApp/Info.plist @@ -0,0 +1,48 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + + UILaunchScreen + + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/experimental/examples/imageviewer/iosApp/iosApp/iosApp.swift b/experimental/examples/imageviewer/iosApp/iosApp/iosApp.swift new file mode 100644 index 0000000000..b42016a6fc --- /dev/null +++ b/experimental/examples/imageviewer/iosApp/iosApp/iosApp.swift @@ -0,0 +1,15 @@ +import UIKit +import shared + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + var window: UIWindow? + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + window = UIWindow(frame: UIScreen.main.bounds) + let mainViewController = Main_iosKt.MainViewController() + window?.rootViewController = mainViewController + window?.makeKeyAndVisible() + return true + } +} diff --git a/experimental/examples/imageviewer/run-configurations.png b/experimental/examples/imageviewer/run-configurations.png new file mode 100644 index 0000000000000000000000000000000000000000..0840602f9be0b88523fb8597515424944a440e2f GIT binary patch literal 15762 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 literal 0 HcmV?d00001 diff --git a/experimental/examples/imageviewer/settings.gradle.kts b/experimental/examples/imageviewer/settings.gradle.kts old mode 100755 new mode 100644 index f4ac8d1ff7..a2c5064a25 --- a/experimental/examples/imageviewer/settings.gradle.kts +++ b/experimental/examples/imageviewer/settings.gradle.kts @@ -12,11 +12,17 @@ pluginManagement { kotlin("jvm").version(kotlinVersion) kotlin("multiplatform").version(kotlinVersion) + kotlin("plugin.serialization").version(kotlinVersion) kotlin("android").version(kotlinVersion) + id("com.android.base").version(agpVersion) id("com.android.application").version(agpVersion) id("com.android.library").version(agpVersion) id("org.jetbrains.compose").version(composeVersion) } } -include(":common", ":android", ":desktop") +rootProject.name = "imageviewer" + +include(":androidApp") +include(":shared") +include(":desktopApp") diff --git a/experimental/examples/imageviewer/shared/build.gradle.kts b/experimental/examples/imageviewer/shared/build.gradle.kts new file mode 100755 index 0000000000..9d7a377757 --- /dev/null +++ b/experimental/examples/imageviewer/shared/build.gradle.kts @@ -0,0 +1,84 @@ +plugins { + kotlin("multiplatform") + kotlin("native.cocoapods") + id("com.android.library") + id("org.jetbrains.compose") + kotlin("plugin.serialization") +} + +version = "1.0-SNAPSHOT" +val ktorVersion = extra["ktor.version"] + +kotlin { + android() + jvm("desktop") + ios() + iosSimulatorArm64() + + cocoapods { + summary = "Shared code for the sample" + homepage = "https://github.com/JetBrains/compose-jb" + ios.deploymentTarget = "14.1" + podfile = project.file("../iosApp/Podfile") + framework { + baseName = "shared" + isStatic = true + } + extraSpecAttributes["resources"] = "['src/commonMain/resources/**', 'src/iosMain/resources/**']" + } + + sourceSets { + val commonMain by getting { + dependencies { + implementation("io.ktor:ktor-client-core:$ktorVersion") + implementation(compose.runtime) + implementation(compose.foundation) + implementation(compose.material) + implementation("org.jetbrains.compose.components:components-resources:1.3.0-beta04-dev879") + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1") + } + } + val androidMain by getting { + dependencies { + implementation("androidx.appcompat:appcompat:1.5.1") + implementation("androidx.core:core-ktx:1.9.0") + implementation("io.ktor:ktor-client-okhttp:$ktorVersion") + } + } + val iosMain by getting { + dependencies { + implementation("io.ktor:ktor-client-darwin:$ktorVersion") + } + } + val iosTest by getting + val iosSimulatorArm64Main by getting { + dependsOn(iosMain) + } + val iosSimulatorArm64Test by getting { + dependsOn(iosTest) + } + + val desktopMain by getting { + dependencies { + implementation(compose.desktop.common) + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-swing:1.6.4") + implementation("io.ktor:ktor-client-cio:$ktorVersion") + } + } + } +} + +android { + compileSdk = 33 + sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") + sourceSets["main"].res.srcDirs("src/androidMain/res") + sourceSets["main"].resources.srcDir("src/commonMain/resources") + defaultConfig { + minSdk = 24 + targetSdk = 33 + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } +} diff --git a/experimental/examples/imageviewer/shared/src/androidMain/AndroidManifest.xml b/experimental/examples/imageviewer/shared/src/androidMain/AndroidManifest.xml new file mode 100755 index 0000000000..513200737a --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/androidMain/AndroidManifest.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/ImageBitmap.android.kt b/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/ImageBitmap.android.kt new file mode 100644 index 0000000000..a1c412135d --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/ImageBitmap.android.kt @@ -0,0 +1,12 @@ +package example.imageviewer + +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.asImageBitmap + +actual fun ByteArray.toImageBitmap(): ImageBitmap = toAndroidBitmap().asImageBitmap() + +fun ByteArray.toAndroidBitmap(): Bitmap { + return BitmapFactory.decodeByteArray(this, 0, size) +} diff --git a/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/model/filtration/BlurFilter.kt b/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/model/filtration/BlurFilter.kt new file mode 100755 index 0000000000..5f9c242d9a --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/model/filtration/BlurFilter.kt @@ -0,0 +1,14 @@ +package example.imageviewer.model.filtration + +import android.content.Context +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.asAndroidBitmap +import androidx.compose.ui.graphics.asImageBitmap +import example.imageviewer.core.BitmapFilter +import example.imageviewer.utils.applyBlurFilter + +class BlurFilter(private val context: Context) : BitmapFilter { + + override fun apply(bitmap: ImageBitmap): ImageBitmap = + applyBlurFilter(bitmap.asAndroidBitmap(), context).asImageBitmap() +} diff --git a/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/model/filtration/GrayScaleFilter.kt b/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/model/filtration/GrayScaleFilter.kt new file mode 100755 index 0000000000..e4ad86770b --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/model/filtration/GrayScaleFilter.kt @@ -0,0 +1,13 @@ +package example.imageviewer.model.filtration + +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.asAndroidBitmap +import androidx.compose.ui.graphics.asImageBitmap +import example.imageviewer.core.BitmapFilter +import example.imageviewer.utils.applyGrayScaleFilter + +class GrayScaleFilter : BitmapFilter { + + override fun apply(bitmap: ImageBitmap): ImageBitmap = + applyGrayScaleFilter(bitmap.asAndroidBitmap()).asImageBitmap() +} diff --git a/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/model/filtration/PixelFilter.kt b/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/model/filtration/PixelFilter.kt new file mode 100755 index 0000000000..ae0a7197f5 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/model/filtration/PixelFilter.kt @@ -0,0 +1,12 @@ +package example.imageviewer.model.filtration + +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.asAndroidBitmap +import androidx.compose.ui.graphics.asImageBitmap +import example.imageviewer.core.BitmapFilter +import example.imageviewer.utils.applyPixelFilter + +class PixelFilter : BitmapFilter { + override fun apply(bitmap: ImageBitmap): ImageBitmap = + applyPixelFilter(bitmap.asAndroidBitmap()).asImageBitmap() +} diff --git a/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/utils/GraphicsMath.android.kt b/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/utils/GraphicsMath.android.kt new file mode 100644 index 0000000000..901cd77de7 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/utils/GraphicsMath.android.kt @@ -0,0 +1,77 @@ +package example.imageviewer.utils + +import android.content.Context +import android.graphics.* +import android.renderscript.Allocation +import android.renderscript.Element +import android.renderscript.RenderScript +import android.renderscript.ScriptIntrinsicBlur + +fun scaleBitmapAspectRatio( + bitmap: Bitmap, + width: Int, + height: Int, + filter: Boolean = false +): Bitmap { + val boundW: Float = width.toFloat() + val boundH: Float = height.toFloat() + + val ratioX: Float = boundW / bitmap.width + val ratioY: Float = boundH / bitmap.height + val ratio: Float = if (ratioX < ratioY) ratioX else ratioY + + val resultH = (bitmap.height * ratio).toInt() + val resultW = (bitmap.width * ratio).toInt() + + return Bitmap.createScaledBitmap(bitmap, resultW, resultH, filter) +} + + +fun applyGrayScaleFilter(bitmap: Bitmap): Bitmap { + + val result: Bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true) + + val canvas = Canvas(result) + + val colorMatrix = ColorMatrix() + colorMatrix.setSaturation(0f) + + val paint = Paint() + paint.colorFilter = ColorMatrixColorFilter(colorMatrix) + + canvas.drawBitmap(result, 0f, 0f, paint) + + return result +} + +fun applyPixelFilter(bitmap: Bitmap): Bitmap { + + var result: Bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true) + val w: Int = bitmap.width + val h: Int = bitmap.height + result = scaleBitmapAspectRatio(result, w / 20, h / 20) + result = scaleBitmapAspectRatio(result, w, h) + + return result +} + +fun applyBlurFilter(bitmap: Bitmap, context: Context): Bitmap { + + val result: Bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true) + + val renderScript: RenderScript = RenderScript.create(context) + + val tmpIn: Allocation = Allocation.createFromBitmap(renderScript, bitmap) + val tmpOut: Allocation = Allocation.createFromBitmap(renderScript, result) + + val theIntrinsic: ScriptIntrinsicBlur = + ScriptIntrinsicBlur.create(renderScript, Element.U8_4(renderScript)) + + theIntrinsic.setRadius(25f) + theIntrinsic.setInput(tmpIn) + theIntrinsic.forEach(tmpOut) + + tmpOut.copyTo(result) + + return result +} diff --git a/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/view/ImageViewer.android.kt b/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/view/ImageViewer.android.kt new file mode 100755 index 0000000000..366e5427ef --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/view/ImageViewer.android.kt @@ -0,0 +1,78 @@ +package example.imageviewer.view + +import android.content.Context +import android.widget.Toast +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.platform.LocalContext +import example.imageviewer.* +import example.imageviewer.core.BitmapFilter +import example.imageviewer.core.FilterType +import example.imageviewer.model.ContentRepository +import example.imageviewer.model.State +import example.imageviewer.model.adapter +import example.imageviewer.model.createNetworkRepository +import example.imageviewer.model.filtration.BlurFilter +import example.imageviewer.model.filtration.GrayScaleFilter +import example.imageviewer.model.filtration.PixelFilter +import example.imageviewer.shared.R +import example.imageviewer.style.ImageViewerTheme +import io.ktor.client.* +import io.ktor.client.engine.okhttp.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch + +@Composable +fun ImageViewerAndroid() { + val context: Context = LocalContext.current + val ioScope = rememberCoroutineScope { Dispatchers.IO } + val dependencies = remember(context, ioScope) { getDependencies(context, ioScope) } + val state = remember { mutableStateOf(State()) } + ImageViewerTheme { + ImageViewerCommon(state, dependencies) + } +} + +private fun getDependencies(context: Context, ioScope: CoroutineScope) = object : Dependencies { + override val httpClient: HttpClient = HttpClient(OkHttp) + override val ioScope: CoroutineScope = ioScope + override fun getFilter(type: FilterType): BitmapFilter = + when (type) { + FilterType.GrayScale -> GrayScaleFilter() + FilterType.Pixel -> PixelFilter() + FilterType.Blur -> BlurFilter(context) + } + + override val localization: Localization = object : Localization { + override val back get() = context.getString(R.string.back) + override val appName get() = context.getString(R.string.app_name) + override val loading get() = context.getString(R.string.loading) + override val repoInvalid get() = context.getString(R.string.repo_invalid) + override val repoEmpty get() = context.getString(R.string.repo_empty) + override val noInternet get() = context.getString(R.string.no_internet) + override val loadImageUnavailable get() = context.getString(R.string.load_image_unavailable) + override val lastImage get() = context.getString(R.string.last_image) + override val firstImage get() = context.getString(R.string.first_image) + override val picture get() = context.getString(R.string.picture) + override val size get() = context.getString(R.string.size) + override val pixels get() = context.getString(R.string.pixels) + override val refreshUnavailable get() = context.getString(R.string.refresh_unavailable) + } + + override val imageRepository: ContentRepository = + createNetworkRepository(httpClient) + .adapter { it.toImageBitmap() } + + override val notification: Notification = object : PopupNotification(localization) { + override fun showPopUpMessage(text: String) { + GlobalScope.launch(Dispatchers.Main) { + Toast.makeText(context, text, Toast.LENGTH_SHORT).show() + } + } + } +} diff --git a/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/view/PreviewImage.android.kt b/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/view/PreviewImage.android.kt new file mode 100644 index 0000000000..455de53506 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/view/PreviewImage.android.kt @@ -0,0 +1,9 @@ +package example.imageviewer.view + +import android.content.res.Configuration +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalConfiguration + +@Composable +internal actual fun needShowPreview(): Boolean = + LocalConfiguration.current.orientation == Configuration.ORIENTATION_PORTRAIT diff --git a/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/view/ScalableImage.android.kt b/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/view/ScalableImage.android.kt new file mode 100644 index 0000000000..fa88d1804b --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/view/ScalableImage.android.kt @@ -0,0 +1,8 @@ +package example.imageviewer.view + +import androidx.compose.runtime.MutableState +import androidx.compose.ui.Modifier +import example.imageviewer.model.ScalableState + +actual fun Modifier.addUserInput(state: MutableState) = + addTouchUserInput(state) diff --git a/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/view/ScrollableColumn.android.kt b/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/view/ScrollableColumn.android.kt new file mode 100644 index 0000000000..7ef544a39d --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/view/ScrollableColumn.android.kt @@ -0,0 +1,8 @@ +package example.imageviewer.view + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier + +@Composable +actual fun ScrollableColumn(modifier: Modifier, content: @Composable () -> Unit) = + TouchScrollableColumn(modifier, content) diff --git a/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/view/Tooltip.android.kt b/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/view/Tooltip.android.kt new file mode 100644 index 0000000000..8e638fd7d1 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/androidMain/kotlin/example/imageviewer/view/Tooltip.android.kt @@ -0,0 +1,9 @@ +package example.imageviewer.view + +import androidx.compose.runtime.Composable + +@Composable +internal actual fun Tooltip(text: String, content: @Composable () -> Unit) { + // No Tooltip for Android + content() +} diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/mipmap-anydpi-v26/ic_imageviewer.xml b/experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-anydpi-v26/ic_imageviewer.xml similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/mipmap-anydpi-v26/ic_imageviewer.xml rename to experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-anydpi-v26/ic_imageviewer.xml diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/mipmap-anydpi-v26/ic_imageviewer_round.xml b/experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-anydpi-v26/ic_imageviewer_round.xml similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/mipmap-anydpi-v26/ic_imageviewer_round.xml rename to experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-anydpi-v26/ic_imageviewer_round.xml diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/mipmap-hdpi/ic_imageviewer.png b/experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-hdpi/ic_imageviewer.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/mipmap-hdpi/ic_imageviewer.png rename to experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-hdpi/ic_imageviewer.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/mipmap-hdpi/ic_imageviewer_background.png b/experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-hdpi/ic_imageviewer_background.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/mipmap-hdpi/ic_imageviewer_background.png rename to experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-hdpi/ic_imageviewer_background.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/mipmap-hdpi/ic_imageviewer_foreground.png b/experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-hdpi/ic_imageviewer_foreground.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/mipmap-hdpi/ic_imageviewer_foreground.png rename to experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-hdpi/ic_imageviewer_foreground.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/mipmap-hdpi/ic_imageviewer_round.png b/experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-hdpi/ic_imageviewer_round.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/mipmap-hdpi/ic_imageviewer_round.png rename to experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-hdpi/ic_imageviewer_round.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/mipmap-mdpi/ic_imageviewer.png b/experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-mdpi/ic_imageviewer.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/mipmap-mdpi/ic_imageviewer.png rename to experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-mdpi/ic_imageviewer.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/mipmap-mdpi/ic_imageviewer_background.png b/experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-mdpi/ic_imageviewer_background.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/mipmap-mdpi/ic_imageviewer_background.png rename to experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-mdpi/ic_imageviewer_background.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/mipmap-mdpi/ic_imageviewer_foreground.png b/experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-mdpi/ic_imageviewer_foreground.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/mipmap-mdpi/ic_imageviewer_foreground.png rename to experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-mdpi/ic_imageviewer_foreground.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/mipmap-mdpi/ic_imageviewer_round.png b/experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-mdpi/ic_imageviewer_round.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/mipmap-mdpi/ic_imageviewer_round.png rename to experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-mdpi/ic_imageviewer_round.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/mipmap-xhdpi/ic_imageviewer.png b/experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-xhdpi/ic_imageviewer.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/mipmap-xhdpi/ic_imageviewer.png rename to experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-xhdpi/ic_imageviewer.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/mipmap-xhdpi/ic_imageviewer_background.png b/experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-xhdpi/ic_imageviewer_background.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/mipmap-xhdpi/ic_imageviewer_background.png rename to experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-xhdpi/ic_imageviewer_background.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/mipmap-xhdpi/ic_imageviewer_foreground.png b/experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-xhdpi/ic_imageviewer_foreground.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/mipmap-xhdpi/ic_imageviewer_foreground.png rename to experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-xhdpi/ic_imageviewer_foreground.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/mipmap-xhdpi/ic_imageviewer_round.png b/experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-xhdpi/ic_imageviewer_round.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/mipmap-xhdpi/ic_imageviewer_round.png rename to experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-xhdpi/ic_imageviewer_round.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/mipmap-xxhdpi/ic_imageviewer.png b/experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-xxhdpi/ic_imageviewer.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/mipmap-xxhdpi/ic_imageviewer.png rename to experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-xxhdpi/ic_imageviewer.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/mipmap-xxhdpi/ic_imageviewer_background.png b/experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-xxhdpi/ic_imageviewer_background.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/mipmap-xxhdpi/ic_imageviewer_background.png rename to experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-xxhdpi/ic_imageviewer_background.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/mipmap-xxhdpi/ic_imageviewer_foreground.png b/experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-xxhdpi/ic_imageviewer_foreground.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/mipmap-xxhdpi/ic_imageviewer_foreground.png rename to experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-xxhdpi/ic_imageviewer_foreground.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/mipmap-xxhdpi/ic_imageviewer_round.png b/experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-xxhdpi/ic_imageviewer_round.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/mipmap-xxhdpi/ic_imageviewer_round.png rename to experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-xxhdpi/ic_imageviewer_round.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/mipmap-xxxhdpi/ic_imageviewer.png b/experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-xxxhdpi/ic_imageviewer.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/mipmap-xxxhdpi/ic_imageviewer.png rename to experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-xxxhdpi/ic_imageviewer.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/mipmap-xxxhdpi/ic_imageviewer_background.png b/experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-xxxhdpi/ic_imageviewer_background.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/mipmap-xxxhdpi/ic_imageviewer_background.png rename to experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-xxxhdpi/ic_imageviewer_background.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/mipmap-xxxhdpi/ic_imageviewer_foreground.png b/experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-xxxhdpi/ic_imageviewer_foreground.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/mipmap-xxxhdpi/ic_imageviewer_foreground.png rename to experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-xxxhdpi/ic_imageviewer_foreground.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/mipmap-xxxhdpi/ic_imageviewer_round.png b/experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-xxxhdpi/ic_imageviewer_round.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/mipmap-xxxhdpi/ic_imageviewer_round.png rename to experimental/examples/imageviewer/shared/src/androidMain/res/mipmap-xxxhdpi/ic_imageviewer_round.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/values-ru/strings.xml b/experimental/examples/imageviewer/shared/src/androidMain/res/values-ru/strings.xml similarity index 95% rename from experimental/examples/imageviewer/common/src/androidMain/res/values-ru/strings.xml rename to experimental/examples/imageviewer/shared/src/androidMain/res/values-ru/strings.xml index 840f22cdb2..adb38dc804 100755 --- a/experimental/examples/imageviewer/common/src/androidMain/res/values-ru/strings.xml +++ b/experimental/examples/imageviewer/shared/src/androidMain/res/values-ru/strings.xml @@ -12,4 +12,5 @@ Изображение: Размеры: пикселей. + назад \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/values/strings.xml b/experimental/examples/imageviewer/shared/src/androidMain/res/values/strings.xml similarity index 93% rename from experimental/examples/imageviewer/common/src/androidMain/res/values/strings.xml rename to experimental/examples/imageviewer/shared/src/androidMain/res/values/strings.xml index e515aed2e2..cbde2d5a37 100755 --- a/experimental/examples/imageviewer/common/src/androidMain/res/values/strings.xml +++ b/experimental/examples/imageviewer/shared/src/androidMain/res/values/strings.xml @@ -11,4 +11,5 @@ Picture: Size: pixels. + back \ No newline at end of file diff --git a/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/Dependencies.kt b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/Dependencies.kt new file mode 100644 index 0000000000..3f4aad2ab4 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/Dependencies.kt @@ -0,0 +1,80 @@ +package example.imageviewer + +import androidx.compose.ui.graphics.ImageBitmap +import example.imageviewer.core.BitmapFilter +import example.imageviewer.core.FilterType +import example.imageviewer.model.ContentRepository +import example.imageviewer.model.Picture +import example.imageviewer.model.name +import io.ktor.client.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.serialization.json.Json + +interface Dependencies { + val httpClient: HttpClient + val ioScope: CoroutineScope + fun getFilter(type: FilterType): BitmapFilter + val localization: Localization + val imageRepository: ContentRepository + val notification: Notification + val json: Json get() = jsonReader +} + +interface Notification { + fun notifyInvalidRepo() + fun notifyRepoIsEmpty() + fun notifyNoInternet() + fun notifyLoadImageUnavailable() + fun notifyLastImage() + fun notifyFirstImage() + fun notifyImageData(picture: Picture) + fun notifyRefreshUnavailable() +} + +abstract class PopupNotification(private val localization: Localization) : Notification { + abstract fun showPopUpMessage(text: String) + + override fun notifyInvalidRepo() = showPopUpMessage(localization.repoInvalid) + override fun notifyRepoIsEmpty() = showPopUpMessage(localization.repoEmpty) + override fun notifyNoInternet() = showPopUpMessage(localization.noInternet) + override fun notifyLoadImageUnavailable() = + showPopUpMessage( + """ + ${localization.noInternet} + ${localization.loadImageUnavailable} + """.trimIndent() + ) + + override fun notifyLastImage() = showPopUpMessage(localization.lastImage) + override fun notifyFirstImage() = showPopUpMessage(localization.firstImage) + override fun notifyImageData(picture: Picture) = showPopUpMessage( + "${localization.picture} ${picture.name}" + ) + + override fun notifyRefreshUnavailable() = showPopUpMessage( + """ + ${localization.noInternet} + ${localization.refreshUnavailable} + """.trimIndent() + ) +} + +interface Localization { + val back: String + val appName: String + val loading: String + val repoInvalid: String + val repoEmpty: String + val noInternet: String + val loadImageUnavailable: String + val lastImage: String + val firstImage: String + val picture: String + val size: String + val pixels: String + val refreshUnavailable: String +} + +private val jsonReader: Json = Json { + ignoreUnknownKeys = true +} diff --git a/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/ImageBitmap.common.kt b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/ImageBitmap.common.kt new file mode 100644 index 0000000000..953bbc5db9 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/ImageBitmap.common.kt @@ -0,0 +1,5 @@ +package example.imageviewer + +import androidx.compose.ui.graphics.ImageBitmap + +expect fun ByteArray.toImageBitmap(): ImageBitmap diff --git a/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/ImageViewer.common.kt b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/ImageViewer.common.kt new file mode 100644 index 0000000000..292836ead9 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/ImageViewer.common.kt @@ -0,0 +1,35 @@ +package example.imageviewer + +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material.Surface +import androidx.compose.runtime.Composable +import androidx.compose.runtime.MutableState +import androidx.compose.ui.Modifier +import example.imageviewer.model.* +import example.imageviewer.view.FullscreenImage +import example.imageviewer.view.MainScreen + +@Composable +internal fun ImageViewerCommon(state: MutableState, dependencies: Dependencies) { + state.refresh(dependencies) + + Surface(modifier = Modifier.fillMaxSize()) { + when (state.value.screen) { + ScreenState.Miniatures -> { + MainScreen(state, dependencies) + } + + ScreenState.FullScreen -> { + FullscreenImage( + picture = state.value.picture, + getImage = { dependencies.imageRepository.loadContent(it.bigUrl) }, + getFilter = { dependencies.getFilter(it) }, + localization = dependencies.localization, + back = { state.value = state.value.copy(screen = ScreenState.Miniatures) }, + nextImage = { state.nextImage() }, + previousImage = { state.previousImage() }, + ) + } + } + } +} diff --git a/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/core/BitmapFilter.kt b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/core/BitmapFilter.kt new file mode 100755 index 0000000000..ad8da1231a --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/core/BitmapFilter.kt @@ -0,0 +1,7 @@ +package example.imageviewer.core + +import androidx.compose.ui.graphics.ImageBitmap + +interface BitmapFilter { + fun apply(bitmap: ImageBitmap): ImageBitmap +} diff --git a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/core/FilterType.kt b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/core/FilterType.kt similarity index 100% rename from experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/core/FilterType.kt rename to experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/core/FilterType.kt diff --git a/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/model/Config.kt b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/model/Config.kt new file mode 100644 index 0000000000..28bfc3122f --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/model/Config.kt @@ -0,0 +1,7 @@ +package example.imageviewer.model + +const val BASE_URL = "https://raw.githubusercontent.com/JetBrains/compose-jb/master/artwork/imageviewerrepo" +const val PICTURES_DATA_URL = "$BASE_URL/pictures.json" +const val MAX_SCALE = 5f +const val MIN_SCALE = 1f +const val TOAST_DURATION = 3000L diff --git a/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/model/ContentRepository.kt b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/model/ContentRepository.kt new file mode 100644 index 0000000000..73b19297ff --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/model/ContentRepository.kt @@ -0,0 +1,23 @@ +package example.imageviewer.model + +import io.ktor.client.* +import io.ktor.client.request.* +import io.ktor.client.statement.* + +interface ContentRepository { + suspend fun loadContent(url: String): T +} + +fun createNetworkRepository(ktorClient: HttpClient) = object : ContentRepository { + override suspend fun loadContent(url: String): ByteArray = + ktorClient.get(urlString = url).readBytes() +} + +fun ContentRepository.adapter(transform: (A) -> B): ContentRepository { + val origin = this + return object : ContentRepository { + override suspend fun loadContent(url: String): B { + return transform(origin.loadContent(url)) + } + } +} diff --git a/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/model/Picture.kt b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/model/Picture.kt new file mode 100644 index 0000000000..7463f87381 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/model/Picture.kt @@ -0,0 +1,11 @@ +package example.imageviewer.model + +import kotlinx.serialization.Serializable + +@Serializable +data class Picture(val big: String, val small: String) + +fun getNameURL(url: String): String = url.substring(url.lastIndexOf('/') + 1, url.length) +val Picture.name get() = getNameURL(big) +val Picture.bigUrl get() = "$BASE_URL/$big" +val Picture.smallUrl get() = "$BASE_URL/$small" diff --git a/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/model/ScalableState.kt b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/model/ScalableState.kt new file mode 100644 index 0000000000..6c9bf68752 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/model/ScalableState.kt @@ -0,0 +1,77 @@ +package example.imageviewer.model + +import androidx.compose.runtime.MutableState +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.unit.IntOffset +import androidx.compose.ui.unit.IntRect +import androidx.compose.ui.unit.IntSize + +data class ScalableState( + val imageSize: IntSize, + val boxSize: IntSize = IntSize(1, 1), + val offset: IntOffset = IntOffset.Zero, + val scale: Float = 1f +) + +val ScalableState.visiblePart + get() : IntRect { + val boxRatio = boxSize.width.toFloat() / boxSize.height + val imageRatio = imageSize.width.toFloat() / imageSize.height.toFloat() + + val size: IntSize = + if (boxRatio > imageRatio) { + val height = imageSize.height / scale + val targetWidth = height * boxRatio + IntSize(minOf(imageSize.width, targetWidth.toInt()), height.toInt()) + } else { + val width = imageSize.width / scale + val targetHeight = width / boxRatio + IntSize(width.toInt(), minOf(imageSize.height, targetHeight.toInt())) + } + + return IntRect(offset = offset, size = size) + } + +fun MutableState.changeBoxSize(size: IntSize) = modifyState { + copy(boxSize = size) + .updateOffsetLimits() +} + +fun MutableState.setScale(scale: Float) = modifyState { + copy(scale = scale) + .updateOffsetLimits() +} + +fun MutableState.addScale(diff: Float) = modifyState { + if (scale + diff > MAX_SCALE) { + copy(scale = MAX_SCALE) + } else if (scale + diff < MIN_SCALE) { + copy(scale = MIN_SCALE) + } else { + copy(scale = scale + diff) + }.updateOffsetLimits() +} + +fun MutableState.addDragAmount(diff: Offset) = modifyState { + copy(offset = offset - IntOffset((diff.x + 1).toInt(), (diff.y + 1).toInt())) + .updateOffsetLimits() +} + +private fun ScalableState.updateOffsetLimits(): ScalableState { + var result = this + if (offset.x + visiblePart.width > imageSize.width) { + result = result.changeOffset(x = imageSize.width - visiblePart.width) + } + if (offset.y + visiblePart.height > imageSize.height) { + result = result.changeOffset(y = imageSize.height - visiblePart.height) + } + if (offset.x < 0) { + result = result.changeOffset(x = 0) + } + if (offset.y < 0) { + result = result.changeOffset(y = 0) + } + return result +} + +private fun ScalableState.changeOffset(x: Int = offset.x, y: Int = offset.y) = copy(offset = IntOffset(x, y)) diff --git a/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/model/State.kt b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/model/State.kt new file mode 100644 index 0000000000..593b830976 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/model/State.kt @@ -0,0 +1,85 @@ +package example.imageviewer.model + +import androidx.compose.runtime.MutableState +import androidx.compose.ui.graphics.ImageBitmap +import example.imageviewer.Dependencies +import io.ktor.client.request.* +import io.ktor.client.statement.* +import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.launch +import kotlinx.serialization.builtins.ListSerializer + +data class State( + val currentImageIndex: Int = 0, + val miniatures: Map = emptyMap(), + val pictures: List = emptyList(), + val screen: ScreenState = ScreenState.Miniatures +) + +sealed interface ScreenState { + object Miniatures : ScreenState + object FullScreen : ScreenState +} + +val State.isContentReady get() = pictures.isNotEmpty() +val State.picture get():Picture? = pictures.getOrNull(currentImageIndex) + +fun MutableState.modifyState(modification: T.() -> T) { + value = value.modification() +} + +fun MutableState.nextImage() = modifyState { + var newIndex = currentImageIndex + 1 + if (newIndex > pictures.lastIndex) { + newIndex = 0 + } + copy(currentImageIndex = newIndex) +} + +fun MutableState.previousImage() = modifyState { + var newIndex = currentImageIndex - 1 + if (newIndex < 0) { + newIndex = pictures.lastIndex + } + copy(currentImageIndex = newIndex) +} + +fun MutableState.refresh(dependencies: Dependencies) { + dependencies.ioScope.launch { + try { + val pictures = dependencies.json.decodeFromString( + ListSerializer(Picture.serializer()), + dependencies.httpClient.get(PICTURES_DATA_URL).bodyAsText() + ) + val miniatures = pictures.map { picture -> + async { + picture to dependencies.imageRepository.loadContent(picture.smallUrl) + } + }.awaitAll().toMap() + + modifyState { + copy(pictures = pictures, miniatures = miniatures) + } + } catch (e: CancellationException) { + println("Rethrowing CancellationException with original cause") + // https://kotlinlang.org/docs/exception-handling.html#exceptions-aggregation + throw e + } catch (e: Exception) { + e.printStackTrace() + dependencies.notification.notifyNoInternet() + } + } +} + +fun MutableState.setSelectedIndex(index: Int) = modifyState { + copy(currentImageIndex = index) +} + +fun MutableState.toFullscreen(index: Int = value.currentImageIndex) = modifyState { + copy( + currentImageIndex = index, + screen = ScreenState.FullScreen + ) +} diff --git a/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/style/Palette.kt b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/style/Palette.kt new file mode 100755 index 0000000000..b63fafac57 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/style/Palette.kt @@ -0,0 +1,41 @@ +package example.imageviewer.style + +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.Color + +object ImageviewerColors { + val Gray = Color.DarkGray + val LightGray = Color(100, 100, 100) + val DarkGray = Color(32, 32, 32) + val PreviewImageAreaHoverColor = Color(45, 45, 45) + val ToastBackground = Color(23, 23, 23) + val MiniatureColor = Color(50, 50, 50) + val MiniatureHoverColor = Color(55, 55, 55) + val Foreground = Color(210, 210, 210) + val TranslucentBlack = Color(0, 0, 0, 60) + val TranslucentWhite = Color(255, 255, 255, 20) + val Transparent = Color.Transparent + + fun buttonBackground(isHover: Boolean) = if (isHover) TranslucentBlack else Transparent +} + +@Composable +internal fun ImageViewerTheme(content: @Composable () -> Unit) { + isSystemInDarkTheme() // todo check and change colors + MaterialTheme( + colors = MaterialTheme.colors.copy( + primary = ImageviewerColors.Foreground, + secondary = ImageviewerColors.LightGray, + background = ImageviewerColors.DarkGray, + surface = ImageviewerColors.Gray, + onPrimary = ImageviewerColors.Foreground, + onSecondary = Color.Black, + onBackground = ImageviewerColors.Foreground, + onSurface = ImageviewerColors.Foreground + ) + ) { + content() + } +} diff --git a/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/FullscreenImage.kt b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/FullscreenImage.kt new file mode 100644 index 0000000000..4675c84a21 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/FullscreenImage.kt @@ -0,0 +1,227 @@ +package example.imageviewer.view + +import androidx.compose.foundation.* +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.interaction.collectIsHoveredAsState +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.* +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.KeyboardArrowLeft +import androidx.compose.material.icons.filled.KeyboardArrowRight +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.painter.BitmapPainter +import androidx.compose.ui.input.key.* +import androidx.compose.ui.layout.onGloballyPositioned +import androidx.compose.ui.unit.IntRect +import androidx.compose.ui.unit.IntSize +import androidx.compose.ui.unit.dp +import example.imageviewer.Localization +import example.imageviewer.core.BitmapFilter +import example.imageviewer.core.FilterType +import example.imageviewer.model.* +import example.imageviewer.style.* +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.orEmpty +import org.jetbrains.compose.resources.rememberImageBitmap +import org.jetbrains.compose.resources.resource + +@Composable +internal fun FullscreenImage( + picture: Picture?, + getImage: suspend (Picture) -> ImageBitmap, + getFilter: (FilterType) -> BitmapFilter, + localization: Localization, + back: () -> Unit, + nextImage: () -> Unit, + previousImage: () -> Unit, +) { + val filtersState = remember { mutableStateOf(emptySet()) } + + val originalImageState = remember(picture) { mutableStateOf(null) } + LaunchedEffect(picture) { + if (picture != null) { + originalImageState.value = getImage(picture) + } + } + + val originalImage = originalImageState.value + val filters = filtersState.value + val imageWithFilter = remember(originalImage, filters) { + if (originalImage != null) { + var result: ImageBitmap = originalImage + for (filter in filters.map { getFilter(it) }) { + result = filter.apply(result) + } + result + } else { + null + } + } + + Box(Modifier.fillMaxSize().background(color = MaterialTheme.colors.background)) { + Column { + Toolbar(picture?.name ?: "", filtersState, localization, back) + if (imageWithFilter != null) { + val imageSize = IntSize(imageWithFilter.width, imageWithFilter.height) + val scalableState = remember(imageSize) { mutableStateOf(ScalableState(imageSize)) } + val visiblePartOfImage: IntRect = scalableState.value.visiblePart + Slider( + modifier = Modifier.fillMaxWidth(), + value = scalableState.value.scale, + valueRange = MIN_SCALE..MAX_SCALE, + onValueChange = { scalableState.setScale(it) }, + ) + Box( + modifier = Modifier.fillMaxSize() + .onGloballyPositioned { coordinates -> + scalableState.changeBoxSize(coordinates.size) + } + .addUserInput(scalableState) + ) { + Image( + modifier = Modifier.fillMaxSize(), + painter = BitmapPainter( + imageWithFilter, + srcOffset = visiblePartOfImage.topLeft, + srcSize = visiblePartOfImage.size + ), + contentDescription = null + ) + } + } else { + LoadingScreen() + } + } + + FloatingActionButton(modifier = Modifier.align(Alignment.BottomStart).padding(10.dp), onClick = previousImage) { + Icon( + imageVector = Icons.Filled.KeyboardArrowLeft, + contentDescription = "Previous", + tint = MaterialTheme.colors.primary + ) + } + FloatingActionButton(modifier = Modifier.align(Alignment.BottomEnd).padding(10.dp), onClick = nextImage) { + Icon( + imageVector = Icons.Filled.KeyboardArrowRight, + contentDescription = "Next", + tint = MaterialTheme.colors.primary + ) + } + } + +} + +@OptIn(ExperimentalResourceApi::class) +@Composable +private fun Toolbar( + title: String, + filtersState: MutableState>, + localization: Localization, + back: () -> Unit +) { + val backButtonInteractionSource = remember { MutableInteractionSource() } + val backButtonHover by backButtonInteractionSource.collectIsHoveredAsState() + Surface( + modifier = Modifier.height(44.dp) + ) { + Row(modifier = Modifier.padding(end = 30.dp)) { + Surface( + color = Color.Transparent, + modifier = Modifier.padding(start = 20.dp).align(Alignment.CenterVertically), + shape = CircleShape + ) { + Tooltip(localization.back) { + Image( + resource("back.png").rememberImageBitmap().orEmpty(), + contentDescription = null, + modifier = Modifier.size(38.dp) + .hoverable(backButtonInteractionSource) + .background(color = ImageviewerColors.buttonBackground(backButtonHover)) + .clickable { back() } + ) + } + } + Text( + title, + maxLines = 1, + modifier = Modifier.padding(start = 30.dp).weight(1f) + .align(Alignment.CenterVertically), + style = MaterialTheme.typography.body1 + ) + + Surface( + color = Color(255, 255, 255, 40), + modifier = Modifier.size(154.dp, 38.dp) + .align(Alignment.CenterVertically), + shape = CircleShape + ) { + Row(Modifier.horizontalScroll(rememberScrollState())) { + for (type in FilterType.values()) { + FilterButton(filtersState.value.contains(type), type, onClick = { + filtersState.value = if (filtersState.value.contains(type)) { + filtersState.value - type + } else { + filtersState.value + type + } + }) + } + } + } + } + } +} + +@Composable +private fun FilterButton( + active: Boolean, + type: FilterType, + onClick: () -> Unit, +) { + val interactionSource = remember { MutableInteractionSource() } + val filterButtonHover by interactionSource.collectIsHoveredAsState() + Box( + modifier = Modifier.background(color = ImageviewerColors.Transparent).clip(CircleShape) + ) { + Tooltip(type.toString()) { + Image( + getFilterImage(active, type = type), + contentDescription = null, + Modifier.size(38.dp) + .hoverable(interactionSource) + .background(color = ImageviewerColors.buttonBackground(filterButtonHover)) + .clickable { onClick() } + ) + } + } + Spacer(Modifier.width(20.dp)) +} + +@OptIn(ExperimentalResourceApi::class) +@Composable +private fun getFilterImage(active: Boolean, type: FilterType): ImageBitmap { + return when (type) { + FilterType.GrayScale -> if (active) { + resource("grayscale_on.png").rememberImageBitmap().orEmpty() + } else { + resource("grayscale_off.png").rememberImageBitmap().orEmpty() + } + + FilterType.Pixel -> if (active) { + resource("pixel_on.png").rememberImageBitmap().orEmpty() + } else { + resource("pixel_off.png").rememberImageBitmap().orEmpty() + } + + FilterType.Blur -> if (active) { + resource("blur_on.png").rememberImageBitmap().orEmpty() + } else { + resource("blur_off.png").rememberImageBitmap().orEmpty() + } + } +} diff --git a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/view/LoadingScreen.kt b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/LoadingScreen.kt similarity index 52% rename from experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/view/LoadingScreen.kt rename to experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/LoadingScreen.kt index 8a6a4191f6..f97df4b357 100644 --- a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/view/LoadingScreen.kt +++ b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/LoadingScreen.kt @@ -1,11 +1,7 @@ package example.imageviewer.view import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.offset -import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.CircularProgressIndicator import androidx.compose.material.MaterialTheme @@ -15,29 +11,23 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import example.imageviewer.style.DarkGray -import example.imageviewer.style.DarkGreen -import example.imageviewer.style.Foreground -import example.imageviewer.style.TranslucentBlack @Composable -fun LoadingScreen(text: String = "") { +internal fun LoadingScreen(text: String = "") { Box( - modifier = Modifier.fillMaxSize().background(color = TranslucentBlack) + modifier = Modifier.fillMaxSize().background(color = MaterialTheme.colors.background) ) { Box(modifier = Modifier.align(Alignment.Center)) { - Surface(color = DarkGray, elevation = 4.dp, shape = CircleShape) { + Surface(elevation = 4.dp, shape = CircleShape) { CircularProgressIndicator( - modifier = Modifier.size(50.dp).padding(3.dp, 3.dp, 4.dp, 4.dp), - color = DarkGreen + modifier = Modifier.size(50.dp).padding(3.dp, 3.dp, 4.dp, 4.dp) ) } } Text( text = text, modifier = Modifier.align(Alignment.Center).offset(0.dp, 70.dp), - style = MaterialTheme.typography.body1, - color = Foreground + style = MaterialTheme.typography.body1 ) } -} \ No newline at end of file +} diff --git a/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/MainScreen.kt b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/MainScreen.kt new file mode 100755 index 0000000000..97763df099 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/MainScreen.kt @@ -0,0 +1,85 @@ +package example.imageviewer.view + +import androidx.compose.foundation.* +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import example.imageviewer.Dependencies +import example.imageviewer.model.* +import example.imageviewer.model.State +import example.imageviewer.style.* +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.orEmpty +import org.jetbrains.compose.resources.rememberImageBitmap +import org.jetbrains.compose.resources.resource + +@Composable +internal fun MainScreen(state: MutableState, dependencies: Dependencies) { + Column { + TopContent(state, dependencies) + ScrollableColumn( + modifier = Modifier.fillMaxSize() + ) { + for (i in state.value.pictures.indices) { + val picture = state.value.pictures[i] + Miniature( + picture = picture, + image = state.value.miniatures[picture], + onClickSelect = { + state.setSelectedIndex(i) + }, + onClickFullScreen = { + state.toFullscreen(i) + }, + onClickInfo = { + dependencies.notification.notifyImageData(picture) + }, + ) + Spacer(modifier = Modifier.height(4.dp)) + } + } + } + if (!state.value.isContentReady) { + LoadingScreen(dependencies.localization.loading) + } +} + +@Composable +private fun TopContent(state: MutableState, dependencies: Dependencies) { + TitleBar(state, dependencies) + if (needShowPreview()) { + PreviewImage(state = state, getImage = { dependencies.imageRepository.loadContent(it.bigUrl) }) + } +} + +@OptIn(ExperimentalResourceApi::class) +@Composable +private fun TitleBar(state: MutableState, dependencies: Dependencies) { + TopAppBar( + backgroundColor = MaterialTheme.colors.surface, + title = { + Row(Modifier.height(50.dp)) { + Text( + dependencies.localization.appName, + modifier = Modifier.weight(1f).align(Alignment.CenterVertically) + ) + Surface( + color = ImageviewerColors.Transparent, + modifier = Modifier.padding(end = 20.dp).align(Alignment.CenterVertically), + shape = CircleShape + ) { + Image( + bitmap = resource("refresh.png").rememberImageBitmap().orEmpty(), + contentDescription = null, + modifier = Modifier.size(35.dp).clickable { + state.refresh(dependencies) + } + ) + } + } + }) +} diff --git a/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/Miniature.kt b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/Miniature.kt new file mode 100644 index 0000000000..1e725cd8b0 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/Miniature.kt @@ -0,0 +1,71 @@ +package example.imageviewer.view + +import androidx.compose.foundation.Image +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.* +import androidx.compose.material.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.RectangleShape +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.unit.dp +import example.imageviewer.model.* +import example.imageviewer.style.* +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.orEmpty +import org.jetbrains.compose.resources.rememberImageBitmap +import org.jetbrains.compose.resources.resource + +@OptIn(ExperimentalResourceApi::class) +@Composable +internal fun Miniature( + picture: Picture, + image: ImageBitmap?, + onClickSelect: () -> Unit, + onClickFullScreen: () -> Unit, + onClickInfo: () -> Unit, +) { + Card( + backgroundColor = ImageviewerColors.MiniatureColor, + modifier = Modifier.padding(start = 10.dp, end = 10.dp).height(70.dp) + .fillMaxWidth() + .clickable { + onClickSelect() + }, + shape = RectangleShape, + elevation = 2.dp + ) { + Row(modifier = Modifier.padding(end = 30.dp)) { + val modifier = Modifier.height(70.dp) + .width(90.dp) + .padding(start = 1.dp, top = 1.dp, end = 1.dp, bottom = 1.dp) + if (image != null) { + Image( + image, + contentDescription = null, + modifier = modifier.clickable { onClickFullScreen() }, + contentScale = ContentScale.Crop + ) + } else { + CircularProgressIndicator(modifier) + } + Text( + text = picture.name, + modifier = Modifier.weight(1f).align(Alignment.CenterVertically).padding(start = 16.dp), + style = MaterialTheme.typography.body1 + ) + + Image( + resource("dots.png").rememberImageBitmap().orEmpty(), + contentDescription = null, + modifier = Modifier.height(70.dp) + .width(30.dp) + .padding(start = 1.dp, top = 25.dp, end = 1.dp, bottom = 25.dp) + .clickable { onClickInfo() }, + contentScale = ContentScale.FillHeight + ) + } + } +} diff --git a/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/PreviewImage.common.kt b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/PreviewImage.common.kt new file mode 100644 index 0000000000..85ebb73cc0 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/PreviewImage.common.kt @@ -0,0 +1,53 @@ +package example.imageviewer.view + +import androidx.compose.foundation.Image +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.* +import androidx.compose.material.* +import androidx.compose.runtime.* +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.RectangleShape +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.unit.dp +import example.imageviewer.model.* +import example.imageviewer.model.State +import example.imageviewer.style.* +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.orEmpty +import org.jetbrains.compose.resources.rememberImageBitmap +import org.jetbrains.compose.resources.resource + +@OptIn(ExperimentalResourceApi::class) +@Composable +internal fun PreviewImage(state: MutableState, getImage: suspend (Picture) -> ImageBitmap) { + val pictures = state.value.pictures + val index = state.value.currentImageIndex + val imageState = remember(pictures, index) { mutableStateOf(null) } + LaunchedEffect(pictures, index) { + val picture = pictures.getOrNull(index) + if (picture != null) { + imageState.value = getImage(picture) + } + } + + val image = imageState.value + Card( + backgroundColor = MaterialTheme.colors.background, + modifier = Modifier.height(200.dp) + .clickable { state.toFullscreen() }, + shape = RectangleShape, + elevation = 1.dp + ) { + Image( + bitmap = image ?: resource("empty.png").rememberImageBitmap().orEmpty(), + contentDescription = null, + modifier = Modifier + .fillMaxWidth().padding(start = 1.dp, top = 1.dp, end = 1.dp, bottom = 5.dp), + contentScale = ContentScale.Fit + ) + } +} + +@Composable +internal expect fun needShowPreview(): Boolean diff --git a/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/ScalableImage.common.kt b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/ScalableImage.common.kt new file mode 100644 index 0000000000..c21a4d0339 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/ScalableImage.common.kt @@ -0,0 +1,25 @@ +package example.imageviewer.view + +import androidx.compose.foundation.gestures.detectTapGestures +import androidx.compose.foundation.gestures.detectTransformGestures +import androidx.compose.runtime.MutableState +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.pointer.pointerInput +import example.imageviewer.model.ScalableState +import example.imageviewer.model.addDragAmount +import example.imageviewer.model.addScale +import example.imageviewer.model.setScale + +expect fun Modifier.addUserInput(state: MutableState): Modifier + +fun Modifier.addTouchUserInput(state: MutableState): Modifier = + pointerInput(Unit) { + detectTransformGestures { _, pan, zoom, _ -> + state.addDragAmount(pan) + state.addScale(zoom - 1f) + } + }.pointerInput(Unit) { + detectTapGestures( + onDoubleTap = { state.setScale(1f) } + ) + } diff --git a/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/ScrollableColumn.common.kt b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/ScrollableColumn.common.kt new file mode 100644 index 0000000000..58efdf94f5 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/ScrollableColumn.common.kt @@ -0,0 +1,18 @@ +package example.imageviewer.view + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier + +@Composable +expect fun ScrollableColumn(modifier: Modifier, content: @Composable () -> Unit) + +@Composable +fun TouchScrollableColumn(modifier: Modifier, content: @Composable () -> Unit) { + val scrollState = rememberScrollState() + Column(modifier.verticalScroll(scrollState)) { + content() + } +} diff --git a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/view/Toast.kt b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/Toast.kt similarity index 53% rename from experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/view/Toast.kt rename to experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/Toast.kt index d214552818..6db9603f25 100755 --- a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/view/Toast.kt +++ b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/Toast.kt @@ -7,53 +7,44 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.Surface import androidx.compose.material.Text -import androidx.compose.runtime.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.MutableState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import example.imageviewer.style.Foreground -import example.imageviewer.style.ToastBackground +import example.imageviewer.model.TOAST_DURATION +import example.imageviewer.style.ImageviewerColors import kotlinx.coroutines.delay -enum class ToastDuration(val value: Int) { - Short(1000), Long(3000) +sealed interface ToastState { + object Hidden : ToastState + class Shown(val message: String) : ToastState } -private var isShown: Boolean = false - @Composable -fun Toast( - text: String, - visibility: MutableState = mutableStateOf(false), - duration: ToastDuration = ToastDuration.Long +internal fun Toast( + state: MutableState ) { - if (isShown) { - return - } - - if (visibility.value) { - isShown = true + val value = state.value + if (value is ToastState.Shown) { Box( modifier = Modifier.fillMaxSize().padding(bottom = 20.dp), contentAlignment = Alignment.BottomCenter ) { Surface( modifier = Modifier.size(300.dp, 70.dp), - color = ToastBackground, + color = ImageviewerColors.ToastBackground, shape = RoundedCornerShape(4.dp) ) { Box(contentAlignment = Alignment.Center) { - Text( - text = text, - color = Foreground - ) + Text(value.message) } - LaunchedEffect(Unit) { - delay(duration.value.toLong()) - isShown = false - visibility.value = false + LaunchedEffect(value.message) { + delay(TOAST_DURATION) + state.value = ToastState.Hidden } } } } -} \ No newline at end of file +} diff --git a/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/Tooltip.common.kt b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/Tooltip.common.kt new file mode 100644 index 0000000000..e1fa2f7496 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/commonMain/kotlin/example/imageviewer/view/Tooltip.common.kt @@ -0,0 +1,9 @@ +package example.imageviewer.view + +import androidx.compose.runtime.Composable + +@Composable +internal expect fun Tooltip( + text: String, + content: @Composable () -> Unit +) diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/drawable/back.png b/experimental/examples/imageviewer/shared/src/commonMain/resources/back.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/drawable/back.png rename to experimental/examples/imageviewer/shared/src/commonMain/resources/back.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/drawable/blur_off.png b/experimental/examples/imageviewer/shared/src/commonMain/resources/blur_off.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/drawable/blur_off.png rename to experimental/examples/imageviewer/shared/src/commonMain/resources/blur_off.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/drawable/blur_on.png b/experimental/examples/imageviewer/shared/src/commonMain/resources/blur_on.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/drawable/blur_on.png rename to experimental/examples/imageviewer/shared/src/commonMain/resources/blur_on.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/drawable/dots.png b/experimental/examples/imageviewer/shared/src/commonMain/resources/dots.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/drawable/dots.png rename to experimental/examples/imageviewer/shared/src/commonMain/resources/dots.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/drawable/empty.png b/experimental/examples/imageviewer/shared/src/commonMain/resources/empty.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/drawable/empty.png rename to experimental/examples/imageviewer/shared/src/commonMain/resources/empty.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/drawable/grayscale_off.png b/experimental/examples/imageviewer/shared/src/commonMain/resources/grayscale_off.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/drawable/grayscale_off.png rename to experimental/examples/imageviewer/shared/src/commonMain/resources/grayscale_off.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/drawable/grayscale_on.png b/experimental/examples/imageviewer/shared/src/commonMain/resources/grayscale_on.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/drawable/grayscale_on.png rename to experimental/examples/imageviewer/shared/src/commonMain/resources/grayscale_on.png diff --git a/experimental/examples/imageviewer/common/src/desktopMain/resources/images/ic_imageviewer_round.png b/experimental/examples/imageviewer/shared/src/commonMain/resources/ic_imageviewer_round.png similarity index 100% rename from experimental/examples/imageviewer/common/src/desktopMain/resources/images/ic_imageviewer_round.png rename to experimental/examples/imageviewer/shared/src/commonMain/resources/ic_imageviewer_round.png diff --git a/experimental/examples/imageviewer/common/src/desktopMain/resources/images/icon-linux.png b/experimental/examples/imageviewer/shared/src/commonMain/resources/icon-linux.png similarity index 100% rename from experimental/examples/imageviewer/common/src/desktopMain/resources/images/icon-linux.png rename to experimental/examples/imageviewer/shared/src/commonMain/resources/icon-linux.png diff --git a/experimental/examples/imageviewer/common/src/desktopMain/resources/images/icon-mac.icns b/experimental/examples/imageviewer/shared/src/commonMain/resources/icon-mac.icns similarity index 100% rename from experimental/examples/imageviewer/common/src/desktopMain/resources/images/icon-mac.icns rename to experimental/examples/imageviewer/shared/src/commonMain/resources/icon-mac.icns diff --git a/experimental/examples/imageviewer/common/src/desktopMain/resources/images/icon-windows.ico b/experimental/examples/imageviewer/shared/src/commonMain/resources/icon-windows.ico similarity index 100% rename from experimental/examples/imageviewer/common/src/desktopMain/resources/images/icon-windows.ico rename to experimental/examples/imageviewer/shared/src/commonMain/resources/icon-windows.ico diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/drawable/pixel_off.png b/experimental/examples/imageviewer/shared/src/commonMain/resources/pixel_off.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/drawable/pixel_off.png rename to experimental/examples/imageviewer/shared/src/commonMain/resources/pixel_off.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/drawable/pixel_on.png b/experimental/examples/imageviewer/shared/src/commonMain/resources/pixel_on.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/drawable/pixel_on.png rename to experimental/examples/imageviewer/shared/src/commonMain/resources/pixel_on.png diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/drawable/refresh.png b/experimental/examples/imageviewer/shared/src/commonMain/resources/refresh.png similarity index 100% rename from experimental/examples/imageviewer/common/src/androidMain/res/drawable/refresh.png rename to experimental/examples/imageviewer/shared/src/commonMain/resources/refresh.png diff --git a/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/ImageBitmap.desktop.kt b/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/ImageBitmap.desktop.kt new file mode 100644 index 0000000000..a04dcda010 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/ImageBitmap.desktop.kt @@ -0,0 +1,8 @@ +package example.imageviewer + +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.toComposeImageBitmap +import org.jetbrains.skia.Image + +actual fun ByteArray.toImageBitmap(): ImageBitmap = + Image.makeFromEncoded(this).toComposeImageBitmap() diff --git a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/R.kt b/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/R.kt similarity index 100% rename from experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/R.kt rename to experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/R.kt diff --git a/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/model/filtration/BlurFilter.kt b/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/model/filtration/BlurFilter.kt new file mode 100755 index 0000000000..bbd1736347 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/model/filtration/BlurFilter.kt @@ -0,0 +1,14 @@ +package example.imageviewer.model.filtration + +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.toAwtImage +import androidx.compose.ui.graphics.toComposeImageBitmap +import example.imageviewer.core.BitmapFilter +import example.imageviewer.utils.applyBlurFilter + +class BlurFilter : BitmapFilter { + + override fun apply(bitmap: ImageBitmap): ImageBitmap { + return applyBlurFilter(bitmap.toAwtImage()).toComposeImageBitmap() + } +} diff --git a/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/model/filtration/GrayScaleFilter.kt b/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/model/filtration/GrayScaleFilter.kt new file mode 100755 index 0000000000..bc6c728b21 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/model/filtration/GrayScaleFilter.kt @@ -0,0 +1,14 @@ +package example.imageviewer.model.filtration + +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.toAwtImage +import androidx.compose.ui.graphics.toComposeImageBitmap +import example.imageviewer.core.BitmapFilter +import example.imageviewer.utils.applyGrayScaleFilter + +class GrayScaleFilter : BitmapFilter { + + override fun apply(bitmap: ImageBitmap): ImageBitmap { + return applyGrayScaleFilter(bitmap.toAwtImage()).toComposeImageBitmap() + } +} diff --git a/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/model/filtration/PixelFilter.kt b/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/model/filtration/PixelFilter.kt new file mode 100755 index 0000000000..e6820310e8 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/model/filtration/PixelFilter.kt @@ -0,0 +1,14 @@ +package example.imageviewer.model.filtration + +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.toAwtImage +import androidx.compose.ui.graphics.toComposeImageBitmap +import example.imageviewer.core.BitmapFilter +import example.imageviewer.utils.applyPixelFilter + +class PixelFilter : BitmapFilter { + + override fun apply(bitmap: ImageBitmap): ImageBitmap { + return applyPixelFilter(bitmap.toAwtImage()).toComposeImageBitmap() + } +} diff --git a/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/utils/Caching.kt b/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/utils/Caching.kt new file mode 100755 index 0000000000..e025d844fe --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/utils/Caching.kt @@ -0,0 +1,76 @@ +package example.imageviewer.utils + +import example.imageviewer.model.ContentRepository +import example.imageviewer.model.getNameURL +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch +import java.io.File +import kotlin.math.absoluteValue + +fun ContentRepository.decorateWithDiskCache( + backgroundScope: CoroutineScope, + cacheDir: File +): ContentRepository { + + class FileSystemLock + + val origin = this + val locksCount = 100 + val locks = Array(locksCount) { FileSystemLock() } + + fun getLock(url: String) = locks[url.hashCode().absoluteValue % locksCount] + + return object : ContentRepository { + init { + try { + if (!cacheDir.exists()) { + cacheDir.mkdirs() + } + } catch (t: Throwable) { + t.printStackTrace() + println("Can't create cache dir $cacheDir") + } + } + + override suspend fun loadContent(url: String): ByteArray { + if (!cacheDir.exists()) { + return origin.loadContent(url) + } + val file = cacheDir.resolve("cache-${getNameURL(url)}.png") + val fromCache: ByteArray? = synchronized(getLock(url)) { + if (file.exists()) { + try { + file.readBytes() + } catch (t: Throwable) { + t.printStackTrace() + println("Can't read file $file") + println("Will work without disk cache") + null + } + } else { + null + } + } + + val result = if (fromCache != null) { + fromCache + } else { + val image = origin.loadContent(url) + backgroundScope.launch { + synchronized(getLock(url)) { + // save to cacheDir + try { + file.writeBytes(image) + } catch (t: Throwable) { + println("Can't save image to file $file") + println("Will work without disk cache") + } + } + } + image + } + return result + } + + } +} diff --git a/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/utils/GraphicsMath.kt b/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/utils/GraphicsMath.kt new file mode 100755 index 0000000000..ca43fd5925 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/utils/GraphicsMath.kt @@ -0,0 +1,96 @@ +package example.imageviewer.utils + +import androidx.compose.ui.unit.DpSize +import androidx.compose.ui.unit.dp +import java.awt.Dimension +import java.awt.Toolkit +import java.awt.image.BufferedImage +import java.awt.image.ConvolveOp +import java.awt.image.Kernel + +fun scaleBitmapAspectRatio( + bitmap: BufferedImage, + width: Int, + height: Int +): BufferedImage { + val boundW: Float = width.toFloat() + val boundH: Float = height.toFloat() + + val ratioX: Float = boundW / bitmap.width + val ratioY: Float = boundH / bitmap.height + val ratio: Float = if (ratioX < ratioY) ratioX else ratioY + + val resultH = (bitmap.height * ratio).toInt() + val resultW = (bitmap.width * ratio).toInt() + + val result = BufferedImage(resultW, resultH, BufferedImage.TYPE_INT_ARGB) + val graphics = result.createGraphics() + graphics.drawImage(bitmap, 0, 0, resultW, resultH, null) + graphics.dispose() + + return result +} + +fun applyGrayScaleFilter(bitmap: BufferedImage): BufferedImage { + + val result = BufferedImage( + bitmap.width, + bitmap.height, + BufferedImage.TYPE_BYTE_GRAY + ) + + val graphics = result.graphics + graphics.drawImage(bitmap, 0, 0, null) + graphics.dispose() + + return result +} + +fun applyPixelFilter(bitmap: BufferedImage): BufferedImage { + + val w: Int = bitmap.width + val h: Int = bitmap.height + + var result = scaleBitmapAspectRatio(bitmap, w / 20, h / 20) + result = scaleBitmapAspectRatio(result, w, h) + + return result +} + +fun applyBlurFilter(bitmap: BufferedImage): BufferedImage { + + var result = BufferedImage(bitmap.width, bitmap.height, bitmap.type) + + val graphics = result.graphics + graphics.drawImage(bitmap, 0, 0, null) + graphics.dispose() + + val radius = 11 + val size = 11 + val weight: Float = 1.0f / (size * size) + val matrix = FloatArray(size * size) + + for (i in matrix.indices) { + matrix[i] = weight + } + + val kernel = Kernel(radius, size, matrix) + val op = ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null) + result = op.filter(result, null) + + return result.getSubimage( + radius, + radius, + result.width - radius * 2, + result.height - radius * 2 + ) +} + +fun getPreferredWindowSize(desiredWidth: Int, desiredHeight: Int): DpSize { + val screenSize: Dimension = Toolkit.getDefaultToolkit().screenSize + val preferredWidth: Int = (screenSize.width * 0.8f).toInt() + val preferredHeight: Int = (screenSize.height * 0.8f).toInt() + val width: Int = if (desiredWidth < preferredWidth) desiredWidth else preferredWidth + val height: Int = if (desiredHeight < preferredHeight) desiredHeight else preferredHeight + return DpSize(width.dp, height.dp) +} diff --git a/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/view/ImageViewer.desktop.kt b/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/view/ImageViewer.desktop.kt new file mode 100755 index 0000000000..9a4a6380ea --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/view/ImageViewer.desktop.kt @@ -0,0 +1,120 @@ +package example.imageviewer.view + +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material.Surface +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.ExperimentalComposeUiApi +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.input.key.Key +import androidx.compose.ui.input.key.KeyEventType +import androidx.compose.ui.input.key.key +import androidx.compose.ui.input.key.type +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.window.* +import example.imageviewer.* +import example.imageviewer.Notification +import example.imageviewer.core.BitmapFilter +import example.imageviewer.core.FilterType +import example.imageviewer.model.* +import example.imageviewer.model.State +import example.imageviewer.model.filtration.BlurFilter +import example.imageviewer.model.filtration.GrayScaleFilter +import example.imageviewer.model.filtration.PixelFilter +import example.imageviewer.style.ImageViewerTheme +import example.imageviewer.utils.decorateWithDiskCache +import example.imageviewer.utils.getPreferredWindowSize +import io.ktor.client.* +import io.ktor.client.engine.cio.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import java.io.File + +@OptIn(ExperimentalComposeUiApi::class) +@Composable +fun ApplicationScope.ImageViewerDesktop() { + val toastState = remember { mutableStateOf(ToastState.Hidden) } + val state = remember { mutableStateOf(State()) } + val ioScope: CoroutineScope = rememberCoroutineScope { Dispatchers.IO } + val dependencies = remember(ioScope) { getDependencies(ioScope, toastState) } + + Window( + onCloseRequest = ::exitApplication, + title = "Image Viewer", + state = WindowState( + position = WindowPosition.Aligned(Alignment.Center), + size = getPreferredWindowSize(800, 1000) + ), + icon = painterResource("ic_imageviewer_round.png"), + onKeyEvent = { + if (it.type == KeyEventType.KeyUp) { + when (it.key) { + Key.DirectionLeft -> state.previousImage() + Key.DirectionRight -> state.nextImage() + } + } + false + } + ) { + ImageViewerTheme { + Surface( + modifier = Modifier.fillMaxSize() + ) { + ImageViewerCommon( + state = state, + dependencies = dependencies + ) + Toast(toastState) + } + } + } +} + +private fun getDependencies(ioScope: CoroutineScope, toastState: MutableState) = object : Dependencies { + override val ioScope: CoroutineScope = ioScope + override fun getFilter(type: FilterType): BitmapFilter = when (type) { + FilterType.GrayScale -> GrayScaleFilter() + FilterType.Pixel -> PixelFilter() + FilterType.Blur -> BlurFilter() + } + + override val localization: Localization = object : Localization { + override val back: String get() = ResString.back + override val appName: String get() = ResString.appName + override val loading: String get() = ResString.loading + override val repoInvalid: String get() = ResString.repoInvalid + override val repoEmpty: String get() = ResString.repoEmpty + override val noInternet: String get() = ResString.noInternet + override val loadImageUnavailable: String get() = ResString.loadImageUnavailable + override val lastImage: String get() = ResString.lastImage + override val firstImage: String get() = ResString.firstImage + override val picture: String get() = ResString.picture + override val size: String get() = ResString.size + override val pixels: String get() = ResString.pixels + override val refreshUnavailable: String get() = ResString.refreshUnavailable + } + + override val httpClient: HttpClient = HttpClient(CIO) + + val userHome: String? = System.getProperty("user.home") + override val imageRepository: ContentRepository = + createNetworkRepository(httpClient) + .run { + if (userHome != null) { + decorateWithDiskCache( + ioScope, + File(userHome).resolve("Pictures").resolve("imageviewer") + ) + } else { + this + } + } + .adapter { it.toImageBitmap() } + + override val notification: Notification = object : PopupNotification(localization) { + override fun showPopUpMessage(text: String) { + toastState.value = ToastState.Shown(text) + } + } +} diff --git a/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/view/PreviewImage.desktop.kt b/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/view/PreviewImage.desktop.kt new file mode 100644 index 0000000000..1003194719 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/view/PreviewImage.desktop.kt @@ -0,0 +1,6 @@ +package example.imageviewer.view + +import androidx.compose.runtime.Composable + +@Composable +internal actual fun needShowPreview(): Boolean = true diff --git a/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/view/ScalaImage.desktop.kt b/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/view/ScalaImage.desktop.kt new file mode 100644 index 0000000000..23f214db17 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/view/ScalaImage.desktop.kt @@ -0,0 +1,29 @@ +package example.imageviewer.view + +import androidx.compose.foundation.gestures.detectDragGestures +import androidx.compose.runtime.MutableState +import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.input.pointer.PointerEventType +import androidx.compose.ui.input.pointer.pointerInput +import example.imageviewer.model.ScalableState +import example.imageviewer.model.addDragAmount +import example.imageviewer.model.addScale + +actual fun Modifier.addUserInput(state: MutableState): Modifier = + pointerInput(Unit) { + detectDragGestures { change, dragAmount: Offset -> + state.addDragAmount(dragAmount) + change.consume() + } + }.pointerInput(Unit) { + awaitPointerEventScope { + while (true) { + val event = awaitPointerEvent() + if (event.type == PointerEventType.Scroll) { + val delta = event.changes.getOrNull(0)?.scrollDelta ?: Offset.Zero + state.addScale(delta.y / 100) + } + } + } + } diff --git a/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/view/ScrollableColumn.desktop.kt b/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/view/ScrollableColumn.desktop.kt new file mode 100644 index 0000000000..48d18135c4 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/view/ScrollableColumn.desktop.kt @@ -0,0 +1,29 @@ +package example.imageviewer.view + +import androidx.compose.foundation.VerticalScrollbar +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.rememberScrollbarAdapter +import androidx.compose.foundation.verticalScroll +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp + +@Composable +actual fun ScrollableColumn(modifier: Modifier, content: @Composable () -> Unit) { + val scrollState = rememberScrollState() + Modifier.verticalScroll(scrollState) + + Box(modifier) { + Column(modifier.verticalScroll(scrollState)) { + content() + } + VerticalScrollbar( + modifier = Modifier.align(Alignment.CenterEnd) + .padding(4.dp) + .fillMaxHeight(), + adapter = rememberScrollbarAdapter(scrollState), + ) + } +} diff --git a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/view/Tooltip.kt b/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/view/Tooltip.desktop.kt similarity index 91% rename from experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/view/Tooltip.kt rename to experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/view/Tooltip.desktop.kt index 4cee5684fc..5848946793 100644 --- a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/view/Tooltip.kt +++ b/experimental/examples/imageviewer/shared/src/desktopMain/kotlin/example/imageviewer/view/Tooltip.desktop.kt @@ -1,22 +1,21 @@ package example.imageviewer.view -import androidx.compose.foundation.BoxWithTooltip import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.TooltipArea import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.MaterialTheme -import androidx.compose.material.Text import androidx.compose.material.Surface +import androidx.compose.material.Text import androidx.compose.runtime.Composable -import androidx.compose.ui.graphics.Color import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp @OptIn(ExperimentalFoundationApi::class) @Composable -fun Tooltip( - text: String = "Tooltip", +internal actual fun Tooltip( + text: String, content: @Composable () -> Unit ) { TooltipArea( diff --git a/experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/ImageBitmap.ios.kt b/experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/ImageBitmap.ios.kt new file mode 100644 index 0000000000..75df10bf0d --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/ImageBitmap.ios.kt @@ -0,0 +1,7 @@ +package example.imageviewer + +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.toComposeImageBitmap +import org.jetbrains.skia.Image + +actual fun ByteArray.toImageBitmap(): ImageBitmap = Image.makeFromEncoded(this).toComposeImageBitmap() diff --git a/experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/ImageViewer.ios.kt b/experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/ImageViewer.ios.kt new file mode 100755 index 0000000000..34dcbc76a1 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/ImageViewer.ios.kt @@ -0,0 +1,83 @@ +package example.imageviewer + +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material.Surface +import androidx.compose.runtime.* +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.ImageBitmap +import example.imageviewer.core.BitmapFilter +import example.imageviewer.core.FilterType +import example.imageviewer.model.ContentRepository +import example.imageviewer.model.State +import example.imageviewer.model.adapter +import example.imageviewer.model.createNetworkRepository +import example.imageviewer.style.ImageViewerTheme +import example.imageviewer.view.Toast +import example.imageviewer.view.ToastState +import io.ktor.client.* +import io.ktor.client.engine.darwin.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers + +@Composable +internal fun ImageViewerIos() { + val toastState = remember { mutableStateOf(ToastState.Hidden) } + val state = remember { mutableStateOf(State()) } + val ioScope: CoroutineScope = rememberCoroutineScope { Dispatchers.Default } + val dependencies = remember(ioScope) { getDependencies(ioScope, toastState) } + + ImageViewerTheme { + Surface( + modifier = Modifier.fillMaxSize() + ) { + ImageViewerCommon( + state = state, + dependencies = dependencies + ) + Toast(toastState) + } + } +} + +class StubFilter : BitmapFilter { + override fun apply(bitmap: ImageBitmap): ImageBitmap { + return bitmap + } +} + +private fun getDependencies(ioScope: CoroutineScope, toastState: MutableState) = object : Dependencies { + override val ioScope: CoroutineScope = ioScope + override fun getFilter(type: FilterType): BitmapFilter = when (type) { + FilterType.GrayScale -> StubFilter() + FilterType.Pixel -> StubFilter() + FilterType.Blur -> StubFilter() + } + + override val localization: Localization = object : Localization { + override val appName = "ImageViewer" + override val loading = "Loading images..." + override val repoEmpty = "Repository is empty." + override val noInternet = "No internet access." + override val repoInvalid = "List of images in current repository is invalid or empty." + override val refreshUnavailable = "Cannot refresh images." + override val loadImageUnavailable = "Cannot load full size image." + override val lastImage = "This is last image." + override val firstImage = "This is first image." + override val picture = "Picture:" + override val size = "Size:" + override val pixels = "pixels." + override val back = "Back" + } + + override val httpClient: HttpClient = HttpClient(Darwin) + + override val imageRepository: ContentRepository = + createNetworkRepository(httpClient) + .adapter { it.toImageBitmap() } + + override val notification: Notification = object : PopupNotification(localization) { + override fun showPopUpMessage(text: String) { + toastState.value = ToastState.Shown(text) + } + } +} diff --git a/experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/main.ios.kt b/experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/main.ios.kt new file mode 100644 index 0000000000..200417490f --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/main.ios.kt @@ -0,0 +1,21 @@ +package example.imageviewer + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.height +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.Application +import platform.UIKit.UIViewController + +fun MainViewController(): UIViewController = + Application("Imageviewer") { + Column { + // To skip upper part of screen. + Box( + modifier = Modifier + .height(30.dp) + ) + ImageViewerIos() + } + } diff --git a/experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/view/PreviewImage.ios.kt b/experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/view/PreviewImage.ios.kt new file mode 100644 index 0000000000..1003194719 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/view/PreviewImage.ios.kt @@ -0,0 +1,6 @@ +package example.imageviewer.view + +import androidx.compose.runtime.Composable + +@Composable +internal actual fun needShowPreview(): Boolean = true diff --git a/experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/view/ScrollableColumn.ios.kt b/experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/view/ScrollableColumn.ios.kt new file mode 100644 index 0000000000..7ef544a39d --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/view/ScrollableColumn.ios.kt @@ -0,0 +1,8 @@ +package example.imageviewer.view + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier + +@Composable +actual fun ScrollableColumn(modifier: Modifier, content: @Composable () -> Unit) = + TouchScrollableColumn(modifier, content) diff --git a/experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/view/Tooltip.ios.kt b/experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/view/Tooltip.ios.kt new file mode 100644 index 0000000000..3806b15180 --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/view/Tooltip.ios.kt @@ -0,0 +1,12 @@ +package example.imageviewer.view + +import androidx.compose.runtime.Composable + +@Composable +internal actual fun Tooltip( + text: String, + content: @Composable () -> Unit +) { + //No tooltip for iOS + content() +} diff --git a/experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/view/addUserInput.kt b/experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/view/addUserInput.kt new file mode 100644 index 0000000000..67889370aa --- /dev/null +++ b/experimental/examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/view/addUserInput.kt @@ -0,0 +1,8 @@ +package example.imageviewer.view + +import androidx.compose.runtime.MutableState +import androidx.compose.ui.Modifier +import example.imageviewer.model.ScalableState + +actual fun Modifier.addUserInput(state: MutableState): Modifier = + addTouchUserInput(state)

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 literal 0 HcmV?d00001 diff --git a/artwork/imageviewerrepo/small/6.jpg b/artwork/imageviewerrepo/small/6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4b8cc6c393e0e2d837012c4cdb3275aa0106ca06 GIT binary patch literal 48366 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 literal 0 HcmV?d00001 diff --git a/artwork/imageviewerrepo/small/7.jpg b/artwork/imageviewerrepo/small/7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..08335a4fe4a4b99cfda28ca01bb2875e0b68ad92 GIT binary patch literal 50261 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 literal 0 HcmV?d00001 diff --git a/artwork/imageviewerrepo/small/9.jpg b/artwork/imageviewerrepo/small/9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f7dc5754c13ad66c57be20102e97b484b331f62e GIT binary patch literal 26145 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 literal 0 HcmV?d00001 diff --git a/experimental/examples/imageviewer/.gitignore b/experimental/examples/imageviewer/.gitignore index a32b16597b..994fd0a8a4 100644 --- a/experimental/examples/imageviewer/.gitignore +++ b/experimental/examples/imageviewer/.gitignore @@ -13,3 +13,9 @@ build/ /captures .externalNativeBuild .cxx +iosApp/Podfile.lock +iosApp/Pods/* +iosApp/Imageviewer.xcworkspace/* +iosApp/Imageviewer.xcodeproj/* +!iosApp/Imageviewer.xcodeproj/project.pbxproj +shared/shared.podspec diff --git a/experimental/examples/imageviewer/.run/desktop.run.xml b/experimental/examples/imageviewer/.run/desktopApp.run.xml old mode 100755 new mode 100644 similarity index 63% rename from experimental/examples/imageviewer/.run/desktop.run.xml rename to experimental/examples/imageviewer/.run/desktopApp.run.xml index d9335c1be5..95395e11ee --- a/experimental/examples/imageviewer/.run/desktop.run.xml +++ b/experimental/examples/imageviewer/.run/desktopApp.run.xml @@ -1,8 +1,8 @@ - + - true + true + true + false \ No newline at end of file diff --git a/experimental/examples/imageviewer/.run/iosApp (AndroidStudio).run.xml b/experimental/examples/imageviewer/.run/iosApp (AndroidStudio).run.xml new file mode 100644 index 0000000000..9784842232 --- /dev/null +++ b/experimental/examples/imageviewer/.run/iosApp (AndroidStudio).run.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/experimental/examples/imageviewer/.run/iosApp.run.xml b/experimental/examples/imageviewer/.run/iosApp.run.xml new file mode 100644 index 0000000000..3a59900d23 --- /dev/null +++ b/experimental/examples/imageviewer/.run/iosApp.run.xml @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/experimental/examples/imageviewer/README.md b/experimental/examples/imageviewer/README.md index 3d79c52613..c9fca538d1 100755 --- a/experimental/examples/imageviewer/README.md +++ b/experimental/examples/imageviewer/README.md @@ -1,11 +1,27 @@ -An example of image gallery for remote server image viewing, based on Jetpack Compose UI library (desktop and android). +# Imageviewer -### Running desktop application - * To run, launch command: `./gradlew :desktop:run` - * Or choose **desktop** configuration in IDE and run it. - ![desktop-run-configuration.png](screenshots/desktop-run-configuration.png) +An example of image gallery for remote server image viewing, +based on Compose Multiplatform UI library (desktop, android and iOS). + +## How to run + +Choose a run configuration for an appropriate target in IDE and run it. + +![run-configurations.png](run-configurations.png) + +To run on iOS device, please correct `iosApp/Configuration/TeamId.xcconfig` with your Apple Team ID. +Alternatively, you may setup signing within XCode opening `iosApp/Imageviewer.xcworkspace` and then +using "Signing & Capabilities" tab of `ImageViewer` target. + +Then choose **iosApp** configuration in IDE and run it +(may also be referred as `ImageViewer` in the Run Configurations or `iosApp (AndroidStudio)` for Android studio). + +## Run on desktop via Gradle + +`./gradlew desktopApp:run` ### Building native desktop distribution + ``` ./gradlew :desktop:packageDistributionForCurrentOS # outputs are written to desktop/build/compose/binaries diff --git a/experimental/examples/imageviewer/android/build.gradle.kts b/experimental/examples/imageviewer/android/build.gradle.kts deleted file mode 100755 index d5807ca5f3..0000000000 --- a/experimental/examples/imageviewer/android/build.gradle.kts +++ /dev/null @@ -1,26 +0,0 @@ -plugins { - id("com.android.application") - kotlin("android") - id("org.jetbrains.compose") -} - -android { - compileSdk = 32 - - defaultConfig { - minSdk = 26 - targetSdk = 32 - versionCode = 1 - versionName = "1.0" - } - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 - } -} - -dependencies { - implementation(project(":common")) - implementation("androidx.activity:activity-compose:1.5.0") -} diff --git a/experimental/examples/imageviewer/android/src/main/java/example/imageviewer/MainActivity.kt b/experimental/examples/imageviewer/android/src/main/java/example/imageviewer/MainActivity.kt deleted file mode 100755 index 53bb8c6160..0000000000 --- a/experimental/examples/imageviewer/android/src/main/java/example/imageviewer/MainActivity.kt +++ /dev/null @@ -1,23 +0,0 @@ -package example.imageviewer - -import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity -import androidx.activity.compose.setContent -import example.imageviewer.view.AppUI -import example.imageviewer.model.ContentState -import example.imageviewer.model.ImageRepository - -class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - val content = ContentState.applyContent( - this@MainActivity, - "https://raw.githubusercontent.com/JetBrains/compose-jb/master/artwork/imageviewerrepo/fetching.list" - ) - - setContent { - AppUI(content) - } - } -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/androidApp/build.gradle.kts b/experimental/examples/imageviewer/androidApp/build.gradle.kts new file mode 100755 index 0000000000..cdb92d493a --- /dev/null +++ b/experimental/examples/imageviewer/androidApp/build.gradle.kts @@ -0,0 +1,33 @@ +plugins { + kotlin("multiplatform") + id("com.android.application") + id("org.jetbrains.compose") +} + +kotlin { + android() + sourceSets { + val androidMain by getting { + dependencies { + implementation(project(":shared")) + implementation("androidx.appcompat:appcompat:1.5.1") + implementation("androidx.activity:activity-compose:1.6.1") + } + } + } +} + +android { + compileSdk = 33 + defaultConfig { + applicationId = "org.jetbrains.imageviewer" + minSdk = 24 + targetSdk = 33 + versionCode = 1 + versionName = "1.0" + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } +} diff --git a/experimental/examples/imageviewer/android/src/main/AndroidManifest.xml b/experimental/examples/imageviewer/androidApp/src/main/AndroidManifest.xml similarity index 91% rename from experimental/examples/imageviewer/android/src/main/AndroidManifest.xml rename to experimental/examples/imageviewer/androidApp/src/main/AndroidManifest.xml index 5b1501c058..025f2c4a29 100755 --- a/experimental/examples/imageviewer/android/src/main/AndroidManifest.xml +++ b/experimental/examples/imageviewer/androidApp/src/main/AndroidManifest.xml @@ -5,7 +5,6 @@ - - \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/core/BitmapFilter.kt b/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/core/BitmapFilter.kt deleted file mode 100755 index bf5d0b8c88..0000000000 --- a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/core/BitmapFilter.kt +++ /dev/null @@ -1,7 +0,0 @@ -package example.imageviewer.core - -import android.graphics.Bitmap - -interface BitmapFilter { - fun apply(bitmap: Bitmap) : Bitmap -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/AndroidContentState.kt b/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/AndroidContentState.kt deleted file mode 100644 index 00d4b026bc..0000000000 --- a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/AndroidContentState.kt +++ /dev/null @@ -1,383 +0,0 @@ -package example.imageviewer.model - -import android.content.Context -import android.graphics.* -import android.os.Handler -import android.os.Looper -import androidx.compose.runtime.MutableState -import androidx.compose.runtime.mutableStateOf -import example.imageviewer.common.R -import example.imageviewer.core.FilterType -import example.imageviewer.model.filtration.FiltersManager -import example.imageviewer.utils.clearCache -import example.imageviewer.utils.isInternetAvailable -import example.imageviewer.view.showPopUpMessage -import java.util.concurrent.ExecutorService -import java.util.concurrent.Executors - - -object ContentState { - - private lateinit var context: Context - private lateinit var repository: ImageRepository - private lateinit var uriRepository: String - - fun applyContent(context: Context, uriRepository: String): ContentState { - if (this::uriRepository.isInitialized && this.uriRepository == uriRepository) { - return this - } - - this.context = context - this.uriRepository = uriRepository - repository = ImageRepository(uriRepository) - appliedFilters = FiltersManager(context) - isContentReady.value = false - - initData() - - return this - } - - private val executor: ExecutorService by lazy { Executors.newFixedThreadPool(2) } - - private val handler: Handler by lazy { Handler(Looper.getMainLooper()) } - - fun getContext(): Context { - return context - } - - fun getOrientation(): Int { - return context.resources.configuration.orientation - } - - private val isAppReady = mutableStateOf(false) - fun isAppReady(): Boolean { - return isAppReady.value - } - - private val isContentReady = mutableStateOf(false) - fun isContentReady(): Boolean { - return isContentReady.value - } - - fun getString(id: Int): String { - return context.getString(id) - } - - // drawable content - private val mainImage = mutableStateOf(Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888)) - private val currentImageIndex = mutableStateOf(0) - private val miniatures = Miniatures() - - fun getMiniatures(): List { - return miniatures.getMiniatures() - } - - fun getSelectedImage(): Bitmap { - return mainImage.value - } - - fun getSelectedImageName(): String { - return MainImageWrapper.getName() - } - - // filters managing - private lateinit var appliedFilters: FiltersManager - private val filterUIState: MutableMap> = LinkedHashMap() - - private fun toggleFilterState(filter: FilterType) { - - if (!filterUIState.containsKey(filter)) { - filterUIState[filter] = mutableStateOf(true) - } else { - val value = filterUIState[filter]!!.value - filterUIState[filter]!!.value = !value - } - } - - fun toggleFilter(filter: FilterType) { - - if (containsFilter(filter)) { - removeFilter(filter) - } else { - addFilter(filter) - } - - toggleFilterState(filter) - - var bitmap = MainImageWrapper.origin - - if (bitmap != null) { - bitmap = appliedFilters.applyFilters(bitmap) - MainImageWrapper.setImage(bitmap) - mainImage.value = bitmap - } - } - - private fun addFilter(filter: FilterType) { - appliedFilters.add(filter) - MainImageWrapper.addFilter(filter) - } - - private fun removeFilter(filter: FilterType) { - appliedFilters.remove(filter) - MainImageWrapper.removeFilter(filter) - } - - private fun containsFilter(type: FilterType): Boolean { - return appliedFilters.contains(type) - } - - fun isFilterEnabled(type: FilterType): Boolean { - if (!filterUIState.containsKey(type)) { - filterUIState[type] = mutableStateOf(false) - } - return filterUIState[type]!!.value - } - - private fun restoreFilters(): Bitmap { - filterUIState.clear() - appliedFilters.clear() - return MainImageWrapper.restore() - } - - fun restoreMainImage() { - mainImage.value = restoreFilters() - } - - // application content initialization - private fun initData() { - if (isContentReady.value) - return - - val directory = context.cacheDir.absolutePath - - executor.execute { - try { - if (isInternetAvailable()) { - val imageList = repository.get() - - if (imageList.isEmpty()) { - handler.post { - showPopUpMessage( - getString(R.string.repo_invalid), - context - ) - onContentReady() - } - return@execute - } - - val pictureList = loadImages(directory, imageList) - - if (pictureList.isEmpty()) { - handler.post { - showPopUpMessage( - getString(R.string.repo_empty), - context - ) - onContentReady() - } - } else { - val picture = loadFullImage(imageList[0]) - - handler.post { - miniatures.setMiniatures(pictureList) - - if (isMainImageEmpty()) { - wrapPictureIntoMainImage(picture) - } else { - appliedFilters.add(MainImageWrapper.getFilters()) - mainImage.value = MainImageWrapper.getImage() - currentImageIndex.value = MainImageWrapper.getId() - } - onContentReady() - } - } - } else { - handler.post { - showPopUpMessage( - getString(R.string.no_internet), - context - ) - onContentReady() - } - } - } catch (e: Exception) { - e.printStackTrace() - } - } - } - - // preview/fullscreen image managing - fun isMainImageEmpty(): Boolean { - return MainImageWrapper.isEmpty() - } - - fun fullscreen(picture: Picture) { - isContentReady.value = false - AppState.screenState(ScreenType.FullscreenImage) - setMainImage(picture) - } - - fun setMainImage(picture: Picture) { - if (MainImageWrapper.getId() == picture.id) { - if (!isContentReady()) - onContentReady() - return - } - isContentReady.value = false - - executor.execute { - if (isInternetAvailable()) { - - val fullSizePicture = loadFullImage(picture.source) - fullSizePicture.id = picture.id - - handler.post { - wrapPictureIntoMainImage(fullSizePicture) - onContentReady() - } - } else { - handler.post { - showPopUpMessage( - "${getString(R.string.no_internet)}\n${getString(R.string.load_image_unavailable)}", - context - ) - wrapPictureIntoMainImage(picture) - } - } - } - } - - private fun onContentReady() { - isContentReady.value = true - isAppReady.value = true - } - - private fun wrapPictureIntoMainImage(picture: Picture) { - MainImageWrapper.wrapPicture(picture) - MainImageWrapper.saveOrigin() - mainImage.value = picture.image - currentImageIndex.value = picture.id - } - - fun swipeNext() { - if (currentImageIndex.value == miniatures.size() - 1) { - showPopUpMessage( - getString(R.string.last_image), - context - ) - return - } - - restoreFilters() - setMainImage(miniatures.get(++currentImageIndex.value)) - } - - fun swipePrevious() { - if (currentImageIndex.value == 0) { - showPopUpMessage( - getString(R.string.first_image), - context - ) - return - } - - restoreFilters() - setMainImage(miniatures.get(--currentImageIndex.value)) - } - - fun refresh() { - executor.execute { - if (isInternetAvailable()) { - handler.post { - clearCache(context) - MainImageWrapper.clear() - miniatures.clear() - isContentReady.value = false - initData() - } - } else { - handler.post { - showPopUpMessage( - "${getString(R.string.no_internet)}\n${getString(R.string.refresh_unavailable)}", - context - ) - } - } - } - } -} - -private object MainImageWrapper { - // origin image - var origin: Bitmap? = null - private set - - fun saveOrigin() { - origin = copy(picture.value.image) - } - - fun restore(): Bitmap { - - if (origin != null) { - filtersSet.clear() - picture.value.image = copy(origin!!) - } - - return copy(picture.value.image) - } - - // picture adapter - private var picture = mutableStateOf( - Picture(image = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888)) - ) - - fun wrapPicture(picture: Picture) { - this.picture.value = picture - } - - fun setImage(bitmap: Bitmap) { - picture.value.image = bitmap - } - - fun isEmpty(): Boolean { - return (picture.value.name == "") - } - - fun clear() { - picture.value = Picture(image = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888)) - } - - fun getName(): String { - return picture.value.name - } - - fun getImage(): Bitmap { - return picture.value.image - } - - fun getId(): Int { - return picture.value.id - } - - // applied filters - private var filtersSet: MutableSet = LinkedHashSet() - - fun addFilter(filter: FilterType) { - filtersSet.add(filter) - } - - fun removeFilter(filter: FilterType) { - filtersSet.remove(filter) - } - - fun getFilters(): Set { - return filtersSet - } - - private fun copy(bitmap: Bitmap): Bitmap { - return bitmap.copy(bitmap.config, false) - } -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/ImageHandler.kt b/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/ImageHandler.kt deleted file mode 100755 index 627b36ac5a..0000000000 --- a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/ImageHandler.kt +++ /dev/null @@ -1,131 +0,0 @@ -package example.imageviewer.model - -import android.graphics.Bitmap -import android.graphics.BitmapFactory -import example.imageviewer.utils.cacheImage -import example.imageviewer.utils.cacheImagePostfix -import example.imageviewer.utils.scaleBitmapAspectRatio -import example.imageviewer.utils.toPx -import java.io.File -import java.io.FileInputStream -import java.io.InputStream -import java.io.InputStreamReader -import java.io.BufferedReader -import java.lang.Exception -import java.net.HttpURLConnection -import java.net.URL -import java.nio.charset.StandardCharsets - -fun loadFullImage(source: String): Picture { - try { - val url = URL(source) - val connection: HttpURLConnection = url.openConnection() as HttpURLConnection - connection.connectTimeout = 5000 - connection.connect() - - val input: InputStream = connection.inputStream - val bitmap: Bitmap? = BitmapFactory.decodeStream(input) - if (bitmap != null) { - return Picture( - source = source, - image = bitmap, - name = getNameURL(source), - width = bitmap.width, - height = bitmap.height - ) - } - } catch (e: Exception) { - e.printStackTrace() - } - - return Picture(image = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888)) -} - -fun loadImages(cachePath: String, list: List): MutableList { - val result: MutableList = ArrayList() - - for (source in list) { - val name = getNameURL(source) - val path = cachePath + File.separator + name - - if (File(path + "info").exists()) { - addCachedMiniature(filePath = path, outList = result) - } else { - addFreshMiniature(source = source, outList = result, path = cachePath) - } - - result.last().id = result.size - 1 - } - - return result -} - -private fun addFreshMiniature( - source: String, - outList: MutableList, - path: String -) { - try { - val url = URL(source) - val connection: HttpURLConnection = url.openConnection() as HttpURLConnection - connection.connectTimeout = 5000 - connection.connect() - - val input: InputStream = connection.inputStream - val result: Bitmap? = BitmapFactory.decodeStream(input) - - if (result != null) { - val picture = Picture( - source, - getNameURL(source), - scaleBitmapAspectRatio(result, 200, 164), - result.width, - result.height - ) - - outList.add(picture) - cacheImage(path + getNameURL(source), picture) - } - } catch (e: Exception) { - e.printStackTrace() - } -} - -private fun addCachedMiniature( - filePath: String, - outList: MutableList -) { - try { - val read = BufferedReader( - InputStreamReader( - FileInputStream(filePath + cacheImagePostfix), - StandardCharsets.UTF_8 - ) - ) - - val source = read.readLine() - val width = read.readLine().toInt() - val height = read.readLine().toInt() - - read.close() - - val result: Bitmap? = BitmapFactory.decodeFile(filePath) - - if (result != null) { - val picture = Picture( - source, - getNameURL(source), - result, - width, - height - ) - outList.add(picture) - } - } catch (e: Exception) { - e.printStackTrace() - } -} - -private fun getNameURL(url: String): String { - return url.substring(url.lastIndexOf('/') + 1, url.length) -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/Picture.kt b/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/Picture.kt deleted file mode 100755 index 50a9f33b0d..0000000000 --- a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/Picture.kt +++ /dev/null @@ -1,12 +0,0 @@ -package example.imageviewer.model - -import android.graphics.Bitmap - -actual data class Picture( - var source: String = "", - var name: String = "", - var image: Bitmap, - var width: Int = 0, - var height: Int = 0, - var id: Int = 0 -) \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/filtration/BlurFilter.kt b/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/filtration/BlurFilter.kt deleted file mode 100755 index aea277489c..0000000000 --- a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/filtration/BlurFilter.kt +++ /dev/null @@ -1,13 +0,0 @@ -package example.imageviewer.model.filtration - -import android.content.Context -import android.graphics.Bitmap -import example.imageviewer.core.BitmapFilter -import example.imageviewer.utils.applyBlurFilter - -class BlurFilter(private val context: Context) : BitmapFilter { - - override fun apply(bitmap: Bitmap): Bitmap { - return applyBlurFilter(bitmap, context) - } -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/filtration/EmptyFilter.kt b/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/filtration/EmptyFilter.kt deleted file mode 100755 index 2f31b01069..0000000000 --- a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/filtration/EmptyFilter.kt +++ /dev/null @@ -1,12 +0,0 @@ -package example.imageviewer.model.filtration - - -import android.graphics.Bitmap -import example.imageviewer.core.BitmapFilter - -class EmptyFilter : BitmapFilter { - - override fun apply(bitmap: Bitmap): Bitmap { - return bitmap - } -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/filtration/FiltersManager.kt b/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/filtration/FiltersManager.kt deleted file mode 100755 index 35f16ab315..0000000000 --- a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/filtration/FiltersManager.kt +++ /dev/null @@ -1,54 +0,0 @@ -package example.imageviewer.model.filtration - -import android.content.Context -import android.graphics.Bitmap -import example.imageviewer.core.BitmapFilter -import example.imageviewer.core.FilterType - -class FiltersManager(private val context: Context) { - - private var filtersMap: MutableMap = LinkedHashMap() - - fun clear() { - filtersMap = LinkedHashMap() - } - - fun add(filters: Collection) { - - for (filter in filters) - add(filter) - } - - fun add(filter: FilterType) { - - if (!filtersMap.containsKey(filter)) - filtersMap[filter] = getFilter(filter, context) - } - - fun remove(filter: FilterType) { - filtersMap.remove(filter) - } - - fun contains(filter: FilterType): Boolean { - return filtersMap.contains(filter) - } - - fun applyFilters(bitmap: Bitmap): Bitmap { - - var result: Bitmap = bitmap - for (filter in filtersMap) { - result = filter.value.apply(result) - } - - return result - } -} - -private fun getFilter(type: FilterType, context: Context): BitmapFilter { - - return when (type) { - FilterType.GrayScale -> GrayScaleFilter() - FilterType.Pixel -> PixelFilter() - FilterType.Blur -> BlurFilter(context) - } -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/filtration/GrayScaleFilter.kt b/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/filtration/GrayScaleFilter.kt deleted file mode 100755 index 5567048d68..0000000000 --- a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/filtration/GrayScaleFilter.kt +++ /dev/null @@ -1,12 +0,0 @@ -package example.imageviewer.model.filtration - -import android.graphics.Bitmap -import example.imageviewer.core.BitmapFilter -import example.imageviewer.utils.applyGrayScaleFilter - -class GrayScaleFilter : BitmapFilter { - - override fun apply(bitmap: Bitmap) : Bitmap { - return applyGrayScaleFilter(bitmap) - } -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/filtration/PixelFilter.kt b/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/filtration/PixelFilter.kt deleted file mode 100755 index a269b37f4a..0000000000 --- a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/model/filtration/PixelFilter.kt +++ /dev/null @@ -1,12 +0,0 @@ -package example.imageviewer.model.filtration - -import android.graphics.Bitmap -import example.imageviewer.core.BitmapFilter -import example.imageviewer.utils.applyPixelFilter - -class PixelFilter : BitmapFilter { - - override fun apply(bitmap: Bitmap): Bitmap { - return applyPixelFilter(bitmap) - } -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/style/Decoration.kt b/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/style/Decoration.kt deleted file mode 100755 index 77cea5c2be..0000000000 --- a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/style/Decoration.kt +++ /dev/null @@ -1,38 +0,0 @@ -package example.imageviewer.style - -import androidx.compose.runtime.Composable -import androidx.compose.ui.res.painterResource -import example.imageviewer.common.R - -@Composable -fun icEmpty() = painterResource(R.drawable.empty) - -@Composable -fun icBack() = painterResource(R.drawable.back) - -@Composable -fun icRefresh() = painterResource(R.drawable.refresh) - -@Composable -fun icDots() = painterResource(R.drawable.dots) - -@Composable -fun icFilterGrayscaleOn() = painterResource(R.drawable.grayscale_on) - -@Composable -fun icFilterGrayscaleOff() = painterResource(R.drawable.grayscale_off) - -@Composable -fun icFilterPixelOn() = painterResource(R.drawable.pixel_on) - -@Composable -fun icFilterPixelOff() = painterResource(R.drawable.pixel_off) - -@Composable -fun icFilterBlurOn() = painterResource(R.drawable.blur_on) - -@Composable -fun icFilterBlurOff() = painterResource(R.drawable.blur_off) - -@Composable -fun icFilterUnknown() = painterResource(R.drawable.filter_unknown) diff --git a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/utils/Caching.kt b/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/utils/Caching.kt deleted file mode 100755 index 7059938cb8..0000000000 --- a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/utils/Caching.kt +++ /dev/null @@ -1,52 +0,0 @@ -package example.imageviewer.utils - -import android.content.Context -import android.graphics.* -import example.imageviewer.model.Picture -import java.io.File -import java.io.BufferedWriter -import java.io.OutputStreamWriter -import java.io.FileOutputStream -import java.io.IOException -import java.nio.charset.StandardCharsets - -val cacheImagePostfix = "info" - -fun cacheImage(path: String, picture: Picture) { - try { - FileOutputStream(path).use { out -> - picture.image.compress(Bitmap.CompressFormat.PNG, 100, out) - } - - val bw = - BufferedWriter( - OutputStreamWriter( - FileOutputStream(path + cacheImagePostfix), StandardCharsets.UTF_8 - ) - ) - - bw.write(picture.source) - bw.write("\r\n${picture.width}") - bw.write("\r\n${picture.height}") - bw.close() - - } catch (e: IOException) { - e.printStackTrace() - } -} - -fun clearCache(context: Context) { - - val directory = File(context.cacheDir.absolutePath) - - val files: Array? = directory.listFiles() - - if (files != null) { - for (file in files) { - if (file.isDirectory) - continue - - file.delete() - } - } -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/utils/Coroutines.kt b/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/utils/Coroutines.kt deleted file mode 100644 index ab006ef147..0000000000 --- a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/utils/Coroutines.kt +++ /dev/null @@ -1,9 +0,0 @@ -package example.imageviewer.utils - -import kotlinx.coroutines.CoroutineScope -import kotlin.coroutines.CoroutineContext - -actual fun runBlocking( - context: CoroutineContext, - block: suspend CoroutineScope.() -> T -): T = kotlinx.coroutines.runBlocking(context, block) \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/utils/GraphicsMath.kt b/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/utils/GraphicsMath.kt deleted file mode 100755 index 32e234da08..0000000000 --- a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/utils/GraphicsMath.kt +++ /dev/null @@ -1,195 +0,0 @@ -package example.imageviewer.utils - -import android.content.Context -import android.content.res.Resources -import android.graphics.* -import android.renderscript.Allocation -import android.renderscript.Element -import android.renderscript.RenderScript -import android.renderscript.ScriptIntrinsicBlur -import androidx.compose.ui.layout.ContentScale -import kotlin.math.pow -import kotlin.math.roundToInt -import example.imageviewer.view.DragHandler - -fun scaleBitmapAspectRatio( - bitmap: Bitmap, - width: Int, - height: Int, - filter: Boolean = false -): Bitmap { - val boundW: Float = width.toFloat() - val boundH: Float = height.toFloat() - - val ratioX: Float = boundW / bitmap.width - val ratioY: Float = boundH / bitmap.height - val ratio: Float = if (ratioX < ratioY) ratioX else ratioY - - val resultH = (bitmap.height * ratio).toInt() - val resultW = (bitmap.width * ratio).toInt() - - return Bitmap.createScaledBitmap(bitmap, resultW, resultH, filter) -} - -fun getDisplayBounds(bitmap: Bitmap): Rect { - - val boundW: Float = displayWidth().toFloat() - val boundH: Float = displayHeight().toFloat() - - val ratioX: Float = bitmap.width / boundW - val ratioY: Float = bitmap.height / boundH - val ratio: Float = if (ratioX > ratioY) ratioX else ratioY - val resultW = (boundW * ratio) - val resultH = (boundH * ratio) - - return Rect(0, 0, resultW.toInt(), resultH.toInt()) -} - -fun applyGrayScaleFilter(bitmap: Bitmap): Bitmap { - - val result: Bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true) - - val canvas = Canvas(result) - - val colorMatrix = ColorMatrix() - colorMatrix.setSaturation(0f) - - val paint = Paint() - paint.colorFilter = ColorMatrixColorFilter(colorMatrix) - - canvas.drawBitmap(result, 0f, 0f, paint) - - return result -} - -fun applyPixelFilter(bitmap: Bitmap): Bitmap { - - var result: Bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true) - val w: Int = bitmap.width - val h: Int = bitmap.height - result = scaleBitmapAspectRatio(result, w / 20, h / 20) - result = scaleBitmapAspectRatio(result, w, h) - - return result -} - -fun applyBlurFilter(bitmap: Bitmap, context: Context): Bitmap { - - val result: Bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true) - - val renderScript: RenderScript = RenderScript.create(context) - - val tmpIn: Allocation = Allocation.createFromBitmap(renderScript, bitmap) - val tmpOut: Allocation = Allocation.createFromBitmap(renderScript, result) - - val theIntrinsic: ScriptIntrinsicBlur = - ScriptIntrinsicBlur.create(renderScript, Element.U8_4(renderScript)) - - theIntrinsic.setRadius(25f) - theIntrinsic.setInput(tmpIn) - theIntrinsic.forEach(tmpOut) - - tmpOut.copyTo(result) - - return result -} - -fun adjustImageScale(bitmap: Bitmap): ContentScale { - val bitmapRatio = (10 * bitmap.width.toFloat() / bitmap.height).toInt() - val displayRatio = (10 * displayWidth().toFloat() / displayHeight()).toInt() - - if (displayRatio > bitmapRatio) { - return ContentScale.FillHeight - } - return ContentScale.FillWidth -} - -fun toPx(dp: Int): Int { - return (dp * Resources.getSystem().displayMetrics.density).toInt() -} - -fun toDp(px: Int): Int { - return (px / Resources.getSystem().displayMetrics.density).toInt() -} - -fun displayWidth(): Int { - return Resources.getSystem().displayMetrics.widthPixels -} - -fun displayHeight(): Int { - return Resources.getSystem().displayMetrics.heightPixels -} - -fun cropBitmapByScale(bitmap: Bitmap, scale: Float, drag: DragHandler): Bitmap { - val crop = cropBitmapByBounds( - bitmap, - getDisplayBounds(bitmap), - scale, - drag - ) - return Bitmap.createBitmap( - bitmap, - crop.left, - crop.top, - crop.right - crop.left, - crop.bottom - crop.top - ) -} - -fun cropBitmapByBounds( - bitmap: Bitmap, - bounds: Rect, - scaleFactor: Float, - drag: DragHandler -): Rect { - if (scaleFactor <= 1f) - return Rect(0, 0, bitmap.width, bitmap.height) - - var scale = scaleFactor.toDouble().pow(1.4) - - var boundW = (bounds.width() / scale).roundToInt() - var boundH = (bounds.height() / scale).roundToInt() - - scale *= displayWidth() / bounds.width().toDouble() - - val offsetX = drag.getAmount().x / scale - val offsetY = drag.getAmount().y / scale - - if (boundW > bitmap.width) { - boundW = bitmap.width - } - if (boundH > bitmap.height) { - boundH = bitmap.height - } - - val invisibleW = bitmap.width - boundW - var leftOffset = (invisibleW / 2.0 - offsetX).roundToInt().toFloat() - - if (leftOffset > invisibleW) { - leftOffset = invisibleW.toFloat() - drag.getAmount().x = -((invisibleW / 2.0) * scale).roundToInt().toFloat() - } - if (leftOffset < 0) { - drag.getAmount().x = ((invisibleW / 2.0) * scale).roundToInt().toFloat() - leftOffset = 0f - } - - val invisibleH = bitmap.height - boundH - var topOffset = (invisibleH / 2 - offsetY).roundToInt().toFloat() - - if (topOffset > invisibleH) { - topOffset = invisibleH.toFloat() - drag.getAmount().y = -((invisibleH / 2.0) * scale).roundToInt().toFloat() - } - if (topOffset < 0) { - drag.getAmount().y = ((invisibleH / 2.0) * scale).roundToInt().toFloat() - topOffset = 0f - } - - return Rect( - leftOffset.toInt(), - topOffset.toInt(), - (leftOffset + boundW).toInt(), - (topOffset + boundH).toInt() - ) -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/view/AppUI.kt b/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/view/AppUI.kt deleted file mode 100755 index dacce3b7c3..0000000000 --- a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/view/AppUI.kt +++ /dev/null @@ -1,40 +0,0 @@ -package example.imageviewer.view - -import android.content.Context -import android.widget.Toast -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.material.Surface -import androidx.compose.runtime.MutableState -import androidx.compose.runtime.mutableStateOf -import example.imageviewer.model.AppState -import example.imageviewer.model.ScreenType -import example.imageviewer.model.ContentState -import example.imageviewer.style.Gray - -@Composable -fun AppUI(content: ContentState) { - - Surface( - modifier = Modifier.fillMaxSize(), - color = Gray - ) { - when (AppState.screenState()) { - ScreenType.MainScreen -> { - MainScreen(content) - } - ScreenType.FullscreenImage -> { - FullscreenImage(content) - } - } - } -} - -fun showPopUpMessage(text: String, context: Context) { - Toast.makeText( - context, - text, - Toast.LENGTH_SHORT - ).show() -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/view/FullscreenImage.kt b/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/view/FullscreenImage.kt deleted file mode 100644 index 1c0e7d73b4..0000000000 --- a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/view/FullscreenImage.kt +++ /dev/null @@ -1,197 +0,0 @@ -package example.imageviewer.view - -import android.graphics.Bitmap -import android.graphics.Rect -import androidx.compose.foundation.Image -import androidx.compose.foundation.background -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.horizontalScroll -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.shape.CircleShape -import androidx.compose.material.CircularProgressIndicator -import androidx.compose.material.MaterialTheme -import androidx.compose.material.Surface -import androidx.compose.material.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.asImageBitmap -import androidx.compose.ui.graphics.painter.Painter -import androidx.compose.ui.graphics.ImageBitmap -import androidx.compose.ui.unit.dp -import example.imageviewer.core.FilterType -import example.imageviewer.model.AppState -import example.imageviewer.model.ContentState -import example.imageviewer.model.ScreenType -import example.imageviewer.style.DarkGray -import example.imageviewer.style.DarkGreen -import example.imageviewer.style.Foreground -import example.imageviewer.style.MiniatureColor -import example.imageviewer.style.Transparent -import example.imageviewer.style.icBack -import example.imageviewer.style.icFilterBlurOff -import example.imageviewer.style.icFilterBlurOn -import example.imageviewer.style.icFilterGrayscaleOff -import example.imageviewer.style.icFilterGrayscaleOn -import example.imageviewer.style.icFilterPixelOff -import example.imageviewer.style.icFilterPixelOn -import example.imageviewer.utils.adjustImageScale -import example.imageviewer.utils.cropBitmapByScale -import example.imageviewer.utils.displayWidth -import example.imageviewer.utils.getDisplayBounds -import kotlin.math.abs -import kotlin.math.pow -import kotlin.math.roundToInt - -@Composable -fun FullscreenImage( - content: ContentState -) { - Column { - ToolBar(content.getSelectedImageName(), content) - Image(content) - } - if (!content.isContentReady()) { - LoadingScreen() - } -} - -@Composable -fun ToolBar( - text: String, - content: ContentState -) { - val scrollState = rememberScrollState() - Surface(color = MiniatureColor, modifier = Modifier.height(44.dp)) { - Row(modifier = Modifier.padding(end = 30.dp)) { - Surface( - color = Transparent, - modifier = Modifier.padding(start = 20.dp).align(Alignment.CenterVertically), - shape = CircleShape - ) { - Clickable( - onClick = { - if (content.isContentReady()) { - content.restoreMainImage() - AppState.screenState(ScreenType.MainScreen) - } - }) { - Image( - icBack(), - contentDescription = null, - modifier = Modifier.size(38.dp) - ) - } - } - Text( - text, - color = Foreground, - maxLines = 1, - modifier = Modifier.padding(start = 30.dp).weight(1f) - .align(Alignment.CenterVertically), - style = MaterialTheme.typography.body1 - ) - - Surface( - color = Color(255, 255, 255, 40), - modifier = Modifier.size(154.dp, 38.dp) - .align(Alignment.CenterVertically), - shape = CircleShape - ) { - Row(Modifier.horizontalScroll(scrollState)) { - for (type in FilterType.values()) { - FilterButton(content, type) - } - } - } - } - } -} - -@Composable -fun FilterButton( - content: ContentState, - type: FilterType, - modifier: Modifier = Modifier.size(38.dp) -) { - Box( - modifier = Modifier.background(color = Transparent).clip(CircleShape) - ) { - Clickable( - onClick = { content.toggleFilter(type) } - ) { - Image( - getFilterImage(type = type, content = content), - contentDescription = null, - modifier - ) - } - } - - Spacer(Modifier.width(20.dp)) -} - -@Composable -fun getFilterImage(type: FilterType, content: ContentState): Painter { - return when (type) { - FilterType.GrayScale -> if (content.isFilterEnabled(type)) icFilterGrayscaleOn() else icFilterGrayscaleOff() - FilterType.Pixel -> if (content.isFilterEnabled(type)) icFilterPixelOn() else icFilterPixelOff() - FilterType.Blur -> if (content.isFilterEnabled(type)) icFilterBlurOn() else icFilterBlurOff() - } -} - -@Composable -fun Image(content: ContentState) { - val drag = remember { DragHandler() } - val scale = remember { ScaleHandler() } - - Surface( - color = DarkGray, - modifier = Modifier.fillMaxSize() - ) { - Draggable(dragHandler = drag, modifier = Modifier.fillMaxSize()) { - Scalable(onScale = scale, modifier = Modifier.fillMaxSize()) { - val bitmap = imageByGesture(content, scale, drag) - Image( - bitmap = bitmap.asImageBitmap(), - contentDescription = null, - contentScale = adjustImageScale(bitmap) - ) - } - } - } -} - -@Composable -fun imageByGesture( - content: ContentState, - scale: ScaleHandler, - drag: DragHandler -): Bitmap { - val bitmap = cropBitmapByScale(content.getSelectedImage(), scale.factor.value, drag) - - if (scale.factor.value > 1f) - return bitmap - - if (abs(drag.getDistance().x) > displayWidth() / 10) { - if (drag.getDistance().x < 0) { - content.swipeNext() - } else { - content.swipePrevious() - } - drag.cancel() - } - - return bitmap -} diff --git a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/view/MainScreen.kt b/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/view/MainScreen.kt deleted file mode 100755 index 5509e28050..0000000000 --- a/experimental/examples/imageviewer/common/src/androidMain/kotlin/example/imageviewer/view/MainScreen.kt +++ /dev/null @@ -1,218 +0,0 @@ -package example.imageviewer.view - -import android.content.res.Configuration -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll -import androidx.compose.foundation.Image -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.offset -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.shape.CircleShape -import androidx.compose.material.Card -import androidx.compose.material.CircularProgressIndicator -import androidx.compose.material.Divider -import androidx.compose.material.MaterialTheme -import androidx.compose.material.Surface -import androidx.compose.material.Text -import androidx.compose.material.TopAppBar -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.RectangleShape -import androidx.compose.ui.graphics.asImageBitmap -import androidx.compose.ui.graphics.painter.BitmapPainter -import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.unit.dp -import example.imageviewer.common.R -import example.imageviewer.model.AppState -import example.imageviewer.model.ContentState -import example.imageviewer.model.Picture -import example.imageviewer.model.ScreenType -import example.imageviewer.style.DarkGray -import example.imageviewer.style.DarkGreen -import example.imageviewer.style.Foreground -import example.imageviewer.style.LightGray -import example.imageviewer.style.MiniatureColor -import example.imageviewer.style.Transparent -import example.imageviewer.style.icDots -import example.imageviewer.style.icEmpty -import example.imageviewer.style.icRefresh - -@Composable -fun MainScreen(content: ContentState) { - Column { - TopContent(content) - ScrollableArea(content) - } - if (!content.isContentReady()) { - LoadingScreen(content.getString(R.string.loading)) - } -} - -@Composable -fun TopContent(content: ContentState) { - TitleBar(text = content.getString(R.string.app_name), content = content) - if (content.getOrientation() == Configuration.ORIENTATION_PORTRAIT) { - PreviewImage(content) - Spacer(modifier = Modifier.height(10.dp)) - Divider() - } - Spacer(modifier = Modifier.height(5.dp)) -} - -@Composable -fun TitleBar(text: String, content: ContentState) { - TopAppBar( - backgroundColor = DarkGreen, - title = { - Row(Modifier.height(50.dp)) { - Text( - text, - color = Foreground, - modifier = Modifier.weight(1f).align(Alignment.CenterVertically) - ) - Surface( - color = Transparent, - modifier = Modifier.padding(end = 20.dp).align(Alignment.CenterVertically), - shape = CircleShape - ) { - Clickable( - onClick = { - if (content.isContentReady()) { - content.refresh() - } - } - ) { - Image( - icRefresh(), - contentDescription = null, - modifier = Modifier.size(35.dp) - ) - } - } - } - }) -} - -@Composable -fun PreviewImage(content: ContentState) { - Clickable(onClick = { - AppState.screenState(ScreenType.FullscreenImage) - }) { - Card( - backgroundColor = DarkGray, - modifier = Modifier.height(250.dp), - shape = RectangleShape, - elevation = 1.dp - ) { - Image( - if (content.isMainImageEmpty()) { - icEmpty() - } else { - BitmapPainter(content.getSelectedImage().asImageBitmap()) - }, - contentDescription = null, - modifier = Modifier - .fillMaxWidth().padding(start = 1.dp, top = 1.dp, end = 1.dp, bottom = 5.dp), - contentScale = ContentScale.Fit - ) - } - } -} - -@Composable -fun Miniature( - picture: Picture, - content: ContentState -) { - Card( - backgroundColor = MiniatureColor, - modifier = Modifier.padding(start = 10.dp, end = 10.dp).height(70.dp) - .fillMaxWidth() - .clickable { - content.setMainImage(picture) - }, - shape = RectangleShape, - elevation = 2.dp - ) { - Row(modifier = Modifier.padding(end = 30.dp)) { - Clickable( - onClick = { - content.fullscreen(picture) - } - ) { - Image( - picture.image.asImageBitmap(), - contentDescription = null, - modifier = Modifier.height(70.dp) - .width(90.dp) - .padding(start = 1.dp, top = 1.dp, end = 1.dp, bottom = 1.dp), - contentScale = ContentScale.Crop - ) - } - Text( - text = picture.name, - color = Foreground, - modifier = Modifier.weight(1f).align(Alignment.CenterVertically).padding(start = 16.dp), - style = MaterialTheme.typography.body1 - ) - - Clickable( - modifier = Modifier.height(70.dp) - .width(30.dp), - onClick = { - showPopUpMessage( - "${content.getString(R.string.picture)} " + - "${picture.name} \n" + - "${content.getString(R.string.size)} " + - "${picture.width}x${picture.height} " + - "${content.getString(R.string.pixels)}", - content.getContext() - ) - } - ) { - Image( - icDots(), - contentDescription = null, - modifier = Modifier.height(70.dp) - .width(30.dp) - .padding(start = 1.dp, top = 25.dp, end = 1.dp, bottom = 25.dp), - contentScale = ContentScale.FillHeight - ) - } - } - } -} - -@Composable -fun ScrollableArea(content: ContentState) { - var index = 1 - val scrollState = rememberScrollState() - Column(Modifier.verticalScroll(scrollState)) { - for (picture in content.getMiniatures()) { - Miniature( - picture = picture, - content = content - ) - Spacer(modifier = Modifier.height(5.dp)) - index++ - } - } -} - -@Composable -fun Divider() { - Divider( - color = LightGray, - modifier = Modifier.padding(start = 10.dp, end = 10.dp) - ) -} diff --git a/experimental/examples/imageviewer/common/src/androidMain/res/drawable/filter_unknown.png b/experimental/examples/imageviewer/common/src/androidMain/res/drawable/filter_unknown.png deleted file mode 100755 index 9193c3f33ec68e820e0b3d5fce43a68dbd53fbe1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11150 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 diff --git a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/core/EventLocker.kt b/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/core/EventLocker.kt deleted file mode 100755 index f31ab9ca61..0000000000 --- a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/core/EventLocker.kt +++ /dev/null @@ -1,18 +0,0 @@ -package example.imageviewer.core - -class EventLocker { - - private var value: Boolean = false - - fun lock() { - value = false - } - - fun unlock() { - value = true - } - - fun isLocked(): Boolean { - return value - } -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/core/Repository.kt b/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/core/Repository.kt deleted file mode 100755 index df6cd11ff0..0000000000 --- a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/core/Repository.kt +++ /dev/null @@ -1,5 +0,0 @@ -package example.imageviewer.core - -interface Repository { - fun get() : T -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/model/ImageRepository.kt b/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/model/ImageRepository.kt deleted file mode 100755 index 14178fa238..0000000000 --- a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/model/ImageRepository.kt +++ /dev/null @@ -1,33 +0,0 @@ -// READ ME FIRST! -// -// Code in this file is shared between the Android and Desktop JVM targets. -// Kotlin's hierarchical multiplatform projects currently -// don't support sharing code depending on JVM declarations. -// -// You can follow the progress for HMPP JVM & Android intermediate source sets here: -// https://youtrack.jetbrains.com/issue/KT-42466 -// -// The workaround used here to access JVM libraries causes IntelliJ IDEA to not -// resolve symbols in this file properly. -// -// Resolution errors in your IDE do not indicate a problem with your setup. - - -package example.imageviewer.model - -import example.imageviewer.core.Repository -import example.imageviewer.utils.ktorHttpClient -import example.imageviewer.utils.runBlocking -import io.ktor.client.request.* - -class ImageRepository( - private val httpsURL: String -) : Repository> { - - override fun get(): MutableList { - return runBlocking { - val content = ktorHttpClient.get(httpsURL) - content.lines().toMutableList() - } - } -} diff --git a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/model/Miniatures.kt b/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/model/Miniatures.kt deleted file mode 100755 index 4daaca3940..0000000000 --- a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/model/Miniatures.kt +++ /dev/null @@ -1,41 +0,0 @@ -// READ ME FIRST! -// -// Code in this file is shared between the Android and Desktop JVM targets. -// Kotlin's hierarchical multiplatform projects currently -// don't support sharing code depending on JVM declarations. -// -// You can follow the progress for HMPP JVM & Android intermediate source sets here: -// https://youtrack.jetbrains.com/issue/KT-42466 -// -// The workaround used here to access JVM libraries causes IntelliJ IDEA to not -// resolve symbols in this file properly. -// -// Resolution errors in your IDE do not indicate a problem with your setup. - -package example.imageviewer.model - -expect class Picture - -class Miniatures( - private var list: List = emptyList() -) { - fun get(index: Int): Picture { - return list[index] - } - - fun getMiniatures(): List { - return list.toList() - } - - fun setMiniatures(list: List) { - this.list = list.toList() - } - - fun size(): Int { - return list.size - } - - fun clear() { - list = emptyList() - } -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/model/ScreenType.kt b/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/model/ScreenType.kt deleted file mode 100755 index 8e38a79e52..0000000000 --- a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/model/ScreenType.kt +++ /dev/null @@ -1,23 +0,0 @@ -package example.imageviewer.model - -import androidx.compose.runtime.MutableState -import androidx.compose.runtime.mutableStateOf - -enum class ScreenType { - MainScreen, FullscreenImage -} - -object AppState { - private var screen: MutableState - init { - screen = mutableStateOf(ScreenType.MainScreen) - } - - fun screenState() : ScreenType { - return screen.value - } - - fun screenState(state: ScreenType) { - screen.value = state - } -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/style/Palette.kt b/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/style/Palette.kt deleted file mode 100755 index ca4b822fe4..0000000000 --- a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/style/Palette.kt +++ /dev/null @@ -1,16 +0,0 @@ -package example.imageviewer.style - -import androidx.compose.ui.graphics.Color - -val DarkGreen = Color(16, 139, 102) -val Gray = Color.DarkGray -val LightGray = Color(100, 100, 100) -val DarkGray = Color(32, 32, 32) -val PreviewImageAreaHoverColor = Color(45, 45, 45) -val ToastBackground = Color(23, 23, 23) -val MiniatureColor = Color(50, 50, 50) -val MiniatureHoverColor = Color(55, 55, 55) -val Foreground = Color(210, 210, 210) -val TranslucentBlack = Color(0, 0, 0, 60) -val TranslucentWhite = Color(255, 255, 255, 20) -val Transparent = Color.Transparent \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/utils/Coroutines.kt b/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/utils/Coroutines.kt deleted file mode 100644 index d35b09543e..0000000000 --- a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/utils/Coroutines.kt +++ /dev/null @@ -1,7 +0,0 @@ -package example.imageviewer.utils - -import kotlinx.coroutines.CoroutineScope -import kotlin.coroutines.CoroutineContext -import kotlin.coroutines.EmptyCoroutineContext - -expect fun runBlocking(context: CoroutineContext = EmptyCoroutineContext, block: suspend CoroutineScope.() -> T): T \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/utils/Network.kt b/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/utils/Network.kt deleted file mode 100755 index c2d5a23bfa..0000000000 --- a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/utils/Network.kt +++ /dev/null @@ -1,37 +0,0 @@ -// READ ME FIRST! -// -// Code in this file is shared between the Android and Desktop JVM targets. -// Kotlin's hierarchical multiplatform projects currently -// don't support sharing code depending on JVM declarations. -// -// You can follow the progress for HMPP JVM & Android intermediate source sets here: -// https://youtrack.jetbrains.com/issue/KT-42466 -// -// The workaround used here to access JVM libraries causes IntelliJ IDEA to not -// resolve symbols in this file properly. -// -// Resolution errors in your IDE do not indicate a problem with your setup. - -package example.imageviewer.utils - -import io.ktor.client.* -import io.ktor.client.request.* -import kotlinx.coroutines.Deferred -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.async - -//import java.net.InetAddress - -fun isInternetAvailable(): Boolean { - return runBlocking { - try { - ktorHttpClient.head("http://google.com") - true - } catch (e: Exception) { - println(e.message) - false - } - } -} - -val ktorHttpClient = HttpClient {} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/view/Clickable.kt b/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/view/Clickable.kt deleted file mode 100755 index 8eae0782da..0000000000 --- a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/view/Clickable.kt +++ /dev/null @@ -1,21 +0,0 @@ -package example.imageviewer.view - -import androidx.compose.runtime.Composable -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Box -import androidx.compose.ui.Modifier - -@Composable -fun Clickable( - modifier: Modifier = Modifier, - onClick: (() -> Unit)? = null, - children: @Composable () -> Unit = { } -) { - Box( - modifier = modifier.clickable { - onClick?.invoke() - } - ) { - children() - } -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/view/Draggable.kt b/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/view/Draggable.kt deleted file mode 100755 index eabbadc4ef..0000000000 --- a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/view/Draggable.kt +++ /dev/null @@ -1,88 +0,0 @@ -package example.imageviewer.view - -import androidx.compose.foundation.gestures.detectDragGestures -import androidx.compose.material.Surface -import androidx.compose.runtime.Composable -import androidx.compose.runtime.mutableStateOf -import androidx.compose.ui.input.pointer.pointerInput -import androidx.compose.ui.Modifier -import androidx.compose.ui.geometry.Offset -import example.imageviewer.core.EventLocker -import example.imageviewer.style.Transparent - -@Composable -fun Draggable( - dragHandler: DragHandler, - modifier: Modifier = Modifier, - onUpdate: (() -> Unit)? = null, - children: @Composable() () -> Unit -) { - Surface( - color = Transparent, - modifier = modifier.pointerInput(Unit) { - detectDragGestures( - onDragStart = { dragHandler.reset() }, - onDragEnd = { dragHandler.reset() }, - onDragCancel = { dragHandler.cancel() }, - ) { change, dragAmount -> - dragHandler.drag(dragAmount) - onUpdate?.invoke() - change.consume() - } - } - ) { - children() - } -} - -class DragHandler { - - private val amount = mutableStateOf(Point(0f, 0f)) - private val distance = mutableStateOf(Point(0f, 0f)) - private val locker: EventLocker = EventLocker() - - fun getAmount(): Point { - return amount.value - } - - fun getDistance(): Point { - return distance.value - } - - fun reset() { - distance.value = Point(Offset.Zero) - locker.unlock() - } - - fun cancel() { - distance.value = Point(Offset.Zero) - locker.lock() - } - - fun drag(dragDistance: Offset) { - if (locker.isLocked()) { - val dx = dragDistance.x - val dy = dragDistance.y - - distance.value = Point(distance.value.x + dx, distance.value.y + dy) - amount.value = Point(amount.value.x + dx, amount.value.y + dy) - } - } -} - -class Point { - var x: Float = 0f - var y: Float = 0f - constructor(x: Float, y: Float) { - this.x = x - this.y = y - } - constructor(point: Offset) { - this.x = point.x - this.y = point.y - } - fun setAttr(x: Float, y: Float) { - this.x = x - this.y = y - } -} diff --git a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/view/Scalable.kt b/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/view/Scalable.kt deleted file mode 100755 index ef9887c4f6..0000000000 --- a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/view/Scalable.kt +++ /dev/null @@ -1,47 +0,0 @@ -package example.imageviewer.view - -import androidx.compose.foundation.gestures.detectTapGestures -import androidx.compose.foundation.gestures.detectTransformGestures -import androidx.compose.material.Surface -import androidx.compose.runtime.Composable -import androidx.compose.runtime.mutableStateOf -import androidx.compose.ui.Modifier -import androidx.compose.ui.input.pointer.pointerInput -import example.imageviewer.style.Transparent - -@Composable -fun Scalable( - onScale: ScaleHandler, - modifier: Modifier = Modifier, - children: @Composable() () -> Unit -) { - Surface( - color = Transparent, - modifier = modifier.pointerInput(Unit) { - detectTapGestures(onDoubleTap = { onScale.reset() }) - detectTransformGestures { _, _, zoom, _ -> - onScale.onScale(zoom) - } - }, - ) { - children() - } -} - -class ScaleHandler(private val maxFactor: Float = 5f, private val minFactor: Float = 1f) { - val factor = mutableStateOf(1f) - - fun reset() { - if (factor.value > minFactor) - factor.value = minFactor - } - - fun onScale(scaleFactor: Float): Float { - factor.value += scaleFactor - 1f - - if (maxFactor < factor.value) factor.value = maxFactor - if (minFactor > factor.value) factor.value = minFactor - - return scaleFactor - } -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/view/SplashUI.kt b/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/view/SplashUI.kt deleted file mode 100644 index 544121d2d2..0000000000 --- a/experimental/examples/imageviewer/common/src/commonMain/kotlin/example/imageviewer/view/SplashUI.kt +++ /dev/null @@ -1,27 +0,0 @@ -package example.imageviewer.view - -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.material.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.unit.sp -import example.imageviewer.style.DarkGray - -@Composable -fun SplashUI() { - Box(Modifier.fillMaxSize().background(DarkGray)) { - Text( - // TODO implement common resources - "Image Viewer", - Modifier.align(Alignment.Center), - color = Color.White, - fontWeight = FontWeight.Bold, - fontSize = 100.sp - ) - } -} diff --git a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/core/BitmapFilter.kt b/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/core/BitmapFilter.kt deleted file mode 100755 index b8dcdbae47..0000000000 --- a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/core/BitmapFilter.kt +++ /dev/null @@ -1,7 +0,0 @@ -package example.imageviewer.core - -import java.awt.image.BufferedImage - -interface BitmapFilter { - fun apply(bitmap: BufferedImage) : BufferedImage -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/DesktopContentState.kt b/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/DesktopContentState.kt deleted file mode 100644 index 36e0983da8..0000000000 --- a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/DesktopContentState.kt +++ /dev/null @@ -1,362 +0,0 @@ -package example.imageviewer.model - -import androidx.compose.runtime.MutableState -import androidx.compose.runtime.mutableStateOf -import androidx.compose.ui.window.WindowState -import androidx.compose.ui.graphics.ImageBitmap -import androidx.compose.ui.graphics.toComposeImageBitmap -import example.imageviewer.ResString -import example.imageviewer.core.FilterType -import example.imageviewer.model.filtration.FiltersManager -import example.imageviewer.utils.cacheImagePath -import example.imageviewer.utils.clearCache -import example.imageviewer.utils.isInternetAvailable -import example.imageviewer.view.showPopUpMessage -import example.imageviewer.view.DragHandler -import example.imageviewer.view.ScaleHandler -import example.imageviewer.utils.cropBitmapByScale -import example.imageviewer.utils.toByteArray -import java.awt.image.BufferedImage -import java.io.File -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.CoroutineScope -import org.jetbrains.skia.Image - -object ContentState { - val drag = DragHandler() - val scale = ScaleHandler() - lateinit var windowState: WindowState - private lateinit var repository: ImageRepository - private lateinit var uriRepository: String - val scope = CoroutineScope(Dispatchers.IO) - - fun applyContent(state: WindowState, uriRepository: String): ContentState { - windowState = state - if (this::uriRepository.isInitialized && this.uriRepository == uriRepository) { - return this - } - this.uriRepository = uriRepository - repository = ImageRepository(uriRepository) - isContentReady.value = false - - initData() - - return this - } - - private val isAppReady = mutableStateOf(false) - fun isAppReady(): Boolean { - return isAppReady.value - } - - private val isContentReady = mutableStateOf(false) - fun isContentReady(): Boolean { - return isContentReady.value - } - - // drawable content - private val mainImage = mutableStateOf(BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB)) - private val currentImageIndex = mutableStateOf(0) - private val miniatures = Miniatures() - - fun getMiniatures(): List { - return miniatures.getMiniatures() - } - - fun getSelectedImage(): ImageBitmap { - return MainImageWrapper.mainImageAsImageBitmap.value - } - - fun getSelectedImageName(): String { - return MainImageWrapper.getName() - } - - // filters managing - private val appliedFilters = FiltersManager() - private val filterUIState: MutableMap> = LinkedHashMap() - - private fun toggleFilterState(filter: FilterType) { - if (!filterUIState.containsKey(filter)) { - filterUIState[filter] = mutableStateOf(true) - } else { - val value = filterUIState[filter]!!.value - filterUIState[filter]!!.value = !value - } - } - - fun toggleFilter(filter: FilterType) { - if (containsFilter(filter)) { - removeFilter(filter) - } else { - addFilter(filter) - } - - toggleFilterState(filter) - - var bitmap = MainImageWrapper.origin - - if (bitmap != null) { - bitmap = appliedFilters.applyFilters(bitmap) - MainImageWrapper.setImage(bitmap) - mainImage.value = bitmap - updateMainImage() - } - } - - private fun addFilter(filter: FilterType) { - appliedFilters.add(filter) - MainImageWrapper.addFilter(filter) - } - - private fun removeFilter(filter: FilterType) { - appliedFilters.remove(filter) - MainImageWrapper.removeFilter(filter) - } - - private fun containsFilter(type: FilterType): Boolean { - return appliedFilters.contains(type) - } - - fun isFilterEnabled(type: FilterType): Boolean { - if (!filterUIState.containsKey(type)) { - filterUIState[type] = mutableStateOf(false) - } - return filterUIState[type]!!.value - } - - private fun restoreFilters(): BufferedImage { - filterUIState.clear() - appliedFilters.clear() - return MainImageWrapper.restore() - } - - fun restoreMainImage() { - mainImage.value = restoreFilters() - } - - // application content initialization - private fun initData() { - if (isContentReady.value) - return - - val directory = File(cacheImagePath) - if (!directory.exists()) { - directory.mkdir() - } - - scope.launch(Dispatchers.IO) { - try { - if (isInternetAvailable()) { - val imageList = repository.get() - - if (imageList.isEmpty()) { - showPopUpMessage( - ResString.repoInvalid - ) - onContentReady() - } else { - val pictureList = loadImages(cacheImagePath, imageList) - - if (pictureList.isEmpty()) { - showPopUpMessage( - ResString.repoEmpty - ) - onContentReady() - } else { - val picture = loadFullImage(imageList[0]) - miniatures.setMiniatures(pictureList) - if (isMainImageEmpty()) { - wrapPictureIntoMainImage(picture) - } else { - appliedFilters.add(MainImageWrapper.getFilters()) - currentImageIndex.value = MainImageWrapper.getId() - } - onContentReady() - } - } - } else { - showPopUpMessage( - ResString.noInternet - ) - onContentReady() - } - } catch (e: Exception) { - e.printStackTrace() - } - } - } - - // preview/fullscreen image managing - fun isMainImageEmpty(): Boolean { - return MainImageWrapper.isEmpty() - } - - fun fullscreen(picture: Picture) { - isContentReady.value = false - AppState.screenState(ScreenType.FullscreenImage) - setMainImage(picture) - } - - fun setMainImage(picture: Picture) { - if (MainImageWrapper.getId() == picture.id) { - if (!isContentReady()) { - onContentReady() - } - return - } - isContentReady.value = false - - scope.launch(Dispatchers.IO) { - scale.reset() - if (isInternetAvailable()) { - val fullSizePicture = loadFullImage(picture.source) - fullSizePicture.id = picture.id - wrapPictureIntoMainImage(fullSizePicture) - } else { - showPopUpMessage( - "${ResString.noInternet}\n${ResString.loadImageUnavailable}" - ) - wrapPictureIntoMainImage(picture) - } - onContentReady() - } - } - - private fun onContentReady() { - isContentReady.value = true - isAppReady.value = true - } - - private fun wrapPictureIntoMainImage(picture: Picture) { - MainImageWrapper.wrapPicture(picture) - MainImageWrapper.saveOrigin() - mainImage.value = picture.image - currentImageIndex.value = picture.id - updateMainImage() - } - - fun updateMainImage() { - MainImageWrapper.mainImageAsImageBitmap.value = Image.makeFromEncoded( - toByteArray( - cropBitmapByScale( - mainImage.value, - windowState.size, - scale.factor.value, - drag - ) - ) - ).toComposeImageBitmap() - } - - fun swipeNext() { - if (currentImageIndex.value == miniatures.size() - 1) { - showPopUpMessage(ResString.lastImage) - return - } - - restoreFilters() - setMainImage(miniatures.get(++currentImageIndex.value)) - } - - fun swipePrevious() { - if (currentImageIndex.value == 0) { - showPopUpMessage(ResString.firstImage) - return - } - - restoreFilters() - setMainImage(miniatures.get(--currentImageIndex.value)) - } - - fun refresh() { - scope.launch(Dispatchers.IO) { - if (isInternetAvailable()) { - clearCache() - MainImageWrapper.clear() - miniatures.clear() - isContentReady.value = false - initData() - } else { - showPopUpMessage( - "${ResString.noInternet}\n${ResString.refreshUnavailable}" - ) - } - } - } -} - -private object MainImageWrapper { - // origin image - var origin: BufferedImage? = null - private set - - fun saveOrigin() { - origin = copy(picture.value.image) - } - - fun restore(): BufferedImage { - if (origin != null) { - picture.value.image = copy(origin!!) - filtersSet.clear() - } - return copy(picture.value.image) - } - - var mainImageAsImageBitmap = mutableStateOf(ImageBitmap(1, 1)) - - // picture adapter - private var picture = mutableStateOf( - Picture(image = BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB)) - ) - - fun wrapPicture(picture: Picture) { - this.picture.value = picture - } - - fun setImage(bitmap: BufferedImage) { - picture.value.image = bitmap - } - - fun isEmpty(): Boolean { - return (picture.value.name == "") - } - - fun clear() { - picture.value = Picture(image = BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB)) - } - - fun getName(): String { - return picture.value.name - } - - fun getImage(): BufferedImage { - return picture.value.image - } - - fun getId(): Int { - return picture.value.id - } - - // applied filters - private var filtersSet: MutableSet = LinkedHashSet() - - fun addFilter(filter: FilterType) { - filtersSet.add(filter) - } - - fun removeFilter(filter: FilterType) { - filtersSet.remove(filter) - } - - fun getFilters(): Set { - return filtersSet - } - - private fun copy(bitmap: BufferedImage) : BufferedImage { - val result = BufferedImage(bitmap.width, bitmap.height, bitmap.type) - val graphics = result.createGraphics() - graphics.drawImage(bitmap, 0, 0, result.width, result.height, null) - return result - } -} diff --git a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/ImageHandler.kt b/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/ImageHandler.kt deleted file mode 100755 index 5b02b75527..0000000000 --- a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/ImageHandler.kt +++ /dev/null @@ -1,130 +0,0 @@ -package example.imageviewer.model - -import java.awt.image.BufferedImage -import example.imageviewer.utils.cacheImage -import example.imageviewer.utils.cacheImagePostfix -import example.imageviewer.utils.scaleBitmapAspectRatio -import java.io.File -import java.io.FileInputStream -import java.io.InputStream -import java.io.InputStreamReader -import java.io.BufferedReader -import javax.imageio.ImageIO -import java.lang.Exception -import java.net.HttpURLConnection -import java.net.URL -import java.nio.charset.StandardCharsets - -fun loadFullImage(source: String): Picture { - try { - val url = URL(source) - val connection: HttpURLConnection = url.openConnection() as HttpURLConnection - connection.connectTimeout = 5000 - connection.connect() - - val input: InputStream = connection.inputStream - val bitmap: BufferedImage? = ImageIO.read(input) - if (bitmap != null) { - return Picture( - source = source, - image = bitmap, - name = getNameURL(source), - width = bitmap.width, - height = bitmap.height - ) - } - } catch (e: Exception) { - e.printStackTrace() - } - - return Picture(image = BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB)) -} - -fun loadImages(cachePath: String, list: List): MutableList { - val result: MutableList = ArrayList() - - for (source in list) { - val name = getNameURL(source) - val path = cachePath + File.separator + name - - if (File(path + "info").exists()) { - addCachedMiniature(filePath = path, outList = result) - } else { - addFreshMiniature(source = source, outList = result, path = cachePath) - } - - result.last().id = result.size - 1 - } - - return result -} - -private fun addFreshMiniature( - source: String, - outList: MutableList, - path: String -) { - try { - val url = URL(source) - val connection: HttpURLConnection = url.openConnection() as HttpURLConnection - connection.connectTimeout = 5000 - connection.connect() - - val input: InputStream = connection.inputStream - val result: BufferedImage? = ImageIO.read(input) - - if (result != null) { - val picture = Picture( - source, - getNameURL(source), - scaleBitmapAspectRatio(result, 200, 164), - result.width, - result.height - ) - - outList.add(picture) - cacheImage(path + getNameURL(source), picture) - } - } catch (e: Exception) { - e.printStackTrace() - } -} - -private fun addCachedMiniature( - filePath: String, - outList: MutableList -) { - try { - val read = BufferedReader( - InputStreamReader( - FileInputStream(filePath + cacheImagePostfix), - StandardCharsets.UTF_8 - ) - ) - - val source = read.readLine() - val width = read.readLine().toInt() - val height = read.readLine().toInt() - - read.close() - - val result: BufferedImage? = ImageIO.read(File(filePath)) - - if (result != null) { - val picture = Picture( - source, - getNameURL(source), - result, - width, - height - ) - outList.add(picture) - } - } catch (e: Exception) { - e.printStackTrace() - } -} - -private fun getNameURL(url: String): String { - return url.substring(url.lastIndexOf('/') + 1, url.length) -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/Picture.kt b/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/Picture.kt deleted file mode 100755 index 1113afb440..0000000000 --- a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/Picture.kt +++ /dev/null @@ -1,12 +0,0 @@ -package example.imageviewer.model - -import java.awt.image.BufferedImage - -actual data class Picture( - var source: String = "", - var name: String = "", - var image: BufferedImage, - var width: Int = 0, - var height: Int = 0, - var id: Int = 0 -) \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/filtration/BlurFilter.kt b/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/filtration/BlurFilter.kt deleted file mode 100755 index 7ae798b3ec..0000000000 --- a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/filtration/BlurFilter.kt +++ /dev/null @@ -1,12 +0,0 @@ -package example.imageviewer.model.filtration - -import java.awt.image.BufferedImage -import example.imageviewer.core.BitmapFilter -import example.imageviewer.utils.applyBlurFilter - -class BlurFilter : BitmapFilter { - - override fun apply(bitmap: BufferedImage): BufferedImage { - return applyBlurFilter(bitmap) - } -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/filtration/EmptyFilter.kt b/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/filtration/EmptyFilter.kt deleted file mode 100755 index 1174489ac8..0000000000 --- a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/filtration/EmptyFilter.kt +++ /dev/null @@ -1,12 +0,0 @@ -package example.imageviewer.model.filtration - - -import java.awt.image.BufferedImage -import example.imageviewer.core.BitmapFilter - -class EmptyFilter : BitmapFilter { - - override fun apply(bitmap: BufferedImage): BufferedImage { - return bitmap - } -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/filtration/FiltersManager.kt b/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/filtration/FiltersManager.kt deleted file mode 100755 index 37fc441888..0000000000 --- a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/filtration/FiltersManager.kt +++ /dev/null @@ -1,53 +0,0 @@ -package example.imageviewer.model.filtration - -import java.awt.image.BufferedImage -import example.imageviewer.core.BitmapFilter -import example.imageviewer.core.FilterType - -class FiltersManager { - - private var filtersMap: MutableMap = LinkedHashMap() - - fun clear() { - filtersMap = LinkedHashMap() - } - - fun add(filters: Collection) { - - for (filter in filters) - add(filter) - } - - fun add(filter: FilterType) { - - if (!filtersMap.containsKey(filter)) - filtersMap[filter] = getFilter(filter) - } - - fun remove(filter: FilterType) { - filtersMap.remove(filter) - } - - fun contains(filter: FilterType): Boolean { - return filtersMap.contains(filter) - } - - fun applyFilters(bitmap: BufferedImage): BufferedImage { - - var result: BufferedImage = bitmap - for (filter in filtersMap) { - result = filter.value.apply(result) - } - - return result - } -} - -private fun getFilter(type: FilterType): BitmapFilter { - - return when (type) { - FilterType.GrayScale -> GrayScaleFilter() - FilterType.Pixel -> PixelFilter() - FilterType.Blur -> BlurFilter() - } -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/filtration/GrayScaleFilter.kt b/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/filtration/GrayScaleFilter.kt deleted file mode 100755 index 6b10bbf3b0..0000000000 --- a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/filtration/GrayScaleFilter.kt +++ /dev/null @@ -1,12 +0,0 @@ -package example.imageviewer.model.filtration - -import java.awt.image.BufferedImage -import example.imageviewer.core.BitmapFilter -import example.imageviewer.utils.applyGrayScaleFilter - -class GrayScaleFilter : BitmapFilter { - - override fun apply(bitmap: BufferedImage) : BufferedImage { - return applyGrayScaleFilter(bitmap) - } -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/filtration/PixelFilter.kt b/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/filtration/PixelFilter.kt deleted file mode 100755 index 5b3a2cf9c2..0000000000 --- a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/model/filtration/PixelFilter.kt +++ /dev/null @@ -1,12 +0,0 @@ -package example.imageviewer.model.filtration - -import java.awt.image.BufferedImage -import example.imageviewer.core.BitmapFilter -import example.imageviewer.utils.applyPixelFilter - -class PixelFilter : BitmapFilter { - - override fun apply(bitmap: BufferedImage): BufferedImage { - return applyPixelFilter(bitmap) - } -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/style/Decoration.kt b/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/style/Decoration.kt deleted file mode 100755 index 7c06d90124..0000000000 --- a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/style/Decoration.kt +++ /dev/null @@ -1,42 +0,0 @@ -package example.imageviewer.style - -import androidx.compose.runtime.Composable -import androidx.compose.ui.res.painterResource -import java.awt.image.BufferedImage -import javax.imageio.ImageIO - -@Composable -fun icEmpty() = painterResource("images/empty.png") - -@Composable -fun icBack() = painterResource("images/back.png") - -@Composable -fun icRefresh() = painterResource("images/refresh.png") - -@Composable -fun icDots() = painterResource("images/dots.png") - -@Composable -fun icFilterGrayscaleOn() = painterResource("images/grayscale_on.png") - -@Composable -fun icFilterGrayscaleOff() = painterResource("images/grayscale_off.png") - -@Composable -fun icFilterPixelOn() = painterResource("images/pixel_on.png") - -@Composable -fun icFilterPixelOff() = painterResource("images/pixel_off.png") - -@Composable -fun icFilterBlurOn() = painterResource("images/blur_on.png") - -@Composable -fun icFilterBlurOff() = painterResource("images/blur_off.png") - -@Composable -fun icFilterUnknown() = painterResource("images/filter_unknown.png") - -@Composable -fun icAppRounded() = painterResource("images/ic_imageviewer_round.png") diff --git a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/utils/Caching.kt b/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/utils/Caching.kt deleted file mode 100755 index 192289f20b..0000000000 --- a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/utils/Caching.kt +++ /dev/null @@ -1,53 +0,0 @@ -package example.imageviewer.utils - -import java.awt.image.BufferedImage -import example.imageviewer.model.Picture -import javax.imageio.ImageIO -import java.io.File -import java.io.BufferedWriter -import java.io.OutputStreamWriter -import java.io.FileOutputStream -import java.io.IOException -import java.nio.charset.StandardCharsets - -val cacheImagePostfix = "info" -val cacheImagePath = System.getProperty("user.home")!! + - File.separator + "Pictures/imageviewer" + File.separator - -fun cacheImage(path: String, picture: Picture) { - try { - ImageIO.write(picture.image, "png", File(path)) - - val bw = - BufferedWriter( - OutputStreamWriter( - FileOutputStream(path + cacheImagePostfix), - StandardCharsets.UTF_8 - ) - ) - - bw.write(picture.source) - bw.write("\r\n${picture.width}") - bw.write("\r\n${picture.height}") - bw.close() - - } catch (e: IOException) { - e.printStackTrace() - } -} - -fun clearCache() { - - val directory = File(cacheImagePath) - - val files: Array? = directory.listFiles() - - if (files != null) { - for (file in files) { - if (file.isDirectory) - continue - - file.delete() - } - } -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/utils/Coroutines.kt b/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/utils/Coroutines.kt deleted file mode 100644 index ab006ef147..0000000000 --- a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/utils/Coroutines.kt +++ /dev/null @@ -1,9 +0,0 @@ -package example.imageviewer.utils - -import kotlinx.coroutines.CoroutineScope -import kotlin.coroutines.CoroutineContext - -actual fun runBlocking( - context: CoroutineContext, - block: suspend CoroutineScope.() -> T -): T = kotlinx.coroutines.runBlocking(context, block) \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/utils/GraphicsMath.kt b/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/utils/GraphicsMath.kt deleted file mode 100755 index 711a629426..0000000000 --- a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/utils/GraphicsMath.kt +++ /dev/null @@ -1,206 +0,0 @@ -package example.imageviewer.utils - -import androidx.compose.ui.unit.DpSize -import androidx.compose.ui.unit.dp -import java.awt.Dimension -import java.awt.Graphics2D -import java.awt.Rectangle -import java.awt.Toolkit -import java.awt.image.BufferedImage -import java.io.ByteArrayOutputStream -import java.io.File -import java.io.IOException -import javax.imageio.ImageIO -import java.awt.image.BufferedImageOp -import java.awt.image.ConvolveOp -import java.awt.image.Kernel -import kotlin.math.pow -import kotlin.math.roundToInt -import example.imageviewer.view.DragHandler - -fun scaleBitmapAspectRatio( - bitmap: BufferedImage, - width: Int, - height: Int -): BufferedImage { - val boundW: Float = width.toFloat() - val boundH: Float = height.toFloat() - - val ratioX: Float = boundW / bitmap.width - val ratioY: Float = boundH / bitmap.height - val ratio: Float = if (ratioX < ratioY) ratioX else ratioY - - val resultH = (bitmap.height * ratio).toInt() - val resultW = (bitmap.width * ratio).toInt() - - val result = BufferedImage(resultW, resultH, BufferedImage.TYPE_INT_ARGB) - val graphics = result.createGraphics() - graphics.drawImage(bitmap, 0, 0, resultW, resultH, null) - graphics.dispose() - - return result -} - -fun getDisplayBounds(bitmap: BufferedImage, windowSize: DpSize): Rectangle { - - val boundW: Float = windowSize.width.value.toFloat() - val boundH: Float = windowSize.height.value.toFloat() - - val ratioX: Float = bitmap.width / boundW - val ratioY: Float = bitmap.height / boundH - - val ratio: Float = if (ratioX > ratioY) ratioX else ratioY - - val resultW = (boundW * ratio) - val resultH = (boundH * ratio) - - return Rectangle(0, 0, resultW.toInt(), resultH.toInt()) -} - -fun applyGrayScaleFilter(bitmap: BufferedImage): BufferedImage { - - val result = BufferedImage( - bitmap.getWidth(), - bitmap.getHeight(), - BufferedImage.TYPE_BYTE_GRAY) - - val graphics = result.getGraphics() - graphics.drawImage(bitmap, 0, 0, null) - graphics.dispose() - - return result -} - -fun applyPixelFilter(bitmap: BufferedImage): BufferedImage { - - val w: Int = bitmap.width - val h: Int = bitmap.height - - var result = scaleBitmapAspectRatio(bitmap, w / 20, h / 20) - result = scaleBitmapAspectRatio(result, w, h) - - return result -} - -fun applyBlurFilter(bitmap: BufferedImage): BufferedImage { - - var result = BufferedImage(bitmap.getWidth(), bitmap.getHeight(), bitmap.type) - - val graphics = result.getGraphics() - graphics.drawImage(bitmap, 0, 0, null) - graphics.dispose() - - val radius = 11 - val size = 11 - val weight: Float = 1.0f / (size * size) - val matrix = FloatArray(size * size) - - for (i in 0..matrix.size - 1) { - matrix[i] = weight - } - - val kernel = Kernel(radius, size, matrix) - val op = ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null) - result = op.filter(result, null) - - return result.getSubimage( - radius, - radius, - result.width - radius * 2, - result.height - radius * 2 - ) -} - -fun toByteArray(bitmap: BufferedImage) : ByteArray { - val baos = ByteArrayOutputStream() - ImageIO.write(bitmap, "png", baos) - return baos.toByteArray() -} - -fun cropImage(bitmap: BufferedImage, crop: Rectangle) : BufferedImage { - return bitmap.getSubimage(crop.x, crop.y, crop.width, crop.height) -} - -fun cropBitmapByScale( - bitmap: BufferedImage, - size: DpSize, - scale: Float, - drag: DragHandler -): BufferedImage { - val crop = cropBitmapByBounds( - bitmap, - getDisplayBounds(bitmap, size), - size, - scale, - drag - ) - return cropImage( - bitmap, - Rectangle(crop.x, crop.y, crop.width - crop.x, crop.height - crop.y) - ) -} - -fun cropBitmapByBounds( - bitmap: BufferedImage, - bounds: Rectangle, - size: DpSize, - scaleFactor: Float, - drag: DragHandler -): Rectangle { - - if (scaleFactor <= 1f) { - return Rectangle(0, 0, bitmap.width, bitmap.height) - } - - var scale = scaleFactor.toDouble().pow(1.4) - - var boundW = (bounds.width / scale).roundToInt() - var boundH = (bounds.height / scale).roundToInt() - - scale *= size.width.value / bounds.width.toDouble() - - val offsetX = drag.getAmount().x / scale - val offsetY = drag.getAmount().y / scale - - if (boundW > bitmap.width) { - boundW = bitmap.width - } - if (boundH > bitmap.height) { - boundH = bitmap.height - } - - val invisibleW = bitmap.width - boundW - var leftOffset = (invisibleW / 2.0 - offsetX).roundToInt() - - if (leftOffset > invisibleW) { - leftOffset = invisibleW - drag.getAmount().x = -((invisibleW / 2.0) * scale).roundToInt().toFloat() - } - if (leftOffset < 0) { - drag.getAmount().x = ((invisibleW / 2.0) * scale).roundToInt().toFloat() - leftOffset = 0 - } - - val invisibleH = bitmap.height - boundH - var topOffset = (invisibleH / 2 - offsetY).roundToInt() - - if (topOffset > invisibleH) { - topOffset = invisibleH - drag.getAmount().y = -((invisibleH / 2.0) * scale).roundToInt().toFloat() - } - if (topOffset < 0) { - drag.getAmount().y = ((invisibleH / 2.0) * scale).roundToInt().toFloat() - topOffset = 0 - } - - return Rectangle(leftOffset, topOffset, leftOffset + boundW, topOffset + boundH) -} - -fun getPreferredWindowSize(desiredWidth: Int, desiredHeight: Int): DpSize { - val screenSize: Dimension = Toolkit.getDefaultToolkit().screenSize - val preferredWidth: Int = (screenSize.width * 0.8f).toInt() - val preferredHeight: Int = (screenSize.height * 0.8f).toInt() - val width: Int = if (desiredWidth < preferredWidth) desiredWidth else preferredWidth - val height: Int = if (desiredHeight < preferredHeight) desiredHeight else preferredHeight - return DpSize(width.dp, height.dp) -} diff --git a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/view/AppUI.kt b/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/view/AppUI.kt deleted file mode 100755 index ef002711bf..0000000000 --- a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/view/AppUI.kt +++ /dev/null @@ -1,40 +0,0 @@ -package example.imageviewer.view - -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.material.Surface -import androidx.compose.runtime.MutableState -import androidx.compose.runtime.mutableStateOf -import example.imageviewer.model.AppState -import example.imageviewer.model.ScreenType -import example.imageviewer.model.ContentState -import example.imageviewer.style.Gray - -private val message: MutableState = mutableStateOf("") -private val state: MutableState = mutableStateOf(false) - -@Composable -fun AppUI(content: ContentState) { - - Surface( - modifier = Modifier.fillMaxSize(), - color = Gray - ) { - when (AppState.screenState()) { - ScreenType.MainScreen -> { - MainScreen(content) - } - ScreenType.FullscreenImage -> { - FullscreenImage(content) - } - } - } - - Toast(message.value, state) -} - -fun showPopUpMessage(text: String) { - message.value = text - state.value = true -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/view/FullscreenImage.kt b/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/view/FullscreenImage.kt deleted file mode 100644 index e8e91e4930..0000000000 --- a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/view/FullscreenImage.kt +++ /dev/null @@ -1,207 +0,0 @@ -package example.imageviewer.view - -import androidx.compose.foundation.* -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.interaction.MutableInteractionSource -import androidx.compose.foundation.interaction.collectIsHoveredAsState -import androidx.compose.foundation.shape.CircleShape -import androidx.compose.material.MaterialTheme -import androidx.compose.material.Surface -import androidx.compose.material.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip -import androidx.compose.ui.ExperimentalComposeUiApi -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.painter.Painter -import androidx.compose.ui.input.key.Key -import androidx.compose.ui.input.key.key -import androidx.compose.ui.input.key.type -import androidx.compose.ui.input.key.KeyEventType -import androidx.compose.ui.input.key.onPreviewKeyEvent -import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.unit.dp -import example.imageviewer.core.FilterType -import example.imageviewer.model.AppState -import example.imageviewer.model.ContentState -import example.imageviewer.model.ScreenType -import example.imageviewer.ResString -import example.imageviewer.style.DarkGray -import example.imageviewer.style.Foreground -import example.imageviewer.style.MiniatureColor -import example.imageviewer.style.TranslucentBlack -import example.imageviewer.style.Transparent -import example.imageviewer.style.icBack -import example.imageviewer.style.icFilterBlurOff -import example.imageviewer.style.icFilterBlurOn -import example.imageviewer.style.icFilterGrayscaleOff -import example.imageviewer.style.icFilterGrayscaleOn -import example.imageviewer.style.icFilterPixelOff -import example.imageviewer.style.icFilterPixelOn - -@Composable -fun FullscreenImage( - content: ContentState -) { - Column { - ToolBar(content.getSelectedImageName(), content) - Image(content) - } - if (!content.isContentReady()) { - LoadingScreen() - } -} - -@Composable -fun ToolBar( - text: String, - content: ContentState -) { - val backButtonInteractionSource = remember { MutableInteractionSource() } - val backButtonHover by backButtonInteractionSource.collectIsHoveredAsState() - Surface( - color = MiniatureColor, - modifier = Modifier.height(44.dp) - ) { - Row(modifier = Modifier.padding(end = 30.dp)) { - Surface( - color = Transparent, - modifier = Modifier.padding(start = 20.dp).align(Alignment.CenterVertically), - shape = CircleShape - ) { - Tooltip(ResString.back) { - Clickable( - modifier = Modifier - .hoverable(backButtonInteractionSource) - .background(color = if (backButtonHover) TranslucentBlack else Transparent), - onClick = { - if (content.isContentReady()) { - content.restoreMainImage() - AppState.screenState(ScreenType.MainScreen) - } - }) { - Image( - icBack(), - contentDescription = null, - modifier = Modifier.size(38.dp) - ) - } - } - } - Text( - text, - color = Foreground, - maxLines = 1, - modifier = Modifier.padding(start = 30.dp).weight(1f) - .align(Alignment.CenterVertically), - style = MaterialTheme.typography.body1 - ) - - Surface( - color = Color(255, 255, 255, 40), - modifier = Modifier.size(154.dp, 38.dp) - .align(Alignment.CenterVertically), - shape = CircleShape - ) { - val state = rememberScrollState(0) - Row(modifier = Modifier.horizontalScroll(state)) { - Row { - for (type in FilterType.values()) { - FilterButton(content, type) - } - } - } - } - } - } -} - -@Composable -fun FilterButton( - content: ContentState, - type: FilterType, - modifier: Modifier = Modifier.size(38.dp) -) { - val interactionSource = remember { MutableInteractionSource() } - val filterButtonHover by interactionSource.collectIsHoveredAsState() - Box( - modifier = Modifier.background(color = Transparent).clip(CircleShape) - ) { - Tooltip("$type") { - Clickable( - modifier = Modifier - .hoverable(interactionSource) - .background(color = if (filterButtonHover) TranslucentBlack else Transparent), - onClick = { content.toggleFilter(type)} - ) { - Image( - getFilterImage(type = type, content = content), - contentDescription = null, - modifier - ) - } - } - } - Spacer(Modifier.width(20.dp)) -} - -@Composable -fun getFilterImage(type: FilterType, content: ContentState): Painter { - return when (type) { - FilterType.GrayScale -> if (content.isFilterEnabled(type)) icFilterGrayscaleOn() else icFilterGrayscaleOff() - FilterType.Pixel -> if (content.isFilterEnabled(type)) icFilterPixelOn() else icFilterPixelOff() - FilterType.Blur -> if (content.isFilterEnabled(type)) icFilterBlurOn() else icFilterBlurOff() - } -} - -@OptIn(ExperimentalComposeUiApi::class) -@Composable -fun Image(content: ContentState) { - val onUpdate = remember { { content.updateMainImage() } } - Surface( - color = DarkGray, - modifier = Modifier.fillMaxSize() - ) { - Draggable( - onUpdate = onUpdate, - dragHandler = content.drag, - modifier = Modifier.fillMaxSize() - ) { - Zoomable( - onUpdate = onUpdate, - scaleHandler = content.scale, - modifier = Modifier.fillMaxSize() - .onPreviewKeyEvent { - if (it.type == KeyEventType.KeyUp) { - when (it.key) { - Key.DirectionLeft -> { - content.swipePrevious() - } - Key.DirectionRight -> { - content.swipeNext() - } - } - } - false - } - ) { - Image( - bitmap = content.getSelectedImage(), - contentDescription = null, - contentScale = ContentScale.Fit - ) - } - } - } -} diff --git a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/view/MainScreen.kt b/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/view/MainScreen.kt deleted file mode 100755 index edf1f4b27b..0000000000 --- a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/view/MainScreen.kt +++ /dev/null @@ -1,250 +0,0 @@ -package example.imageviewer.view - -import androidx.compose.foundation.* -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxHeight -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.interaction.MutableInteractionSource -import androidx.compose.foundation.interaction.collectIsHoveredAsState -import androidx.compose.foundation.shape.CircleShape -import androidx.compose.material.Card -import androidx.compose.material.Divider -import androidx.compose.material.MaterialTheme -import androidx.compose.material.Surface -import androidx.compose.material.Text -import androidx.compose.material.TopAppBar -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.painter.BitmapPainter -import androidx.compose.ui.graphics.RectangleShape -import androidx.compose.ui.graphics.toComposeImageBitmap -import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.unit.dp -import example.imageviewer.ResString -import example.imageviewer.model.AppState -import example.imageviewer.model.ContentState -import example.imageviewer.model.Picture -import example.imageviewer.model.ScreenType -import example.imageviewer.style.DarkGray -import example.imageviewer.style.DarkGreen -import example.imageviewer.style.Foreground -import example.imageviewer.style.LightGray -import example.imageviewer.style.MiniatureColor -import example.imageviewer.style.MiniatureHoverColor -import example.imageviewer.style.TranslucentBlack -import example.imageviewer.style.TranslucentWhite -import example.imageviewer.style.Transparent -import example.imageviewer.style.icDots -import example.imageviewer.style.icEmpty -import example.imageviewer.style.icRefresh -import example.imageviewer.utils.toByteArray - -@Composable -fun MainScreen(content: ContentState) { - Column { - TopContent(content) - ScrollableArea(content) - } - if (!content.isContentReady()) { - LoadingScreen(ResString.loading) - } -} - -@Composable -fun TopContent(content: ContentState) { - TitleBar(text = ResString.appName, content = content) - PreviewImage(content) - Spacer(modifier = Modifier.height(10.dp)) - Divider() - Spacer(modifier = Modifier.height(5.dp)) -} - -@Composable -fun TitleBar(text: String, content: ContentState) { - val interactionSource = remember { MutableInteractionSource() } - val refreshButtonHover by interactionSource.collectIsHoveredAsState() - TopAppBar( - backgroundColor = DarkGreen, - title = { - Row(Modifier.height(50.dp)) { - Text( - text, - color = Foreground, - modifier = Modifier.weight(1f).align(Alignment.CenterVertically) - ) - Surface( - color = Transparent, - modifier = Modifier.padding(end = 20.dp).align(Alignment.CenterVertically), - shape = CircleShape - ) { - Tooltip(ResString.refresh) { - Clickable( - modifier = Modifier - .hoverable(interactionSource) - .background(color = if (refreshButtonHover) TranslucentBlack else Transparent), - onClick = { - if (content.isContentReady()) { - content.refresh() - } - } - ) { - Image( - icRefresh(), - contentDescription = null, - modifier = Modifier.size(35.dp) - ) - } - } - } - } - }) -} - -@Composable -fun PreviewImage(content: ContentState) { - Clickable( - modifier = Modifier.background(color = DarkGray), - onClick = { - AppState.screenState(ScreenType.FullscreenImage) - } - ) { - Card( - backgroundColor = Transparent, - modifier = Modifier.height(250.dp), - shape = RectangleShape, - elevation = 1.dp - ) { - Image( - if (content.isMainImageEmpty()) - icEmpty() - else - BitmapPainter(content.getSelectedImage()), - contentDescription = null, - modifier = Modifier - .fillMaxWidth().padding(start = 1.dp, top = 1.dp, end = 1.dp, bottom = 5.dp), - contentScale = ContentScale.Fit - ) - } - } -} - -@Composable -fun Miniature( - picture: Picture, - content: ContentState -) { - val cardHoverInteractionSource = remember { MutableInteractionSource() } - val cardHover by cardHoverInteractionSource.collectIsHoveredAsState() - val infoButtonInteractionSource = remember { MutableInteractionSource() } - val infoButtonHover by infoButtonInteractionSource.collectIsHoveredAsState() - Card( - backgroundColor = if (cardHover) MiniatureHoverColor else MiniatureColor, - modifier = Modifier.padding(start = 10.dp, end = 18.dp).height(70.dp) - .fillMaxWidth() - .hoverable(cardHoverInteractionSource) - .clickable { - content.setMainImage(picture) - }, - shape = RectangleShape - ) { - Row(modifier = Modifier.padding(end = 30.dp)) { - Clickable( - onClick = { - content.fullscreen(picture) - } - ) { - Image( - org.jetbrains.skia.Image.makeFromEncoded( - toByteArray(picture.image) - ).toComposeImageBitmap(), - contentDescription = null, - modifier = Modifier.height(70.dp) - .width(90.dp) - .padding(start = 1.dp, top = 1.dp, end = 1.dp, bottom = 1.dp), - contentScale = ContentScale.Crop - ) - } - Text( - text = picture.name, - color = Foreground, - modifier = Modifier - .weight(1f) - .align(Alignment.CenterVertically) - .padding(start = 16.dp), - style = MaterialTheme.typography.body1 - ) - - Clickable( - modifier = Modifier.height(70.dp) - .width(30.dp) - .hoverable(infoButtonInteractionSource) - .background(color = if (infoButtonHover) TranslucentWhite else Transparent), - onClick = { - showPopUpMessage( - "${ResString.picture} " + - "${picture.name} \n" + - "${ResString.size} " + - "${picture.width}x${picture.height} " + - "${ResString.pixels}" - ) - } - ) { - Image( - icDots(), - contentDescription = null, - modifier = Modifier.height(70.dp) - .width(30.dp) - .padding(start = 1.dp, top = 25.dp, end = 1.dp, bottom = 25.dp), - contentScale = ContentScale.FillHeight - ) - } - } - } -} - -@Composable -fun ScrollableArea(content: ContentState) { - Box( - modifier = Modifier.fillMaxSize() - .padding(end = 8.dp) - ) { - val stateVertical = rememberScrollState(0) - Column(modifier = Modifier.verticalScroll(stateVertical)) { - var index = 1 - Column { - for (picture in content.getMiniatures()) { - Miniature( - picture = picture, - content = content - ) - Spacer(modifier = Modifier.height(5.dp)) - index++ - } - } - } - VerticalScrollbar( - adapter = rememberScrollbarAdapter(stateVertical), - modifier = Modifier.align(Alignment.CenterEnd) - .fillMaxHeight() - ) - } -} - -@Composable -fun Divider() { - Divider( - color = LightGray, - modifier = Modifier.padding(start = 10.dp, end = 10.dp) - ) -} diff --git a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/view/Zoomable.kt b/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/view/Zoomable.kt deleted file mode 100644 index e9f6321be0..0000000000 --- a/experimental/examples/imageviewer/common/src/desktopMain/kotlin/example/imageviewer/view/Zoomable.kt +++ /dev/null @@ -1,67 +0,0 @@ -package example.imageviewer.view - -import androidx.compose.foundation.focusable -import androidx.compose.foundation.gestures.detectTapGestures -import androidx.compose.material.Surface -import androidx.compose.runtime.Composable -import androidx.compose.runtime.DisposableEffect -import androidx.compose.runtime.remember -import androidx.compose.ui.Modifier -import androidx.compose.ui.focus.FocusRequester -import androidx.compose.ui.focus.focusRequester -import androidx.compose.ui.input.key.Key -import androidx.compose.ui.input.key.key -import androidx.compose.ui.input.key.type -import androidx.compose.ui.input.key.KeyEventType -import androidx.compose.ui.input.key.onPreviewKeyEvent -import androidx.compose.ui.input.pointer.pointerInput -import androidx.compose.ui.ExperimentalComposeUiApi -import example.imageviewer.style.Transparent - -@OptIn(ExperimentalComposeUiApi::class) -@Composable -fun Zoomable( - scaleHandler: ScaleHandler, - modifier: Modifier = Modifier, - onUpdate: (() -> Unit)? = null, - children: @Composable() () -> Unit -) { - val focusRequester = FocusRequester() - - Surface( - color = Transparent, - modifier = modifier.onPreviewKeyEvent { - if (it.type == KeyEventType.KeyUp) { - when (it.key) { - Key.I -> { - scaleHandler.onScale(1.2f) - onUpdate?.invoke() - } - Key.O -> { - scaleHandler.onScale(0.8f) - onUpdate?.invoke() - } - Key.R -> { - scaleHandler.reset() - onUpdate?.invoke() - } - } - } - false - } - .focusRequester(focusRequester) - .focusable() - .pointerInput(Unit) { - detectTapGestures(onDoubleTap = { scaleHandler.reset() }) { - focusRequester.requestFocus() - } - } - ) { - children() - } - - DisposableEffect(Unit) { - focusRequester.requestFocus() - onDispose { } - } -} diff --git a/experimental/examples/imageviewer/common/src/desktopMain/resources/images/back.png b/experimental/examples/imageviewer/common/src/desktopMain/resources/images/back.png deleted file mode 100755 index 206b8d4678dcdce46620f61a6efc8b152311cbac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6035 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 diff --git a/experimental/examples/imageviewer/common/src/desktopMain/resources/images/blur_off.png b/experimental/examples/imageviewer/common/src/desktopMain/resources/images/blur_off.png deleted file mode 100755 index e63261615790bc5189c0b5ee1de3d1ed82de4535..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36186 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 Xxjf*jX^NQupu^J4#`KM`XUzWqn!}*< diff --git a/experimental/examples/imageviewer/common/src/desktopMain/resources/images/dots.png b/experimental/examples/imageviewer/common/src/desktopMain/resources/images/dots.png deleted file mode 100755 index 4eb0c9f1e483bcc7072cd792387610da3ea767e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2242 zcmai0c~leU79ZBuP{5_-S&KRhRBR=gBpQT)3B)9ofXP7?39fHQCSfF-lgY;6iCElf ztB49!wAEU>SuJbZQ``s?kEaj&svZSP4@+sS7I&aUOMTx2gj)2yKPJije)s;qdw=(S z-(*XwYGEK}8V7=)Kt+-)4SZ|a=UIR7Y3bgb0YSbsREC;SD;HrJvyn$=%{e5`X|wo>_Y`*)8Ru@vH8W;wuGunLz++pC z!s7ygd`}K>5|$@9E0zD--DrHQ3@anI10hC4eJrO(8(1@377|S(t!5joA?0?`#Dsg4 zV0FP#DJN-A%P1phvI2E+M8N0&4b6TUDm5F-bUGL-5`=kzSnV){kuF*fxWh9mQZV6fPxd-$@S2#xjv^W>*AYe9N*JyBzjLMlzA z%{s~eFl*Yv1+YRcjTXd4M{|X|;Zi{3Fc3@WTrz?IUP8W*&*h7_0#SxgfC=YeLjD~7 zTx>)wk2g3ET7n_|pFca*a6E`mDzPNW%9v@FXK8rU)5$f%*05=yJTnf%o=#(gh7}1% zEVNl`(~w$ES%7XBwVHK|gP=)?9yA$8Bsv`hE(yqOhFX_fYiNJ)26-tSN^ZmQ)7L z-W+|BGZaw!!l!Bvz&V|4AGUf4Gw$}*LX9kwUH8OF7``jRa}03%34xf zec)n3SCewijHQP@IoML%+<39}w`GPU#|M_yt$z2x<-KJ;ZsdIK-?cdN!aes+_k|;_ zmTqpBUG&0=5b>meUua3!ODWqke{bv7Zb;x>YHWa7mlf~sLAMR%hz{$EfBK2hpZDv( zD!!Dm{7&!kq?~eRq`zd=?L+*pr+O7U$46>{(bxOVzAsU`fihLQudI_VI%D?wblh-jNEKB*VGy#`gkK zx@4-n%f|qP?I@l6>Kn7Kl{Tj&B`@jRXdvbV2Ec)R@5>Ag^7FCp$#=c70xnDJk{nE= z4bAzEroo7;s=~Jzk!$U}0!e9vVhG=x?^XX%o!C!R^y2`wy6`K%vKzJ)$%C;i9LN0S zaNQ+qr_b$z#${QjkMFumK0I<=|90Z)qu;Je>1-*RdBU5Q{7S<8&ptU7=1ma=ek*%p zx`Sdu!*-oXM>~snZTNFn^c{|+->m%lR*Ajk_jan?bzk%{Rx)6`9#?^O2G@D7e7W#J z^22gl@+m$Pv~K6Ndtapl_c%-T{P6xWbnPH_(%gDQaMSensKd`xhiY~6uNAci32Q3) z65GRwW7!@5?yvSXVdsA3VI}s3_^lZFor3b9+uG}XhH7=x$rfEr`RQK^Lv5MKuFD$b zgXd33|GZt+Kk5Flo9ni!^4gAoq`wseWhWS}T#EE}g?M*;c%m>p5BCvwhqs5`Q2$x{ zU}nr8;-GB$p>$J4U%;0U3ZPi&=fb<$WgGVUhS(RVTPNfYk=r-ye?G*%Ufp_DLqxu5 zE9QsT-Cs)Q9qmi}G`zT~a!T{`$<1!n+>iw`yWQoGYrgxN6%(5Ixng`GegvHa{YFt6LRd=aLQk7lqhMK^i*N fm=4&CSO1ZDh%>`g}7 diff --git a/experimental/examples/imageviewer/common/src/desktopMain/resources/images/empty.png b/experimental/examples/imageviewer/common/src/desktopMain/resources/images/empty.png deleted file mode 100755 index 54e9007671c65003bbcb3e11bce72a3207c3ab93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50553 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 diff --git a/experimental/examples/imageviewer/common/src/desktopMain/resources/images/grayscale_off.png b/experimental/examples/imageviewer/common/src/desktopMain/resources/images/grayscale_off.png deleted file mode 100755 index 57fbe7891c545043468e5d8ff8cc426de44e7a1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9280 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 diff --git a/experimental/examples/imageviewer/common/src/desktopMain/resources/images/pixel_off.png b/experimental/examples/imageviewer/common/src/desktopMain/resources/images/pixel_off.png deleted file mode 100755 index a41ebfe04ec818e91cc69ff33020703de186a8a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6916 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 diff --git a/experimental/examples/imageviewer/common/src/desktopMain/resources/images/pixel_on.png b/experimental/examples/imageviewer/common/src/desktopMain/resources/images/pixel_on.png deleted file mode 100755 index 1482ff8583a16d096df27241e1bc8272d5227c76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8144 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 Mz(T)V*E#0@02qKUumAu6 diff --git a/experimental/examples/imageviewer/common/src/desktopMain/resources/images/refresh.png b/experimental/examples/imageviewer/common/src/desktopMain/resources/images/refresh.png deleted file mode 100755 index 3be99c1944b44da9ecaf2bfb2ae791450a628bb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8353 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 GQvM%f0fm$R diff --git a/experimental/examples/imageviewer/desktop/src/jvmMain/kotlin/example/imageviewer/Main.kt b/experimental/examples/imageviewer/desktop/src/jvmMain/kotlin/example/imageviewer/Main.kt deleted file mode 100644 index c17682c405..0000000000 --- a/experimental/examples/imageviewer/desktop/src/jvmMain/kotlin/example/imageviewer/Main.kt +++ /dev/null @@ -1,59 +0,0 @@ -package example.imageviewer - -import androidx.compose.material.MaterialTheme -import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.window.Window -import androidx.compose.ui.window.WindowState -import androidx.compose.ui.window.WindowPosition -import androidx.compose.ui.window.application -import androidx.compose.ui.window.rememberWindowState -import example.imageviewer.model.ContentState -import example.imageviewer.style.icAppRounded -import example.imageviewer.utils.getPreferredWindowSize -import example.imageviewer.view.AppUI -import example.imageviewer.view.SplashUI - -fun main() = application { - val state = rememberWindowState() - val content = remember { - ContentState.applyContent( - state, - "https://raw.githubusercontent.com/JetBrains/compose-jb/master/artwork/imageviewerrepo/fetching.list" - ) - } - - val icon = icAppRounded() - - if (content.isAppReady()) { - Window( - onCloseRequest = ::exitApplication, - title = "Image Viewer", - state = WindowState( - position = WindowPosition.Aligned(Alignment.Center), - size = getPreferredWindowSize(800, 1000) - ), - icon = icon - ) { - MaterialTheme { - AppUI(content) - } - } - } else { - Window( - onCloseRequest = ::exitApplication, - title = "Image Viewer", - state = WindowState( - position = WindowPosition.Aligned(Alignment.Center), - size = getPreferredWindowSize(800, 300) - ), - undecorated = true, - icon = icon, - ) { - MaterialTheme { - SplashUI() - } - } - } -} \ No newline at end of file diff --git a/experimental/examples/imageviewer/desktop/build.gradle.kts b/experimental/examples/imageviewer/desktopApp/build.gradle.kts similarity index 84% rename from experimental/examples/imageviewer/desktop/build.gradle.kts rename to experimental/examples/imageviewer/desktopApp/build.gradle.kts index 2116a0481a..95effc0263 100755 --- a/experimental/examples/imageviewer/desktop/build.gradle.kts +++ b/experimental/examples/imageviewer/desktopApp/build.gradle.kts @@ -1,7 +1,7 @@ import org.jetbrains.compose.desktop.application.dsl.TargetFormat plugins { - kotlin("multiplatform") // kotlin("jvm") doesn't work well in IDEA/AndroidStudio (https://github.com/JetBrains/compose-jb/issues/22) + kotlin("multiplatform") id("org.jetbrains.compose") } @@ -10,10 +10,10 @@ kotlin { withJava() } sourceSets { - named("jvmMain") { + val jvmMain by getting { dependencies { implementation(compose.desktop.currentOs) - implementation(project(":common")) + implementation(project(":shared")) } } } diff --git a/experimental/examples/imageviewer/desktop/rules.pro b/experimental/examples/imageviewer/desktopApp/rules.pro similarity index 100% rename from experimental/examples/imageviewer/desktop/rules.pro rename to experimental/examples/imageviewer/desktopApp/rules.pro diff --git a/experimental/examples/imageviewer/desktopApp/src/jvmMain/kotlin/example/imageviewer/Main.kt b/experimental/examples/imageviewer/desktopApp/src/jvmMain/kotlin/example/imageviewer/Main.kt new file mode 100644 index 0000000000..96fe7556df --- /dev/null +++ b/experimental/examples/imageviewer/desktopApp/src/jvmMain/kotlin/example/imageviewer/Main.kt @@ -0,0 +1,11 @@ +package example.imageviewer + +import androidx.compose.material.MaterialTheme +import androidx.compose.ui.window.application +import example.imageviewer.view.ImageViewerDesktop + +fun main() = application { + MaterialTheme { + ImageViewerDesktop() + } +} diff --git a/experimental/examples/imageviewer/gradle.properties b/experimental/examples/imageviewer/gradle.properties old mode 100755 new mode 100644 index c18fa7d46c..48afff0860 --- a/experimental/examples/imageviewer/gradle.properties +++ b/experimental/examples/imageviewer/gradle.properties @@ -1,24 +1,18 @@ -# Project-wide Gradle settings. -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx2048m -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true -# AndroidX package structure to make it clearer which packages are bundled with the -# Android operating system, and which are packaged with your app"s APK -# https://developer.android.com/topic/libraries/support-library/androidx-rn -android.useAndroidX=true -# Automatically convert third-party libraries to use AndroidX -android.enableJetifier=true -# Kotlin code style for this project: "official" or "obsolete": kotlin.code.style=official +xcodeproj=iosApp +kotlin.native.cocoapods.generate.wrapper=true +android.useAndroidX=true +org.gradle.jvmargs=-Xmx3g +org.jetbrains.compose.experimental.jscanvas.enabled=true +org.jetbrains.compose.experimental.macos.enabled=true +org.jetbrains.compose.experimental.uikit.enabled=true +kotlin.native.cacheKind=none +kotlin.native.useEmbeddableCompilerJar=true +kotlin.native.enableDependencyPropagation=false +kotlin.mpp.enableGranularSourceSetsMetadata=true +# Enable kotlin/native experimental memory model +kotlin.native.binary.memoryModel=experimental kotlin.version=1.7.20 agp.version=7.1.3 -compose.version=1.2.1 +compose.version=1.2.2 +ktor.version=2.2.1 diff --git a/experimental/examples/imageviewer/gradle/wrapper/gradle-wrapper.jar b/experimental/examples/imageviewer/gradle/wrapper/gradle-wrapper.jar index f3d88b1c2faf2fc91d853cd5d4242b5547257070..249e5832f090a2944b7473328c07c9755baa3196 100644 GIT binary patch delta 21912 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