mirror of
				https://github.com/SimpleMobileTools/Simple-Launcher.git
				synced 2025-06-05 21:59:15 +02:00 
			
		
		
		
	Clean up widget placement
This commit is contained in:
		| @@ -29,6 +29,7 @@ import com.simplemobiletools.launcher.helpers.* | ||||
| import com.simplemobiletools.launcher.models.HomeScreenGridItem | ||||
| import kotlinx.android.synthetic.main.activity_main.view.* | ||||
| import kotlin.math.abs | ||||
| import kotlin.math.floor | ||||
| import kotlin.math.min | ||||
|  | ||||
| class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : RelativeLayout(context, attrs, defStyle) { | ||||
| @@ -40,6 +41,8 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | ||||
|     private var cellYCoords = ArrayList<Int>(rowCount) | ||||
|     var cellWidth = 0 | ||||
|     var cellHeight = 0 | ||||
|     private var extraXMargin = 0 | ||||
|     private var extraYMargin = 0 | ||||
|  | ||||
|     private var iconMargin = (context.resources.getDimension(R.dimen.icon_side_margin) * 5 / columnCount).toInt() | ||||
|     private var labelSideMargin = context.resources.getDimension(R.dimen.small_margin).toInt() | ||||
| @@ -112,7 +115,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | ||||
|     } | ||||
|  | ||||
|     fun resizeGrid(newRowCount: Int, newColumnCount: Int) { | ||||
|         if (columnCount != newColumnCount || rowCount != newRowCount){ | ||||
|         if (columnCount != newColumnCount || rowCount != newRowCount) { | ||||
|             rowCount = newRowCount | ||||
|             columnCount = newColumnCount | ||||
|             cellXCoords = ArrayList(columnCount) | ||||
| @@ -393,7 +396,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | ||||
|                     } else { | ||||
|                         context.homeScreenGridItemsDB.updateItemPosition(widgetItem.left, widgetItem.top, widgetItem.right, widgetItem.bottom, widgetItem.id!!) | ||||
|                         val widgetView = widgetViews.firstOrNull { it.tag == widgetItem.widgetId } | ||||
|                         if (widgetView != null) { | ||||
|                         if (widgetView != null && !widgetItem.outOfBounds()) { | ||||
|                             post { | ||||
|                                 widgetView.x = calculateWidgetX(widgetItem.left) | ||||
|                                 widgetView.y = calculateWidgetY(widgetItem.top) | ||||
| @@ -498,9 +501,9 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | ||||
|         return Size(widgetWidth, widgetHeight) | ||||
|     } | ||||
|  | ||||
|     private fun calculateWidgetX(leftCell: Int) = leftCell * cellWidth + sideMargins.left.toFloat() | ||||
|     private fun calculateWidgetX(leftCell: Int) = cellXCoords[leftCell] + sideMargins.left.toFloat() + extraXMargin | ||||
|  | ||||
|     private fun calculateWidgetY(topCell: Int) = topCell * cellHeight + sideMargins.top.toFloat() | ||||
|     private fun calculateWidgetY(topCell: Int) = cellYCoords[topCell] + sideMargins.top.toFloat() + extraYMargin | ||||
|  | ||||
|     // convert stuff like 102x192 to grid cells like 0x1 | ||||
|     private fun getClosestGridCells(center: Pair<Int, Int>): Pair<Int, Int>? { | ||||
| @@ -537,16 +540,6 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | ||||
|             fillCellSizes() | ||||
|         } | ||||
|  | ||||
|         val extraXMargin = if (cellWidth > cellHeight) { | ||||
|             (cellWidth - cellHeight) / 2 | ||||
|         } else { | ||||
|             0 | ||||
|         } | ||||
|         val extraYMargin = if (cellHeight > cellWidth) { | ||||
|             (cellHeight - cellWidth) / 2 | ||||
|         } else { | ||||
|             0 | ||||
|         } | ||||
|         gridItems.filter { it.drawable != null && it.type == ITEM_TYPE_ICON || it.type == ITEM_TYPE_SHORTCUT }.forEach { item -> | ||||
|             if (item.outOfBounds()) { | ||||
|                 return@forEach | ||||
| @@ -585,7 +578,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | ||||
|         } | ||||
|  | ||||
|         if (isFirstDraw || redrawWidgets) { | ||||
|             gridItems.filter { it.type == ITEM_TYPE_WIDGET }.forEach { item -> | ||||
|             gridItems.filter { it.type == ITEM_TYPE_WIDGET && !it.outOfBounds() }.forEach { item -> | ||||
|                 bindWidget(item, isFirstDraw) | ||||
|             } | ||||
|             redrawWidgets = false | ||||
| @@ -625,10 +618,10 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | ||||
|                     val gridCells = getClosestGridCells(center) | ||||
|                     if (gridCells != null) { | ||||
|                         val widgetRect = getWidgetOccupiedRect(gridCells) | ||||
|                         val leftSide = widgetRect.left * cellWidth + sideMargins.left + iconMargin.toFloat() | ||||
|                         val topSide = widgetRect.top * cellHeight + sideMargins.top + iconMargin.toFloat() | ||||
|                         val rightSide = leftSide + draggedItem!!.getWidthInCells() * cellWidth - sideMargins.right - iconMargin.toFloat() | ||||
|                         val bottomSide = topSide + draggedItem!!.getHeightInCells() * cellHeight - sideMargins.top | ||||
|                         val leftSide = calculateWidgetX(widgetRect.left) | ||||
|                         val topSide = calculateWidgetY(widgetRect.top) | ||||
|                         val rightSide = leftSide + draggedItem!!.getWidthInCells() * cellWidth | ||||
|                         val bottomSide = topSide + draggedItem!!.getHeightInCells() * cellHeight | ||||
|                         canvas.drawRoundRect(leftSide, topSide, rightSide, bottomSide, roundedCornerRadius, roundedCornerRadius, dragShadowCirclePaint) | ||||
|                     } | ||||
|  | ||||
| @@ -655,6 +648,16 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | ||||
|     private fun fillCellSizes() { | ||||
|         cellWidth = getFakeWidth() / context.config.homeColumnCount | ||||
|         cellHeight = getFakeHeight() / context.config.homeRowCount | ||||
|         extraXMargin = if (cellWidth > cellHeight) { | ||||
|             (cellWidth - cellHeight) / 2 | ||||
|         } else { | ||||
|             0 | ||||
|         } | ||||
|         extraYMargin = if (cellHeight > cellWidth) { | ||||
|             (cellHeight - cellWidth) / 2 | ||||
|         } else { | ||||
|             0 | ||||
|         } | ||||
|         iconSize = min(cellWidth, cellHeight) - 2 * iconMargin | ||||
|         for (i in 0 until context.config.homeColumnCount) { | ||||
|             cellXCoords.add(i, i * cellWidth) | ||||
| @@ -689,17 +692,6 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | ||||
|             fillCellSizes() | ||||
|         } | ||||
|  | ||||
|         val extraXMargin = if (cellWidth > cellHeight) { | ||||
|             (cellWidth - cellHeight) / 2 | ||||
|         } else { | ||||
|             0 | ||||
|         } | ||||
|         val extraYMargin = if (cellHeight > cellWidth) { | ||||
|             (cellHeight - cellWidth) / 2 | ||||
|         } else { | ||||
|             0 | ||||
|         } | ||||
|  | ||||
|         val clickableLeft = cellXCoords[item.left] + sideMargins.left + extraXMargin | ||||
|         val clickableTop = if (item.top == rowCount - 1) { | ||||
|             cellYCoords[item.top] + cellHeight - iconSize - iconMargin | ||||
| @@ -711,7 +703,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | ||||
|  | ||||
|     // drag the center of the widget, not the top left corner | ||||
|     private fun getWidgetOccupiedRect(item: Pair<Int, Int>): Rect { | ||||
|         val left = item.first - Math.floor((draggedItem!!.getWidthInCells() - 1) / 2.0).toInt() | ||||
|         val left = item.first - floor((draggedItem!!.getWidthInCells() - 1) / 2.0).toInt() | ||||
|         val rect = Rect(left, item.second, left + draggedItem!!.getWidthInCells() - 1, item.second + draggedItem!!.getHeightInCells() - 1) | ||||
|         if (rect.left < 0) { | ||||
|             rect.right -= rect.left | ||||
|   | ||||
		Reference in New Issue
	
	Block a user