Loading src/com/android/launcher3/CellLayout.java +17 −26 Original line number Diff line number Diff line Loading @@ -829,8 +829,8 @@ public class CellLayout extends ViewGroup { final int hStartPadding = getPaddingLeft(); final int vStartPadding = getPaddingTop(); result[0] = (x - hStartPadding) / mCellWidth; result[1] = (y - vStartPadding) / mCellHeight; result[0] = (x - hStartPadding) / (mCellWidth + mBorderSpace.x); result[1] = (y - vStartPadding) / (mCellHeight + mBorderSpace.y); final int xAxis = mCountX; final int yAxis = mCountY; Loading @@ -841,16 +841,6 @@ public class CellLayout extends ViewGroup { if (result[1] >= yAxis) result[1] = yAxis - 1; } /** * Given a point, return the cell that most closely encloses that point * @param x X coordinate of the point * @param y Y coordinate of the point * @param result Array of 2 ints to hold the x and y coordinate of the cell */ void pointToCellRounded(int x, int y, int[] result) { pointToCellExact(x + (mCellWidth / 2), y + (mCellHeight / 2), result); } /** * Given a cell coordinate, return the point that represents the upper left corner of that cell * Loading Loading @@ -1240,7 +1230,7 @@ public class CellLayout extends ViewGroup { */ int[] findNearestVacantArea(int pixelX, int pixelY, int minSpanX, int minSpanY, int spanX, int spanY, int[] result, int[] resultSpan) { return findNearestArea(pixelX, pixelY, minSpanX, minSpanY, spanX, spanY, true, return findNearestArea(pixelX, pixelY, minSpanX, minSpanY, spanX, spanY, false, result, resultSpan); } Loading @@ -1262,9 +1252,10 @@ public class CellLayout extends ViewGroup { /** * Find a vacant area that will fit the given bounds nearest the requested * cell location. Uses Euclidean distance to score multiple vacant areas. * * @param pixelX The X location at which you want to search for a vacant area. * @param pixelY The Y location at which you want to search for a vacant area. * @param relativeXPos The X location relative to the Cell layout at which you want to search * for a vacant area. * @param relativeYPos The Y location relative to the Cell layout at which you want to search * for a vacant area. * @param minSpanX The minimum horizontal span required * @param minSpanY The minimum vertical span required * @param spanX Horizontal span of the object. Loading @@ -1275,15 +1266,15 @@ public class CellLayout extends ViewGroup { * @return The X, Y cell of a vacant area that can contain this object, * nearest the requested location. */ private int[] findNearestArea(int pixelX, int pixelY, int minSpanX, int minSpanY, int spanX, int spanY, boolean ignoreOccupied, int[] result, int[] resultSpan) { private int[] findNearestArea(int relativeXPos, int relativeYPos, int minSpanX, int minSpanY, int spanX, int spanY, boolean ignoreOccupied, int[] result, int[] resultSpan) { lazyInitTempRectStack(); // For items with a spanX / spanY > 1, the passed in point (pixelX, pixelY) corresponds // to the center of the item, but we are searching based on the top-left cell, so // we translate the point over to correspond to the top-left. pixelX -= mCellWidth * (spanX - 1) / 2f; pixelY -= mCellHeight * (spanY - 1) / 2f; // For items with a spanX / spanY > 1, the passed in point (relativeXPos, relativeYPos) // corresponds to the center of the item, but we are searching based on the top-left cell, // so we translate the point over to correspond to the top-left. relativeXPos = (int) (relativeXPos - (mCellWidth + mBorderSpace.x) * (spanX - 1) / 2f); relativeYPos = (int) (relativeYPos - (mCellHeight + mBorderSpace.y) * (spanY - 1) / 2f); // Keep track of best-scoring drop area final int[] bestXY = result != null ? result : new int[2]; Loading @@ -1304,7 +1295,7 @@ public class CellLayout extends ViewGroup { for (int x = 0; x < countX - (minSpanX - 1); x++) { int ySize = -1; int xSize = -1; if (ignoreOccupied) { if (!ignoreOccupied) { // First, let's see if this thing fits anywhere for (int i = 0; i < minSpanX; i++) { for (int j = 0; j < minSpanY; j++) { Loading Loading @@ -1368,7 +1359,7 @@ public class CellLayout extends ViewGroup { } } validRegions.push(currentRect); double distance = Math.hypot(cellXY[0] - pixelX, cellXY[1] - pixelY); double distance = Math.hypot(cellXY[0] - relativeXPos, cellXY[1] - relativeYPos); if ((distance <= bestDistance && !contained) || currentRect.contains(bestRect)) { Loading Loading @@ -2629,7 +2620,7 @@ public class CellLayout extends ViewGroup { * nearest the requested location. */ public int[] findNearestArea(int pixelX, int pixelY, int spanX, int spanY, int[] result) { return findNearestArea(pixelX, pixelY, spanX, spanY, spanX, spanY, false, result, null); return findNearestArea(pixelX, pixelY, spanX, spanY, spanX, spanY, true, result, null); } boolean existsEmptyCell() { Loading Loading
src/com/android/launcher3/CellLayout.java +17 −26 Original line number Diff line number Diff line Loading @@ -829,8 +829,8 @@ public class CellLayout extends ViewGroup { final int hStartPadding = getPaddingLeft(); final int vStartPadding = getPaddingTop(); result[0] = (x - hStartPadding) / mCellWidth; result[1] = (y - vStartPadding) / mCellHeight; result[0] = (x - hStartPadding) / (mCellWidth + mBorderSpace.x); result[1] = (y - vStartPadding) / (mCellHeight + mBorderSpace.y); final int xAxis = mCountX; final int yAxis = mCountY; Loading @@ -841,16 +841,6 @@ public class CellLayout extends ViewGroup { if (result[1] >= yAxis) result[1] = yAxis - 1; } /** * Given a point, return the cell that most closely encloses that point * @param x X coordinate of the point * @param y Y coordinate of the point * @param result Array of 2 ints to hold the x and y coordinate of the cell */ void pointToCellRounded(int x, int y, int[] result) { pointToCellExact(x + (mCellWidth / 2), y + (mCellHeight / 2), result); } /** * Given a cell coordinate, return the point that represents the upper left corner of that cell * Loading Loading @@ -1240,7 +1230,7 @@ public class CellLayout extends ViewGroup { */ int[] findNearestVacantArea(int pixelX, int pixelY, int minSpanX, int minSpanY, int spanX, int spanY, int[] result, int[] resultSpan) { return findNearestArea(pixelX, pixelY, minSpanX, minSpanY, spanX, spanY, true, return findNearestArea(pixelX, pixelY, minSpanX, minSpanY, spanX, spanY, false, result, resultSpan); } Loading @@ -1262,9 +1252,10 @@ public class CellLayout extends ViewGroup { /** * Find a vacant area that will fit the given bounds nearest the requested * cell location. Uses Euclidean distance to score multiple vacant areas. * * @param pixelX The X location at which you want to search for a vacant area. * @param pixelY The Y location at which you want to search for a vacant area. * @param relativeXPos The X location relative to the Cell layout at which you want to search * for a vacant area. * @param relativeYPos The Y location relative to the Cell layout at which you want to search * for a vacant area. * @param minSpanX The minimum horizontal span required * @param minSpanY The minimum vertical span required * @param spanX Horizontal span of the object. Loading @@ -1275,15 +1266,15 @@ public class CellLayout extends ViewGroup { * @return The X, Y cell of a vacant area that can contain this object, * nearest the requested location. */ private int[] findNearestArea(int pixelX, int pixelY, int minSpanX, int minSpanY, int spanX, int spanY, boolean ignoreOccupied, int[] result, int[] resultSpan) { private int[] findNearestArea(int relativeXPos, int relativeYPos, int minSpanX, int minSpanY, int spanX, int spanY, boolean ignoreOccupied, int[] result, int[] resultSpan) { lazyInitTempRectStack(); // For items with a spanX / spanY > 1, the passed in point (pixelX, pixelY) corresponds // to the center of the item, but we are searching based on the top-left cell, so // we translate the point over to correspond to the top-left. pixelX -= mCellWidth * (spanX - 1) / 2f; pixelY -= mCellHeight * (spanY - 1) / 2f; // For items with a spanX / spanY > 1, the passed in point (relativeXPos, relativeYPos) // corresponds to the center of the item, but we are searching based on the top-left cell, // so we translate the point over to correspond to the top-left. relativeXPos = (int) (relativeXPos - (mCellWidth + mBorderSpace.x) * (spanX - 1) / 2f); relativeYPos = (int) (relativeYPos - (mCellHeight + mBorderSpace.y) * (spanY - 1) / 2f); // Keep track of best-scoring drop area final int[] bestXY = result != null ? result : new int[2]; Loading @@ -1304,7 +1295,7 @@ public class CellLayout extends ViewGroup { for (int x = 0; x < countX - (minSpanX - 1); x++) { int ySize = -1; int xSize = -1; if (ignoreOccupied) { if (!ignoreOccupied) { // First, let's see if this thing fits anywhere for (int i = 0; i < minSpanX; i++) { for (int j = 0; j < minSpanY; j++) { Loading Loading @@ -1368,7 +1359,7 @@ public class CellLayout extends ViewGroup { } } validRegions.push(currentRect); double distance = Math.hypot(cellXY[0] - pixelX, cellXY[1] - pixelY); double distance = Math.hypot(cellXY[0] - relativeXPos, cellXY[1] - relativeYPos); if ((distance <= bestDistance && !contained) || currentRect.contains(bestRect)) { Loading Loading @@ -2629,7 +2620,7 @@ public class CellLayout extends ViewGroup { * nearest the requested location. */ public int[] findNearestArea(int pixelX, int pixelY, int spanX, int spanY, int[] result) { return findNearestArea(pixelX, pixelY, spanX, spanY, spanX, spanY, false, result, null); return findNearestArea(pixelX, pixelY, spanX, spanY, spanX, spanY, true, result, null); } boolean existsEmptyCell() { Loading