@@ -4,21 +4,32 @@ import androidx.compose.foundation.layout.*
44import androidx.compose.runtime.*
55import androidx.compose.ui.Alignment
66import androidx.compose.ui.Modifier
7- import androidx.compose.ui.draw.clipToBounds
87import androidx.compose.ui.geometry.Offset
98import androidx.compose.ui.geometry.Rect
109import androidx.compose.ui.geometry.Size
1110import androidx.compose.ui.graphics.graphicsLayer
12- import androidx.compose.ui.input.pointer.pointerInput
1311import androidx.compose.ui.platform.LocalDensity
1412import androidx.compose.ui.unit.Dp
1513import androidx.compose.ui.unit.DpSize
1614import androidx.compose.ui.unit.IntSize
1715import androidx.compose.ui.unit.dp
18- import com.smarttoolfactory.gesture.PointerRequisite
19- import com.smarttoolfactory.gesture.detectPointerTransformGestures
2016import kotlin.math.abs
2117
18+ /* *
19+ * Composable that changes scale of its content from handles, translates its position
20+ * when dragged inside bounds
21+ *
22+ * @param modifier is modifier of Composable used as [content]
23+
24+ * @param enabled flag for enabling morph operations and boroder and handle display
25+ * @param handleRadius radius of circular handles to implement morphing operations
26+ * @param handlePlacement determines how handles should be placed. They can be placed at corners
27+ * ot center of each side or both.
28+ * @param onDown callback invoked when gesture has started
29+ * @param onMove callback notifies composable has a pointer down and invoking operations
30+ * @param onUp notifies last pointer down is now up
31+ * @param content is the composable that will be contained in this Composable
32+ */
2233@Composable
2334fun TransformLayout (
2435 modifier : Modifier = Modifier ,
@@ -103,11 +114,11 @@ private fun TransformLayout(
103114 )
104115 }
105116
106- var innerTransform by remember {
107- mutableStateOf(
108- transform
109- )
110- }
117+ // var innerTransform by remember {
118+ // mutableStateOf(
119+ // transform
120+ // )
121+ // }
111122
112123
113124 var rectDraw by remember {
@@ -159,42 +170,42 @@ private fun TransformLayout(
159170 horizontal = handleRadius / abs(outerTransform.scaleX),
160171 vertical = handleRadius / abs(outerTransform.scaleY)
161172 )
162- .clipToBounds()
163- .graphicsLayer {
164- translationX = innerTransform.translationX
165- translationY = innerTransform.translationY
166- scaleX = innerTransform.scaleX
167- scaleY = innerTransform.scaleY
168- }
169- .pointerInput(Unit ) {
170- detectPointerTransformGestures(
171- requisite = PointerRequisite .GreaterThan ,
172- numberOfPointers = 1 ,
173- onGesture = { _,
174- gesturePan: Offset ,
175- gestureZoom: Float ,
176- _,
177- _,
178- _ ->
179-
180- val oldZoom = innerTransform.scaleX
181- val offset =
182- Offset (innerTransform.translationX, innerTransform.translationY)
183- val zoom = (oldZoom * gestureZoom).coerceIn(1f , 3f )
184- val newOffset = offset + gesturePan
185-
186- val maxX = (size.width * (zoom - 1 ) / 2f )
187- val maxY = (size.height * (zoom - 1 ) / 2f )
188-
189- innerTransform = innerTransform.copy(
190- translationX = newOffset.x.coerceIn(- maxX, maxX),
191- translationY = newOffset.y.coerceIn(- maxY, maxY),
192- scaleX = zoom,
193- scaleY = zoom
194- )
195- }
196- )
197- }
173+ // .clipToBounds()
174+ // .graphicsLayer {
175+ // translationX = innerTransform.translationX
176+ // translationY = innerTransform.translationY
177+ // scaleX = innerTransform.scaleX
178+ // scaleY = innerTransform.scaleY
179+ // }
180+ // .pointerInput(Unit) {
181+ // detectPointerTransformGestures(
182+ // requisite = PointerRequisite.GreaterThan,
183+ // numberOfPointers = 1,
184+ // onGesture = { _,
185+ // gesturePan: Offset,
186+ // gestureZoom: Float,
187+ // _,
188+ // _,
189+ // _ ->
190+ //
191+ // val oldZoom = innerTransform.scaleX
192+ // val offset =
193+ // Offset(innerTransform.translationX, innerTransform.translationY)
194+ // val zoom = (oldZoom * gestureZoom).coerceIn(1f, 3f)
195+ // val newOffset = offset + gesturePan
196+ //
197+ // val maxX = (size.width * (zoom - 1) / 2f)
198+ // val maxY = (size.height * (zoom - 1) / 2f)
199+ //
200+ // innerTransform = innerTransform.copy(
201+ // translationX = newOffset.x.coerceIn(-maxX, maxX),
202+ // translationY = newOffset.y.coerceIn(-maxY, maxY),
203+ // scaleX = zoom,
204+ // scaleY = zoom
205+ // )
206+ // }
207+ // )
208+ // }
198209
199210 TransformImpl (
200211 modifier = editModifier,
@@ -244,4 +255,3 @@ private fun TransformImpl(
244255 }
245256 }
246257}
247-
0 commit comments