Commit 6cfd83b9 authored by Dimitrie O. Paun's avatar Dimitrie O. Paun Committed by Alexandre Julliard

Cleanup the SetItemPosition interface.

parent 7f779920
......@@ -273,7 +273,7 @@ static BOOL LISTVIEW_GetOrigin(LISTVIEW_INFO *, LPPOINT);
static BOOL LISTVIEW_GetViewRect(LISTVIEW_INFO *, LPRECT);
static void LISTVIEW_SetGroupSelection(LISTVIEW_INFO *, INT);
static BOOL LISTVIEW_SetItemT(LISTVIEW_INFO *, LPLVITEMW, BOOL);
static BOOL LISTVIEW_SetItemPosition(LISTVIEW_INFO *, INT, LONG, LONG);
static BOOL LISTVIEW_SetItemPosition(LISTVIEW_INFO *, INT, POINT);
static void LISTVIEW_UpdateScroll(LISTVIEW_INFO *);
static void LISTVIEW_SetSelection(LISTVIEW_INFO *, INT);
static BOOL LISTVIEW_UpdateSize(LISTVIEW_INFO *);
......@@ -427,9 +427,20 @@ static char* debug_getbuf()
return buffers[index++ % DEBUG_BUFFERS];
}
static inline char* debugpoint(const POINT* lppt)
{
if (lppt)
{
char* buf = debug_getbuf();
snprintf(buf, DEBUG_BUFFER_SIZE, "(%ld, %ld)", lppt->x, lppt->y);
return buf;
} else return "(null)";
}
static inline char* debugrect(const RECT* rect)
{
if (rect) {
if (rect)
{
char* buf = debug_getbuf();
snprintf(buf, DEBUG_BUFFER_SIZE, "[(%d, %d);(%d, %d)]",
rect->left, rect->top, rect->right, rect->bottom);
......@@ -1547,7 +1558,7 @@ static void LISTVIEW_AlignTop(LISTVIEW_INFO *infoPtr)
ptItem.y += infoPtr->nItemHeight;
}
LISTVIEW_SetItemPosition(infoPtr, i, ptItem.x, ptItem.y);
LISTVIEW_SetItemPosition(infoPtr, i, ptItem);
ptItem.x += infoPtr->nItemWidth;
rcView.right = max(rcView.right, ptItem.x);
}
......@@ -1559,7 +1570,7 @@ static void LISTVIEW_AlignTop(LISTVIEW_INFO *infoPtr)
{
for (i = 0; i < infoPtr->nItemCount; i++)
{
LISTVIEW_SetItemPosition(infoPtr, i, ptItem.x, ptItem.y);
LISTVIEW_SetItemPosition(infoPtr, i, ptItem);
ptItem.y += infoPtr->nItemHeight;
}
......@@ -1613,7 +1624,7 @@ static void LISTVIEW_AlignLeft(LISTVIEW_INFO *infoPtr)
ptItem.x += infoPtr->nItemWidth;
}
LISTVIEW_SetItemPosition(infoPtr, i, ptItem.x, ptItem.y);
LISTVIEW_SetItemPosition(infoPtr, i, ptItem);
ptItem.y += infoPtr->nItemHeight;
rcView.bottom = max(rcView.bottom, ptItem.y);
}
......@@ -1624,7 +1635,7 @@ static void LISTVIEW_AlignLeft(LISTVIEW_INFO *infoPtr)
{
for (i = 0; i < infoPtr->nItemCount; i++)
{
LISTVIEW_SetItemPosition(infoPtr, i, ptItem.x, ptItem.y);
LISTVIEW_SetItemPosition(infoPtr, i, ptItem);
ptItem.x += infoPtr->nItemWidth;
}
......@@ -6765,16 +6776,14 @@ static BOOL LISTVIEW_SetItemCount(LISTVIEW_INFO *infoPtr, INT nItems, DWORD dwFl
*
* PARAMETER(S):
* [I] infoPtr : valid pointer to the listview structure
* [I] INT : item index
* [I] LONG : x coordinate
* [I] LONG : y coordinate
* [I] nItem : item index
* [I] pt : coordinate
*
* RETURN:
* SUCCESS : TRUE
* FAILURE : FALSE
*/
static BOOL LISTVIEW_SetItemPosition(LISTVIEW_INFO *infoPtr, INT nItem,
LONG nPosX, LONG nPosY)
static BOOL LISTVIEW_SetItemPosition(LISTVIEW_INFO *infoPtr, INT nItem, POINT pt)
{
UINT lStyle = infoPtr->dwStyle;
UINT uView = lStyle & LVS_TYPEMASK;
......@@ -6782,7 +6791,7 @@ static BOOL LISTVIEW_SetItemPosition(LISTVIEW_INFO *infoPtr, INT nItem,
HDPA hdpaSubItems;
BOOL bResult = FALSE;
TRACE("(nItem=%d, X=%ld, Y=%ld)\n", nItem, nPosX, nPosY);
TRACE("(nItem=%d, &pt=%s\n", nItem, debugpoint(&pt));
if (lStyle & LVS_OWNERDATA)
return FALSE;
......@@ -6795,43 +6804,33 @@ static BOOL LISTVIEW_SetItemPosition(LISTVIEW_INFO *infoPtr, INT nItem,
{
if ( (lpItem = (LISTVIEW_ITEM *)DPA_GetPtr(hdpaSubItems, 0)) )
{
POINT orig;
POINT orig = lpItem->ptPosition;
bResult = TRUE;
orig = lpItem->ptPosition;
if ((nPosX == -1) && (nPosY == -1))
if ((pt.x == -1) && (pt.y == -1))
{
/* This point value seems to be an undocumented feature. The
* best guess is that it means either at the origin, or at
* the true beginning of the list. I will assume the origin.
*/
POINT pt1;
if (!LISTVIEW_GetOrigin(infoPtr, &pt1))
{
pt1.x = 0;
pt1.y = 0;
}
nPosX = pt1.x;
nPosY = pt1.y;
if (!LISTVIEW_GetOrigin(infoPtr, &pt))
pt.x = pt.y = 0;
if (uView == LVS_ICON)
{
nPosX += (infoPtr->iconSpacing.cx - infoPtr->iconSize.cx) / 2;
nPosY += ICON_TOP_PADDING;
pt.x += (infoPtr->iconSpacing.cx - infoPtr->iconSize.cx) / 2;
pt.y += ICON_TOP_PADDING;
}
TRACE("requested special (-1,-1), set to origin (%ld,%ld)\n",
nPosX, nPosY);
TRACE("requested special (-1,-1), set to origin %s\n", debugpoint(&pt));
}
lpItem->ptPosition.x = nPosX;
lpItem->ptPosition.y = nPosY;
lpItem->ptPosition = *&pt;
if (uView == LVS_ICON)
{
lpItem->ptPosition.y -= ICON_TOP_PADDING;
lpItem->ptPosition.x -= (infoPtr->iconSpacing.cx - infoPtr->iconSize.cx) / 2;
if ((lpItem->ptPosition.y < 0) || (lpItem->ptPosition.x < 0))
{
FIXME("failed orig (%ld,%ld), intent (%ld,%ld), is (%ld, %ld), setting neg to 0\n",
orig.x, orig.y, nPosX, nPosY, lpItem->ptPosition.x, lpItem->ptPosition.y);
FIXME("failed orig=%s, intent=%s, is %s, setting neg to 0\n",
debugpoint(&orig), debugpoint(&pt), debugpoint(&lpItem->ptPosition));
/*
if (lpItem->ptPosition.x < 0) lpItem->ptPosition.x = 0;
if (lpItem->ptPosition.y < 0) lpItem->ptPosition.y = 0;
......@@ -6839,8 +6838,7 @@ static BOOL LISTVIEW_SetItemPosition(LISTVIEW_INFO *infoPtr, INT nItem,
}
else
{
TRACE("orig (%ld,%ld), intent (%ld,%ld), is (%ld,%ld)\n",
orig.x, orig.y, nPosX, nPosY, lpItem->ptPosition.x, lpItem->ptPosition.y);
TRACE("orig=%s, intent=%s, is %s\n", debugpoint(&orig), debugpoint(&pt), debugpoint(&lpItem->ptPosition));
}
}
}
......@@ -8781,12 +8779,14 @@ LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
return LISTVIEW_SetItemCount(infoPtr, (INT)wParam, (DWORD)lParam);
case LVM_SETITEMPOSITION:
return LISTVIEW_SetItemPosition(infoPtr, (INT)wParam, (INT)LOWORD(lParam),
(INT)HIWORD(lParam));
{
POINT pt = { SLOWORD(lParam), SHIWORD(lParam) };
return LISTVIEW_SetItemPosition(infoPtr, (INT)wParam, pt);
}
case LVM_SETITEMPOSITION32:
return LISTVIEW_SetItemPosition(infoPtr, (INT)wParam, ((POINT*)lParam)->x,
((POINT*)lParam)->y);
if (lParam == 0) return FALSE;
return LISTVIEW_SetItemPosition(infoPtr, (INT)wParam, *((POINT*)lParam));
case LVM_SETITEMSTATE:
return LISTVIEW_SetItemState(infoPtr, (INT)wParam, (LPLVITEMW)lParam);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment