diff --git a/app/src/main/java/com/mirenkov/ktheightmap/MainActivity.kt b/app/src/main/java/com/mirenkov/ktheightmap/MainActivity.kt index e2c31f1..7ddf23e 100644 --- a/app/src/main/java/com/mirenkov/ktheightmap/MainActivity.kt +++ b/app/src/main/java/com/mirenkov/ktheightmap/MainActivity.kt @@ -5,12 +5,6 @@ import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge -import androidx.compose.foundation.Canvas -import androidx.compose.foundation.clickable -import androidx.compose.foundation.gestures.Orientation -import androidx.compose.foundation.gestures.detectDragGestures -import androidx.compose.foundation.gestures.draggable -import androidx.compose.foundation.gestures.rememberDraggableState import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding @@ -19,26 +13,18 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Build import androidx.compose.material3.FloatingActionButton import androidx.compose.material3.Icon -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme.colorScheme import androidx.compose.material3.Scaffold import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.mutableFloatStateOf -import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.geometry.Offset -import androidx.compose.ui.geometry.Size -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.drawscope.Stroke -import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.tooling.preview.Preview import com.mirenkov.ktheightmap.ui.theme.KtHeightMapTheme const val TAG = "KtHeightMap" -const val TILE_SIZE: Float = 128F +const val TILE_SIZE: Float = 256F class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { @@ -64,51 +50,6 @@ class MainActivity : ComponentActivity() { } } -@Composable -fun MapCanvas( - backColor: Color, - gridColor: Color, - modifier: Modifier = Modifier -) { - val offsetX = rememberSaveable { mutableFloatStateOf(0F) } - val offsetY = rememberSaveable { mutableFloatStateOf(0F) } - Canvas( - modifier = modifier.fillMaxSize() - .pointerInput(Unit) { - detectDragGestures { _, distance -> - offsetX.floatValue += distance.x - offsetY.floatValue += distance.y - } - } - ) { - drawRect( - color = backColor, - size = size - ) - - - val strippedOffsetX = offsetX.floatValue % TILE_SIZE - val strippedOffsetY = offsetY.floatValue % TILE_SIZE - - val offset = Offset(strippedOffsetX, strippedOffsetY) - val grid = size / TILE_SIZE - val gridWidth = grid.width.toInt() - val gridHeight = grid.height.toInt() - for (cellX in 0 .. gridWidth + 1) { - val offsetX = TILE_SIZE * (cellX - 1) - for (cellY in 0 .. gridHeight + 1) { - val offsetY = TILE_SIZE * (cellY - 1) - drawRect( - color = gridColor, - size = Size(TILE_SIZE, TILE_SIZE), - topLeft = offset + Offset(offsetX, offsetY), - style = Stroke(width = 4F) - ) - } - } - } -} - @Composable fun ToolButton() { FloatingActionButton( diff --git a/app/src/main/java/com/mirenkov/ktheightmap/MapCanvas.kt b/app/src/main/java/com/mirenkov/ktheightmap/MapCanvas.kt new file mode 100644 index 0000000..110de11 --- /dev/null +++ b/app/src/main/java/com/mirenkov/ktheightmap/MapCanvas.kt @@ -0,0 +1,59 @@ +package com.mirenkov.ktheightmap + +import androidx.compose.foundation.Canvas +import androidx.compose.foundation.gestures.detectDragGestures +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.geometry.Size +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.drawscope.Stroke +import androidx.compose.ui.input.pointer.pointerInput + +@Composable +fun MapCanvas( + backColor: Color, + gridColor: Color, + modifier: Modifier = Modifier +) { + val offsetX = rememberSaveable { mutableFloatStateOf(0F) } + val offsetY = rememberSaveable { mutableFloatStateOf(0F) } + Canvas( + modifier = modifier.fillMaxSize() + .pointerInput(Unit) { + detectDragGestures { _, distance -> + offsetX.floatValue += distance.x + offsetY.floatValue += distance.y + } + } + ) { + drawRect( + color = backColor, + size = size + ) + + + val strippedOffsetX = offsetX.floatValue % TILE_SIZE + val strippedOffsetY = offsetY.floatValue % TILE_SIZE + + val offset = Offset(strippedOffsetX, strippedOffsetY) + val grid = size / TILE_SIZE + val gridWidth = grid.width.toInt() + val gridHeight = grid.height.toInt() + for (cellX in 0 .. gridWidth + 2) { + val offsetX = TILE_SIZE * (cellX - 1) + for (cellY in 0 .. gridHeight + 2) { + val offsetY = TILE_SIZE * (cellY - 1) + drawRect( + color = gridColor, + size = Size(TILE_SIZE, TILE_SIZE), + topLeft = offset + Offset(offsetX, offsetY), + style = Stroke(width = 4F) + ) + } + } + } +} \ No newline at end of file