reactos/lib/user32/controls
diff -u -r1.27 -r1.28
--- edit.c 15 Aug 2004 21:36:26 -0000 1.27
+++ edit.c 28 Nov 2004 16:51:18 -0000 1.28
@@ -2245,13 +2245,39 @@
*/
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 @@
/* 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);
}