adding some rounding to the widget resizing frame rect

This commit is contained in:
tibbi 2022-10-03 23:26:54 +02:00
parent d39348e521
commit 80adadd0e8
2 changed files with 20 additions and 2 deletions

View File

@ -177,7 +177,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
val viewX = widgetView.x.toInt() val viewX = widgetView.x.toInt()
val viewY = widgetView.y.toInt() val viewY = widgetView.y.toInt()
val frameRect = Rect(viewX, viewY, viewX + widgetView.width, viewY + widgetView.height) val frameRect = Rect(viewX, viewY, viewX + widgetView.width, viewY + widgetView.height)
resize_frame.updateFrameCoords(frameRect) resize_frame.updateFrameCoords(frameRect, rowWidth, rowHeight, sideMargins)
resize_frame.beVisible() resize_frame.beVisible()
resize_frame.z = 1f // make sure the frame isnt behind the widget itself resize_frame.z = 1f // make sure the frame isnt behind the widget itself
resize_frame.onClickListener = { resize_frame.onClickListener = {

View File

@ -19,6 +19,9 @@ class MyAppWidgetResizeFrame(context: Context, attrs: AttributeSet, defStyle: In
private var actionDownCoords = PointF() private var actionDownCoords = PointF()
private var actionDownMS = 0L private var actionDownMS = 0L
private var frameRect = Rect(0, 0, 0, 0) private var frameRect = Rect(0, 0, 0, 0)
private var rowWidth = 0
private var rowHeight = 0
private var sideMargins = Rect()
private val lineDotRadius = context.resources.getDimension(R.dimen.resize_frame_dot_radius) private val lineDotRadius = context.resources.getDimension(R.dimen.resize_frame_dot_radius)
private val MAX_TOUCH_LINE_DISTANCE = lineDotRadius * 5 // how close we have to be to the widgets side to drag it private val MAX_TOUCH_LINE_DISTANCE = lineDotRadius * 5 // how close we have to be to the widgets side to drag it
var onClickListener: (() -> Unit)? = null var onClickListener: (() -> Unit)? = null
@ -44,8 +47,11 @@ class MyAppWidgetResizeFrame(context: Context, attrs: AttributeSet, defStyle: In
} }
} }
fun updateFrameCoords(coords: Rect) { fun updateFrameCoords(coords: Rect, rowWidth: Int, rowHeight: Int, sideMargins: Rect) {
frameRect = coords frameRect = coords
this.rowWidth = rowWidth
this.rowHeight = rowHeight
this.sideMargins = sideMargins
redrawFrame() redrawFrame()
} }
@ -96,6 +102,14 @@ class MyAppWidgetResizeFrame(context: Context, attrs: AttributeSet, defStyle: In
} else if (System.currentTimeMillis() - actionDownMS < MAX_CLICK_DURATION) { } else if (System.currentTimeMillis() - actionDownMS < MAX_CLICK_DURATION) {
onClickListener?.invoke() onClickListener?.invoke()
dragDirection = DRAGGING_NONE dragDirection = DRAGGING_NONE
} else {
when (dragDirection) {
DRAGGING_LEFT -> frameRect.left = roundToClosestMultiplyOfNumber(frameRect.left - sideMargins.left, rowWidth) + sideMargins.left
DRAGGING_TOP -> frameRect.top = roundToClosestMultiplyOfNumber(frameRect.top - sideMargins.top, rowHeight) + sideMargins.top
DRAGGING_RIGHT -> frameRect.right = roundToClosestMultiplyOfNumber(frameRect.right - sideMargins.left, rowWidth) + sideMargins.left
DRAGGING_BOTTOM -> frameRect.bottom = roundToClosestMultiplyOfNumber(frameRect.bottom - sideMargins.top, rowHeight) + sideMargins.top
}
redrawFrame()
} }
} }
} }
@ -103,6 +117,10 @@ class MyAppWidgetResizeFrame(context: Context, attrs: AttributeSet, defStyle: In
return true return true
} }
private fun roundToClosestMultiplyOfNumber(value: Int, number: Int): Int {
return number * (Math.round(Math.abs(value / number.toDouble()))).toInt()
}
override fun onDraw(canvas: Canvas) { override fun onDraw(canvas: Canvas) {
super.onDraw(canvas) super.onDraw(canvas)
if (x != 0f || y != 0f) { if (x != 0f || y != 0f) {