wordpad: Fixed calculations for the paragraph format dialog.

This commit is contained in:
Dylan Smith 2008-06-17 21:20:10 -04:00 committed by Alexandre Julliard
parent 2ee7bcc13c
commit 7fe5d6ad60
1 changed files with 25 additions and 4 deletions

View File

@ -1415,7 +1415,7 @@ static INT_PTR CALLBACK paraformat_proc(HWND hWnd, UINT message, WPARAM wParam,
pf.cbSize = sizeof(pf); pf.cbSize = sizeof(pf);
pf.dwMask = PFM_ALIGNMENT | PFM_OFFSET | PFM_RIGHTINDENT | pf.dwMask = PFM_ALIGNMENT | PFM_OFFSET | PFM_RIGHTINDENT |
PFM_OFFSETINDENT; PFM_STARTINDENT;
SendMessageW(hEditorWnd, EM_GETPARAFORMAT, 0, (LPARAM)&pf); SendMessageW(hEditorWnd, EM_GETPARAFORMAT, 0, (LPARAM)&pf);
if(pf.wAlignment == PFA_RIGHT) if(pf.wAlignment == PFA_RIGHT)
@ -1425,11 +1425,11 @@ static INT_PTR CALLBACK paraformat_proc(HWND hWnd, UINT message, WPARAM wParam,
SendMessageW(hListWnd, CB_SETCURSEL, index, 0); SendMessageW(hListWnd, CB_SETCURSEL, index, 0);
number_with_units(buffer, pf.dxOffset); number_with_units(buffer, pf.dxStartIndent + pf.dxOffset);
SetWindowTextW(hLeftWnd, buffer); SetWindowTextW(hLeftWnd, buffer);
number_with_units(buffer, pf.dxRightIndent); number_with_units(buffer, pf.dxRightIndent);
SetWindowTextW(hRightWnd, buffer); SetWindowTextW(hRightWnd, buffer);
number_with_units(buffer, pf.dxStartIndent - pf.dxOffset); number_with_units(buffer, -pf.dxOffset);
SetWindowTextW(hFirstWnd, buffer); SetWindowTextW(hFirstWnd, buffer);
} }
break; break;
@ -1467,9 +1467,30 @@ static INT_PTR CALLBACK paraformat_proc(HWND hWnd, UINT message, WPARAM wParam,
return FALSE; return FALSE;
} else } else
{ {
if (pf.dxOffset + pf.dxStartIndent < 0
&& pf.dxStartIndent < 0)
{
/* The first line is before the left edge, so
* make sure it is at the left edge. */
pf.dxOffset = -pf.dxStartIndent;
} else if (pf.dxOffset < 0) {
/* The second and following lines are before
* the left edge, so set it to be at the left
* edge, and adjust the first line since it
* is relative to it. */
pf.dxStartIndent = max(pf.dxStartIndent + pf.dxOffset, 0);
pf.dxOffset = 0;
}
/* Internally the dxStartIndent is the absolute
* offset for the first line and dxOffset is
* to it value as opposed how it is displayed with
* the first line being the relative value.
* These two lines make the adjustments. */
pf.dxStartIndent = pf.dxStartIndent + pf.dxOffset; pf.dxStartIndent = pf.dxStartIndent + pf.dxOffset;
pf.dxOffset = pf.dxOffset - pf.dxStartIndent;
pf.cbSize = sizeof(pf); pf.cbSize = sizeof(pf);
pf.dwMask = PFM_OFFSET | PFM_OFFSETINDENT | PFM_RIGHTINDENT; pf.dwMask = PFM_OFFSET | PFM_STARTINDENT | PFM_RIGHTINDENT;
SendMessageW(hEditorWnd, EM_SETPARAFORMAT, 0, (LPARAM)&pf); SendMessageW(hEditorWnd, EM_SETPARAFORMAT, 0, (LPARAM)&pf);
} }
} }