Fix vertical position of text in single-line edit controls.

svn path=/trunk/; revision=11851
This commit is contained in:
Gé van Geldorp 2004-11-28 16:51:18 +00:00
parent d899ea5ca7
commit 947403dfc8

View file

@ -2245,13 +2245,39 @@ static void EDIT_SetCaretPos(EDITSTATE *es, INT pos,
*/
static void EDIT_SetRectNP(EDITSTATE *es, LPRECT rc)
{
RECT ClientRect;
LONG_PTR ExStyle;
CopyRect(&es->format_rect, rc);
if (es->style & WS_BORDER) {
INT bw = GetSystemMetrics(SM_CXBORDER) + 1;
es->format_rect.left += bw;
es->format_rect.top += bw;
es->format_rect.right -= bw;
es->format_rect.bottom -= bw;
if (es->style & ES_MULTILINE)
{
if (es->style & WS_BORDER) {
INT bw = GetSystemMetrics(SM_CXBORDER) + 1;
es->format_rect.left += bw;
es->format_rect.right -= bw;
es->format_rect.top += bw;
es->format_rect.bottom -= bw;
}
}
else
{
ExStyle = GetWindowLongPtrW(es->hwndSelf, GWL_EXSTYLE);
if (ExStyle & WS_EX_CLIENTEDGE) {
if (es->line_height + 2 <=
es->format_rect.bottom - es->format_rect.top) {
es->format_rect.top++;
es->format_rect.bottom--;
}
} else if (es->style & WS_BORDER) {
INT bw = GetSystemMetrics(SM_CXBORDER) + 1;
es->format_rect.left += bw;
es->format_rect.right -= bw;
if (es->line_height + 2 * bw <=
es->format_rect.bottom - es->format_rect.top) {
es->format_rect.top += bw;
es->format_rect.bottom -= bw;
}
}
}
es->format_rect.left += es->left_margin;
es->format_rect.right -= es->right_margin;
@ -2283,6 +2309,10 @@ static void EDIT_SetRectNP(EDITSTATE *es, LPRECT rc)
/* Windows doesn't care to fix text placement for SL controls */
es->format_rect.bottom = es->format_rect.top + es->line_height;
/* Always stay within the client area */
GetClientRect(es->hwndSelf, &ClientRect);
es->format_rect.bottom = min(es->format_rect.bottom, ClientRect.bottom);
if ((es->style & ES_MULTILINE) && !(es->style & ES_AUTOHSCROLL))
EDIT_BuildLineDefs_ML(es, 0, strlenW(es->text), 0, NULL);
}