56#include "wine/unicode.h"
62#define BUFLIMIT_INITIAL 30000
64#define ROUND_TO_GROW(size) (((size) + (GROWLENGTH - 1)) & ~(GROWLENGTH - 1))
65#define HSCROLL_FRACTION 3
70#define EF_MODIFIED 0x0001
71#define EF_FOCUSED 0x0002
72#define EF_UPDATE 0x0004
73#define EF_VSCROLL_TRACK 0x0008
74#define EF_HSCROLL_TRACK 0x0010
75#define EF_AFTER_WRAP 0x0080
77#define EF_USE_SOFTBRK 0x0100
78#define EF_DIALOGMODE 0x0200
80#define ID_CB_LISTBOX 1000
141 INT wheelDeltaRemainder;
156 int composition_start;
166#define SWAP_UINT32(x,y) do { UINT temp = (UINT)(x); (x) = (UINT)(y); (y) = temp; } while(0)
167#define ORDER_UINT(x,y) do { if ((UINT)(y) < (UINT)(x)) SWAP_UINT32((x),(y)); } while(0)
172 TRACE(
"notification %d sent to %p.\n",
code,
es->hwndParent);
186 return (
es->undo_insert_count ||
strlenW(
es->undo_text));
197 es->undo_insert_count = 0;
198 *
es->undo_text =
'\0';
221 if(
es->text_length == (
UINT)-1)
223 return es->text_length;
277 ERR(
"unknown action code, please report !\n");
301 if (
es->word_break_proc)
324 line_def = line_def->
next;
362 WARN(
"ScriptStringAnalyse failed (%x)\n",
hr);
372 return line_def->
ssa;
393 ScriptStringAnalyse(udc, &
es->password_char,
length, (1.5*
length+16), -1,
SSA_LINK|
SSA_FALLBACK|
SSA_GLYPHS|
SSA_PASSWORD, -1,
NULL,
NULL,
NULL,
NULL,
NULL, &
es->ssa);
395 ScriptStringAnalyse(udc,
es->text,
length, (1.5*
length+16), -1,
SSA_LINK|
SSA_FALLBACK|
SSA_GLYPHS, -1,
NULL,
NULL,
NULL,
NULL,
NULL, &
es->ssa);
406 line_def =
es->first_line_def;
407 while (line_def &&
line)
409 line_def = line_def->
next;
419 INT vlc = (
es->format_rect.bottom -
es->format_rect.top) /
es->line_height;
439 INT line_index = 0, nstart_line, nstart_index;
440 INT line_count =
es->line_count;
445 if (istart == iend && delta == 0)
448 previous_line =
NULL;
449 current_line =
es->first_line_def;
454 if (istart < current_line->
index + current_line->
length ||
458 previous_line = current_line;
459 current_line = current_line->
next;
461 }
while (current_line);
465 FIXME(
" modification occurred outside buffer\n");
470 nstart_line = line_index;
471 nstart_index = current_line->
index;
478 current_line = previous_line;
480 start_line = current_line;
482 fw =
es->format_rect.right -
es->format_rect.left;
483 current_position =
es->text + current_line->
index;
486 if (current_line != start_line)
488 if (!current_line || current_line->
index + delta > current_position -
es->text)
492 LINEDEF *new_line = heap_alloc_zero(
sizeof(*new_line));
493 new_line->
next = previous_line->
next;
494 previous_line->
next = new_line;
495 current_line = new_line;
498 else if (current_line->
index + delta < current_position - es->
text)
501 previous_line->
next = current_line->
next;
503 current_line = previous_line->
next;
509 if (current_position -
es->text > iend)
515 current_line->
index = current_position -
es->text;
519 cp = current_position;
521 if (*
cp ==
'\n')
break;
522 if ((*
cp ==
'\r') && (*(
cp + 1) ==
'\n'))
531 }
else if ((
cp > current_position) && (*(
cp - 1) ==
'\r')) {
534 }
else if (*
cp ==
'\n') {
547 if (current_line->
ssa)
555 else current_line->
width = 0;
562 if (current_line->
width > fw && fw >
es->char_width) {
572 if (
d > 1.2f)
d -= 0.2f;
581 if (current_line->
ssa)
589 }
while (prev && current_line->
width > fw);
599 if (current_line->
ssa)
607 current_line->
width -= piDx[prev];
609 }
while ( prev > 0 && current_line->
width > fw);
615 prev = (fw /
es->char_width);
620 if (current_line->
index == nstart_index && istart > current_line->
index + prev)
621 istart = current_line->
index + prev;
624 else if (current_line == start_line &&
625 current_line->
index != nstart_index && orig_net_length < prev)
629 nstart_line = line_index;
630 nstart_index = current_line->
index;
631 istart = current_line->
index + orig_net_length;
640 if (current_line->
ssa)
646 current_line->
width = 0;
648 else current_line->
width = 0;
650 else if (current_line == start_line &&
651 current_line->
index != nstart_index &&
656 nstart_line = line_index;
657 nstart_index = current_line->
index;
658 istart = current_line->
index + orig_net_length;
664 switch (current_line->
ending) {
679 es->text_width =
max(
es->text_width, current_line->
width);
680 current_position += current_line->
length;
681 previous_line = current_line;
684 if ((line_index < es->y_offset) || (line_index >
es->y_offset + vlc))
687 current_line = current_line->
next;
699 pnext = current_line->
next;
702 current_line = pnext;
710 current_line->
index += delta;
711 current_line = current_line->
next;
724 rc.
top =
es->format_rect.top + nstart_line *
es->line_height -
725 (
es->y_offset *
es->line_height);
728 rc.
left =
es->format_rect.left;
735 rc.
right =
es->format_rect.right;
739 rc.
left =
es->format_rect.left;
740 rc.
right =
es->format_rect.right;
745 if (line_count < es->line_count)
747 else if (line_count >
es->line_count)
748 rc.
bottom = line_count *
es->line_height;
750 rc.
bottom = line_index *
es->line_height;
752 rc.
bottom -= (
es->y_offset *
es->line_height);
771 es->text_width =
size->cx;
793 INT line = (
y -
es->format_rect.top) /
es->line_height +
es->y_offset;
797 while ((
line > 0) && line_def->next) {
798 line_index += line_def->length;
799 line_def = line_def->next;
803 x +=
es->x_offset -
es->format_rect.left;
805 x -= (
es->format_rect.right -
es->format_rect.left) - line_def->width;
807 x -= ((
es->format_rect.right -
es->format_rect.left) - line_def->width) / 2;
808 if (
x >= line_def->width) {
810 *after_wrap = (line_def->ending ==
END_WRAP);
811 return line_index + line_def->net_length;
813 if (x <= 0 || !line_def->
ssa) {
820 if (trailing)
index++;
823 *after_wrap = ((
index == line_index + line_def->net_length) &&
830 x -=
es->format_rect.left;
836 INT indent = (
es->format_rect.right -
es->format_rect.left) -
es->text_width;
861 if (
x + xoff > 0 || !
es->ssa)
864 if (trailing)
index++;
878 else if (
x >
size->cx)
883 if (trailing)
index++;
906 *
x =
min(
max(*
x,
es->format_rect.left),
es->format_rect.right - 1);
907 *
y =
min(
max(*
y,
es->format_rect.top),
es->format_rect.bottom - 1);
924 return es->line_count - 1;
929 line_def =
es->first_line_def;
933 line_def = line_def->
next;
952 if (
line >=
es->line_count)
956 line_def =
es->first_line_def;
960 line_index += line_def->
length;
961 line_def = line_def->
next;
966 line_index += line_def->
length;
967 line_def = line_def->
next;
1001 line_def =
es->first_line_def;
1003 while ((
index >= 0) && line_def->
next) {
1004 line_def = line_def->
next;
1032 y = (
l -
es->y_offset) *
es->line_height;
1034 if (after_wrap && (
li ==
index) &&
l) {
1036 line_def =
es->first_line_def;
1038 line_def = line_def->
next;
1043 y -=
es->line_height;
1048 line_def =
es->first_line_def;
1050 line_def = line_def->
next;
1052 lw = line_def->
width;
1053 w =
es->format_rect.right -
es->format_rect.left;
1061 x = (lw > 0 ?
es->x_offset :
x -
es->x_offset);
1089 xoff +=
es->char_width * leftover;
1120 w =
es->format_rect.right -
es->format_rect.left;
1121 if (
w >
es->text_width)
1124 x +=
w -
es->text_width;
1126 x += (
w -
es->text_width) / 2;
1132 x +=
es->format_rect.left;
1133 y +=
es->format_rect.top;
1155 rc->
top =
es->format_rect.top + (
line -
es->y_offset) *
es->line_height;
1159 line_def =
es->first_line_def;
1162 while ((
index >= 0) && line_def->
next) {
1163 line_index += line_def->
length;
1164 line_def = line_def->
next;
1169 line_index += line_def->
length;
1170 line_def = line_def->
next;
1179 rc->
top =
es->format_rect.top;
1189 pt3+=
es->format_rect.left;
1199 es->text_length = (
UINT)-1;
1234 WARN(
"edit hwnd %p already destroyed\n",
es->hwndSelf);
1238 if (!
es->lock_count)
1240 ERR(
"lock_count == 0 ... please report\n");
1246 ERR(
"es->text == 0 ... please report\n");
1250 if (force || (
es->lock_count == 1))
1259 ERR(
"no buffer ... please report\n");
1282 TRACE(
"trying to ReAlloc to %d+1 characters\n",
size);
1290 TRACE(
"Old 32 bit handle %p, new handle %p\n",
es->hloc32W, hNew32W);
1291 es->hloc32W = hNew32W;
1298 if (
es->buffer_size <
size) {
1299 WARN(
"FAILED ! We now have %d+1\n",
es->buffer_size);
1303 TRACE(
"We now have %d+1\n",
es->buffer_size);
1320 if (size <= es->undo_buffer_size)
1323 TRACE(
"trying to ReAlloc to %d+1\n",
size);
1327 es->undo_buffer_size = alloc_size/
sizeof(
WCHAR) - 1;
1332 WARN(
"FAILED ! We now have %d+1\n",
es->undo_buffer_size);
1346 es->flags &= ~EF_UPDATE;
1361 es->flags &= ~EF_UPDATE;
1406 if ((el < es->y_offset) || (sl >
es->y_offset + vlc))
1411 if (sl < es->y_offset) {
1415 if (el >
es->y_offset + vlc) {
1416 el =
es->y_offset + vlc;
1432 for (
l = sl + 1 ;
l < el ;
l++) {
1490 UINT old_start =
es->selection_start;
1491 UINT old_end =
es->selection_end;
1494 if (
start == old_start &&
end == old_end)
1499 end =
es->selection_end;
1505 es->selection_end =
end;
1509 es->flags &= ~EF_AFTER_WRAP;
1527 if (
end != old_start)
1537 if (old_start >
end )
1567 si.
nMax =
es->line_count - 1;
1568 si.
nPage = (
es->format_rect.bottom -
es->format_rect.top) /
es->line_height;
1570 TRACE(
"SB_VERT, nMin=%d, nMax=%d, nPage=%d, nPos=%d\n",
1581 si.
nMax =
es->text_width - 1;
1582 si.
nPage =
es->format_rect.right -
es->format_rect.left;
1584 TRACE(
"SB_HORZ, nMin=%d, nMax=%d, nPage=%d, nPos=%d\n",
1603 INT x_offset_in_pixels;
1604 INT lines_per_page = (
es->format_rect.bottom -
es->format_rect.top) /
1609 x_offset_in_pixels =
es->x_offset;
1617 if (-
dx > x_offset_in_pixels)
1618 dx = -x_offset_in_pixels;
1619 if (
dx >
es->text_width - x_offset_in_pixels)
1620 dx =
es->text_width - x_offset_in_pixels;
1621 nyoff =
max(0,
es->y_offset +
dy);
1622 if (nyoff >=
es->line_count - lines_per_page)
1623 nyoff =
max(0,
es->line_count - lines_per_page);
1624 dy = (
es->y_offset - nyoff) *
es->line_height;
1629 es->y_offset = nyoff;
1633 es->x_offset +=
dx /
es->char_width;
1661 dx *=
es->char_width;
1686 if (
es->y_offset <
es->line_count - 1)
1691 dy = -(
es->format_rect.bottom -
es->format_rect.top) /
es->line_height;
1694 if (
es->y_offset <
es->line_count - 1)
1695 dy = (
es->format_rect.bottom -
es->format_rect.top) /
es->line_height;
1703 if(
es->y_offset +
dy >
es->line_count - vlc)
1704 dy =
max(
es->line_count - vlc, 0) -
es->y_offset;
1766 EDIT_ImmSetCompositionWindow(
es,
pt);
1785 INT cw =
es->char_width;
1793 if (
l >=
es->y_offset + vlc)
1794 dy =
l - vlc + 1 -
es->y_offset;
1795 if (l < es->y_offset)
1796 dy =
l -
es->y_offset;
1797 ww =
es->format_rect.right -
es->format_rect.left;
1798 if (x < es->format_rect.left)
1800 if (
x >
es->format_rect.right)
1802 if (
dy ||
dx || (
es->y_offset && (
es->line_count -
es->y_offset < vlc)))
1805 if(
es->x_offset +
dx + ww >
es->text_width)
1806 dx =
es->text_width - ww -
es->x_offset;
1807 if(
dx ||
dy || (
es->y_offset && (
es->line_count -
es->y_offset < vlc)))
1816 format_width =
es->format_rect.right -
es->format_rect.left;
1817 if (x < es->format_rect.left) {
1822 }
while ((
x < goal) &&
es->x_offset);
1825 }
else if (
x >
es->format_rect.right) {
1833 }
while ((
x > goal) && (x_last >
es->format_rect.right));
1851 INT e =
es->selection_end;
1856 (
es->text[
e - 1] ==
'\r') && (
es->text[
e] ==
'\n')) {
1858 if (
e && (
es->text[
e - 1] ==
'\r'))
1878 INT s =
es->selection_start;
1879 INT e =
es->selection_end;
1921 INT e =
es->selection_end;
1926 if (
es->text[
e] ==
'\n')
1928 else if ((
es->text[
e] ==
'\r') && (
es->text[
e + 1] ==
'\n'))
1970 INT s =
es->selection_start;
1971 INT e =
es->selection_end;
1978 y + (
es->format_rect.bottom -
es->format_rect.top),
1998 INT s =
es->selection_start;
1999 INT e =
es->selection_end;
2006 y - (
es->format_rect.bottom -
es->format_rect.top),
2026 INT s =
es->selection_start;
2027 INT e =
es->selection_end;
2048 INT s =
es->selection_start;
2049 INT e =
es->selection_end;
2079 INT s =
es->selection_start;
2080 INT e =
es->selection_end;
2112 HFONT hUnderline = 0;
2128 if (
es->composition_len == 0)
2147 es->tabs_count,
es->tabs,
es->format_rect.left -
es->x_offset));
2157 if (
es->composition_len == 0)
2195 if ((line < es->y_offset) || (
line >
es->y_offset + vlc) || (
line >=
es->line_count))
2209 int line_idx =
line;
2216 while (line_def && line_idx)
2218 line_def = line_def->
next;
2221 w =
es->format_rect.right -
es->format_rect.left;
2222 lw = line_def->
width;
2229 x +=
es->format_rect.left;
2236 s =
min(
es->selection_start,
es->selection_end);
2237 e =
max(
es->selection_start,
es->selection_end);
2244 else if (
rev && (
s !=
e) &&
2266 es->format_rect.right =
max(
es->format_rect.right,
es->format_rect.left +
es->char_width);
2269 INT fw, vlc, max_x_offset, max_y_offset;
2272 es->format_rect.bottom =
es->format_rect.top + vlc *
es->line_height;
2275 fw =
es->format_rect.right -
es->format_rect.left;
2276 max_x_offset =
es->text_width - fw;
2277 if(max_x_offset < 0) max_x_offset = 0;
2278 if(
es->x_offset > max_x_offset)
2279 es->x_offset = max_x_offset;
2282 max_y_offset =
es->line_count - vlc;
2283 if(max_y_offset < 0) max_y_offset = 0;
2284 if(
es->y_offset > max_y_offset)
2285 es->y_offset = max_y_offset;
2292 es->format_rect.bottom =
es->format_rect.top +
es->line_height;
2296 es->format_rect.bottom =
min(
es->format_rect.bottom, ClientRect.
bottom);
2322 es->format_rect.left++;
2323 es->format_rect.right--;
2325 if (
es->format_rect.bottom -
es->format_rect.top
2326 >=
es->line_height + 2)
2328 es->format_rect.top++;
2329 es->format_rect.bottom--;
2336 if (
es->format_rect.bottom -
es->format_rect.top >=
es->line_height + 2 * bh)
2340 es->format_rect.left +=
es->left_margin;
2341 es->format_rect.right -=
es->right_margin;
2387 es->flags &= ~EF_USE_SOFTBRK;
2390 FIXME(
"soft break enabled, not implemented\n");
2415 es->hlocapp =
es->hloc32W;
2429 INT line_len, dst_len;
2435 if (
line >=
es->line_count)
2446 if (dst_len <= line_len)
2487 BOOL send_update,
BOOL honor_limit)
2500 TRACE(
"%s, can_undo %d, send_update %d\n",
2501 debugstr_wn(lpsz_replace, strl), can_undo, send_update);
2503 s =
es->selection_start;
2504 e =
es->selection_end;
2507 if ((
s ==
e) && !strl)
2512 size = tl - (
e -
s) + strl;
2518 if ((honor_limit) && (
size >
es->buffer_limit))
2522 if (
es->buffer_limit < (tl - (
e-
s)))
2525 strl =
min(strl,
es->buffer_limit - (tl - (
e-
s)));
2533 TRACE(
"deleting stuff.\n");
2547 for (
p =
es->text + tl ;
p >=
es->text +
s ;
p--)
2549 for (
i = 0 ,
p =
es->text +
s ;
i < strl ;
i++)
2550 p[
i] = lpsz_replace[
i];
2559 INT st =
min(
es->selection_start,
es->selection_end);
2564 strl -
abs(
es->selection_end -
es->selection_start),
hrgn);
2570 for (
i = 0 ,
p =
es->text ;
i <
e -
s ;
i++)
2574 abs(
es->selection_end -
es->selection_start) - strl,
hrgn);
2582 INT fw =
es->format_rect.right -
es->format_rect.left;
2587 while ((
es->text_width > fw) &&
s + strl >=
s) {
2590 es->text_length = -1;
2602 if (!
es->undo_insert_count && (*
es->undo_text && (
s ==
es->undo_position))) {
2606 (
es->undo_text + utl)[
e -
s] = 0;
2607 }
else if (!
es->undo_insert_count && (*
es->undo_text && (
e ==
es->undo_position))) {
2610 for (
p =
es->undo_text + utl ;
p >=
es->undo_text ;
p--)
2612 for (
i = 0 ,
p =
es->undo_text ;
i <
e -
s ;
i++)
2614 es->undo_position =
s;
2619 es->undo_text[
e -
s] = 0;
2620 es->undo_position =
s;
2623 es->undo_insert_count = 0;
2629 if ((
s ==
es->undo_position) ||
2630 ((
es->undo_insert_count) &&
2631 (
s ==
es->undo_position +
es->undo_insert_count)))
2636 es->undo_insert_count += strl;
2639 es->undo_position =
s;
2640 es->undo_insert_count = strl;
2642 *
es->undo_text =
'\0';
2655 INT delta = strl -
abs(
es->selection_end -
es->selection_start);
2657 if (delta < 0 && es->x_offset)
2659 if (
abs(delta) >
es->x_offset)
2662 es->x_offset += delta;
2685 es->flags &= ~EF_UPDATE;
2718 es->x_offset =
es->y_offset = 0;
2719 es->selection_start =
es->selection_end = 0;
2721 es->flags &= ~EF_MODIFIED;
2722 es->flags &= ~EF_UPDATE;
2778 INT default_left_margin = 0;
2779 INT default_right_margin = 0;
2791 default_left_margin =
width / 2;
2792 default_right_margin =
width / 2;
2797 default_left_margin =
es->left_margin;
2798 default_right_margin =
es->right_margin;
2802 default_left_margin =
width / 2;
2803 default_right_margin =
width / 2;
2811 es->format_rect.left -=
es->left_margin;
2815 es->left_margin = default_left_margin;
2816 es->format_rect.left +=
es->left_margin;
2820 es->format_rect.right +=
es->right_margin;
2824 es->right_margin = default_right_margin;
2825 es->format_rect.right -=
es->right_margin;
2833 TRACE(
"left=%d, right=%d\n",
es->left_margin,
es->right_margin);
2849 if (
es->password_char ==
c)
2853 es->password_char =
c;
2859 es->style &= ~ES_PASSWORD;
2895 if (
es->word_break_proc == wbp)
2898 es->word_break_proc = wbp;
2928 TRACE(
"before UNDO:insertion length = %d, deletion buffer = %s\n",
2940 TRACE(
"after UNDO:insertion length = %d, deletion buffer = %s\n",
3002 INT s =
min(
es->selection_start,
es->selection_end);
3003 INT e =
max(
es->selection_start,
es->selection_end);
3061 if (
es->bCaptureState)
3082 static const WCHAR cr_lfW[] = {
'\r',
'\n'};
3090 static const WCHAR tabW[] = {
'\t'};
3098 if (
es->selection_start !=
es->selection_end)
3165 ERR(
"unknown menu item, please report\n");
3214 if (
pt.x == -1 &&
pt.y == -1)
3259 HWND hLBox =
es->hwndListBox;
3271 TRACE(
"[%p]: handling msg %x (%x)\n",
es->hwndSelf,
msg,
key);
3378 if (
es->selection_start !=
es->selection_end) {
3389 }
else if (control) {
3461 HWND hwndSelf =
es->hwndSelf;
3463 es->flags &= ~EF_FOCUSED;
3469 es->wheelDeltaRemainder = 0;
3489 INT e =
es->selection_end;
3494 es->bCaptureState =
TRUE;
3504 es->region_posx =
es->region_posy = 0;
3520 es->bCaptureState =
TRUE;
3526 es->region_posx =
es->region_posy = 0;
3543 if (
es->bCaptureState) {
3587 es->region_posx = (prex <
x) ? -1 : ((prex >
x) ? 1 : 0);
3588 es->region_posy = (prey <
y) ? -1 : ((prey >
y) ? 1 : 0);
3656 es->format_rect.top,
3657 es->format_rect.right,
3658 es->format_rect.bottom);
3666 if (!
es->bEnableState)
3671 for (
i =
es->y_offset ;
i <=
min(
es->y_offset + vlc,
es->y_offset +
es->line_count - 1) ;
i++) {
3694 HRGN cliprgn = region;
3717 r.right - cxEdge,
r.bottom - cyEdge);
3718 if (region != (HRGN)1)
3743 if (cliprgn != region)
3800 es->line_height =
tm.tmHeight;
3801 es->char_width =
tm.tmAveCharWidth;
3861 ERR(
"SetSel may generate UPDATE message whose handler may reset "
3876 es->flags &= ~EF_MODIFIED;
3935 DWORD style_change_mask;
3945 new_style =
style->styleNew & style_change_mask;
3954 new_style &= ~ES_UPPERCASE;
3957 es->style = (
es->style & ~style_change_mask) | new_style;
3961 WARN (
"Invalid style change %ld\n",
which);
3974 if ((
key ==
VK_BACK) && (key_data & 0x2000)) {
3993 if (
es->region_posx < 0) {
3995 }
else if (
es->region_posx > 0) {
4021 fw =
es->format_rect.right -
es->format_rect.left;
4024 TRACE(
"SB_LINELEFT\n");
4026 dx = -
es->char_width;
4029 TRACE(
"SB_LINERIGHT\n");
4030 if (
es->x_offset <
es->text_width)
4031 dx =
es->char_width;
4034 TRACE(
"SB_PAGELEFT\n");
4039 TRACE(
"SB_PAGERIGHT\n");
4040 if (
es->x_offset <
es->text_width)
4049 TRACE(
"SB_RIGHT\n");
4050 if (
es->x_offset <
es->text_width)
4051 dx =
es->text_width -
es->x_offset;
4062 if(pos < 0 || pos > 100)
return 0;
4064 fw =
es->format_rect.right -
es->format_rect.left;
4065 new_x =
pos * (
es->text_width - fw) / 100;
4066 dx =
es->text_width ? (new_x -
es->x_offset) : 0;
4070 TRACE(
"SB_THUMBPOSITION %d\n",
pos);
4071 es->flags &= ~EF_HSCROLL_TRACK;
4078 if(pos < 0 || pos > 100)
return 0;
4080 fw =
es->format_rect.right -
es->format_rect.left;
4081 new_x =
pos * (
es->text_width - fw) / 100;
4082 dx =
es->text_width ? (new_x -
es->x_offset) : 0;
4091 TRACE(
"SB_ENDSCROLL\n");
4107 INT fw =
es->format_rect.right -
es->format_rect.left;
4108 ret =
es->text_width ?
es->x_offset * 100 / (
es->text_width - fw) : 0;
4110 TRACE(
"EM_GETTHUMB: returning %ld\n",
ret);
4114 TRACE(
"EM_LINESCROLL16\n");
4119 ERR(
"undocumented WM_HSCROLL action %d (0x%04x), please report\n",
4125 INT fw =
es->format_rect.right -
es->format_rect.left;
4127 if(
es->x_offset +
dx + fw >
es->text_width)
4128 dx =
es->text_width - fw -
es->x_offset;
4168 TRACE(
"SB_BOTTOM\n");
4169 dy =
es->line_count - 1 -
es->y_offset;
4181 if(pos < 0 || pos > 100)
return 0;
4183 new_y =
pos * (
es->line_count - vlc) / 100;
4184 dy =
es->line_count ? (new_y -
es->y_offset) : 0;
4185 TRACE(
"line_count=%d, y_offset=%d, pos=%d, dy = %d\n",
4190 TRACE(
"SB_THUMBPOSITION %d\n",
pos);
4191 es->flags &= ~EF_VSCROLL_TRACK;
4199 if(pos < 0 || pos > 100)
return 0;
4201 new_y =
pos * (
es->line_count - vlc) / 100;
4202 dy =
es->line_count ? (new_y -
es->y_offset) : 0;
4203 TRACE(
"line_count=%d, y_offset=%d, pos=%d, dy = %d\n",
4214 TRACE(
"SB_ENDSCROLL\n");
4231 ret =
es->line_count ?
es->y_offset * 100 / (
es->line_count - vlc) : 0;
4233 TRACE(
"EM_GETTHUMB: returning %ld\n",
ret);
4242 ERR(
"undocumented WM_VSCROLL action %d (0x%04x), please report\n",
4290 ERR(
"Unable to allocate IME CompositionString\n");
4307 lpCompStrAttr =
heap_alloc(dwBufLenAttr + 1);
4310 ERR(
"Unable to allocate IME Attribute String\n");
4316 lpCompStrAttr[dwBufLenAttr] = 0;
4322 if (
es->selection_end <
es->composition_start)
4323 es->composition_start =
es->selection_end;
4326 es->selection_start =
es->composition_start;
4328 if (
es->composition_len > 0)
4329 es->selection_end =
es->composition_start +
es->composition_len;
4331 es->selection_end =
es->selection_start;
4334 es->composition_len =
abs(
es->composition_start -
es->selection_end);
4336 es->selection_start =
es->composition_start;
4337 es->selection_end =
es->selection_start +
es->composition_len;
4358 ERR(
"Unable to alloc buffer for IME string\n");
4366 if (
es->selection_end <
es->composition_start)
4367 es->composition_start =
es->selection_end;
4369 es->selection_start =
es->composition_start;
4370 es->selection_end =
es->composition_start +
es->composition_len;
4372 es->composition_start =
es->selection_end;
4373 es->composition_len = 0;
4385 if (
es->selection_start !=
es->selection_end)
4388 if (
es->composition_len == 0 &&
es->selection_start !=
es->selection_end)
4391 es->composition_start =
es->selection_end;
4430 TRACE(
"Creating edit control, style = %08x\n", lpcs->
style);
4432 if (!(
es = heap_alloc_zero(
sizeof(*
es))))
4463 es->style &= ~ES_UPPERCASE;
4471 es->style &= ~ES_PASSWORD;
4475 es->style &= ~ES_CENTER;
4476 es->style &= ~WS_HSCROLL;
4477 es->style &= ~ES_AUTOHSCROLL;
4482 es->style &= ~ES_CENTER;
4483 es->style &= ~WS_HSCROLL;
4484 es->style &= ~WS_VSCROLL;
4486 es->password_char =
'*';
4494 if (!(
es->undo_text = heap_alloc_zero((
es->buffer_size + 1) *
sizeof(
WCHAR))))
4496 es->undo_buffer_size =
es->buffer_size;
4499 if (!(
es->first_line_def = heap_alloc_zero(
sizeof(
LINEDEF))))
4515 es->style &= ~WS_BORDER;
4566 es->selection_start =
es->selection_end = 0;
4602 if (
es->hloc32W && (
es->hloc32W !=
es->hlocapp))
4607 pc =
es->first_line_def;
4717 FIXME(
"undocumented message 0x%x, please report\n",
msg);
4787 es->style &= ~ES_READONLY;
4790 if (old_style ^
es->style)
4859 if (
es->hwndListBox)
4878 if (
es->hwndListBox)
4893 if (
wParam <= 0x000fffff)
5016 case WM_STYLECHANGED:
5020 case WM_STYLECHANGING:
5039 UINT pulScrollLines = 3;
5048 wheelDelta = GET_WHEEL_DELTA_WPARAM(
wParam);
5050 if ((wheelDelta < 0 && es->wheelDeltaRemainder < 0) ||
5051 (wheelDelta > 0 &&
es->wheelDeltaRemainder > 0))
5052 es->wheelDeltaRemainder += wheelDelta;
5054 es->wheelDeltaRemainder = wheelDelta;
5056 if (
es->wheelDeltaRemainder && pulScrollLines)
5059 pulScrollLines = (
int)
min((
UINT)
es->line_count, pulScrollLines);
5061 es->wheelDeltaRemainder -=
WHEEL_DELTA * cLineScroll / (
int)pulScrollLines;
5071 lParam &= ~ISC_SHOWUICOMPOSITIONWINDOW;
5091 case WM_IME_STARTCOMPOSITION:
5097 es->composition_start =
es->selection_end;
5098 es->composition_len = 0;
5102 case WM_IME_COMPOSITION:
5109 case WM_IME_ENDCOMPOSITION:
5113 if (
es->composition_len > 0)
5116 es->selection_end =
es->selection_start;
5117 es->composition_len= 0;
5140 case IMR_QUERYCHARPOSITION:
5142 IMECHARPOSITION *chpos = (IMECHARPOSITION *)
lParam;
5148 chpos->cLineHeight =
es->line_height;
5149 chpos->rcDocument =
es->format_rect;
5158 case WM_THEMECHANGED:
5180 memset(&wndClass, 0,
sizeof(wndClass));
5196void EDIT_Unregister(
void)
static void * heap_alloc(size_t len)
static BOOL heap_free(void *mem)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
LONG WINAPI ImmGetCompositionStringW(HIMC hIMC, DWORD dwIndex, LPVOID lpBuf, DWORD dwBufLen)
static LRESULT CALLBACK EDIT_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
static void EDIT_WM_Paint(EDITSTATE *es, HDC hdc)
static void EDIT_MoveEnd(EDITSTATE *es, BOOL extend, BOOL ctrl)
static void EDIT_PaintLine(EDITSTATE *es, HDC dc, INT line, BOOL rev)
static void EDIT_GetResultStr(HIMC hIMC, EDITSTATE *es)
static BOOL EDIT_IsInsideDialog(EDITSTATE *es)
static INT get_vertical_line_count(EDITSTATE *es)
static INT EDIT_WordBreakProc(EDITSTATE *es, LPWSTR s, INT index, INT count, INT action)
static LRESULT EDIT_WM_LButtonDblClk(EDITSTATE *es)
static void EDIT_MoveBackward(EDITSTATE *es, BOOL extend)
static LRESULT EDIT_WM_Char(EDITSTATE *es, WCHAR c)
static void EDIT_WM_SetFont(EDITSTATE *es, HFONT font, BOOL redraw)
static SCRIPT_STRING_ANALYSIS EDIT_UpdateUniscribeData(EDITSTATE *es, HDC dc, INT line)
static void EDIT_EM_ReplaceSel(EDITSTATE *es, BOOL can_undo, const WCHAR *lpsz_replace, UINT strl, BOOL send_update, BOOL honor_limit)
static void EDIT_CalcLineWidth_SL(EDITSTATE *es)
static LRESULT EDIT_WM_MButtonDown(EDITSTATE *es)
static void EDIT_EM_ScrollCaret(EDITSTATE *es)
static void EDIT_InvalidateUniscribeData_linedef(LINEDEF *line_def)
#define ROUND_TO_GROW(size)
static BOOL EDIT_CheckCombo(EDITSTATE *es, UINT msg, INT key)
static void EDIT_SetRectNP(EDITSTATE *es, const RECT *rc)
static BOOL EDIT_EM_FmtLines(EDITSTATE *es, BOOL add_eol)
static void EDIT_WM_Copy(EDITSTATE *es)
static void EDIT_ML_InvalidateText(EDITSTATE *es, INT start, INT end)
static void EDIT_GetLineRect(EDITSTATE *es, INT line, INT scol, INT ecol, LPRECT rc)
static BOOL EDIT_EM_LineScroll_internal(EDITSTATE *es, INT dx, INT dy)
static void EDIT_SetCaretPos(EDITSTATE *es, INT pos, BOOL after_wrap)
static void EDIT_GetCompositionStr(HIMC hIMC, LPARAM CompFlag, EDITSTATE *es)
static void EDIT_BuildLineDefs_ML(EDITSTATE *es, INT istart, INT iend, INT delta, HRGN hrgn)
static void EDIT_MoveUp_ML(EDITSTATE *es, BOOL extend)
static INT EDIT_PaintText(EDITSTATE *es, HDC dc, INT x, INT y, INT line, INT col, INT count, BOOL rev)
static LRESULT EDIT_EM_CharFromPos(EDITSTATE *es, INT x, INT y)
static void EDIT_MoveHome(EDITSTATE *es, BOOL extend, BOOL ctrl)
static LRESULT EDIT_WM_HScroll(EDITSTATE *es, INT action, INT pos)
static void EDIT_WM_Cut(EDITSTATE *es)
static void EDIT_EM_SetPasswordChar(EDITSTATE *es, WCHAR c)
static SCRIPT_STRING_ANALYSIS EDIT_UpdateUniscribeData_linedef(EDITSTATE *es, HDC dc, LINEDEF *line_def)
static void EDIT_WM_NCPaint(HWND hwnd, HRGN region)
struct tagLINEDEF LINEDEF
static void EDIT_AdjustFormatRect(EDITSTATE *es)
static INT EDIT_WM_GetText(const EDITSTATE *es, INT count, LPWSTR dst)
static void EDIT_WM_ContextMenu(EDITSTATE *es, INT x, INT y)
static LRESULT EDIT_WM_MouseMove(EDITSTATE *es, INT x, INT y)
static void EDIT_MovePageUp_ML(EDITSTATE *es, BOOL extend)
static void EDIT_LockBuffer(EDITSTATE *es)
static void EDIT_UnlockBuffer(EDITSTATE *es, BOOL force)
static LRESULT EDIT_WM_NCDestroy(EDITSTATE *es)
static LRESULT EDIT_WM_LButtonDown(EDITSTATE *es, DWORD keys, INT x, INT y)
static BOOL notify_parent(const EDITSTATE *es, INT code)
static INT EDIT_EM_LineIndex(const EDITSTATE *es, INT line)
static void EDIT_ConfinePoint(const EDITSTATE *es, LPINT x, LPINT y)
static HLOCAL EDIT_EM_GetHandle(EDITSTATE *es)
static INT EDIT_EM_GetLine(EDITSTATE *es, INT line, LPWSTR dst)
static BOOL EDIT_EM_Undo(EDITSTATE *es)
static UINT get_text_length(EDITSTATE *es)
static void EDIT_InvalidateUniscribeData(EDITSTATE *es)
static void EDIT_WM_Paste(EDITSTATE *es)
static void EDIT_UpdateScrollInfo(EDITSTATE *es)
static void EDIT_MovePageDown_ML(EDITSTATE *es, BOOL extend)
static LRESULT EDIT_WM_KillFocus(HTHEME theme, EDITSTATE *es)
static void EDIT_MoveWordForward(EDITSTATE *es, BOOL extend)
static LRESULT EDIT_WM_SysKeyDown(EDITSTATE *es, INT key, DWORD key_data)
static LRESULT EDIT_EM_GetThumb(EDITSTATE *es)
static LRESULT EDIT_WM_NCCreate(HWND hwnd, LPCREATESTRUCTW lpcs)
static LRESULT EDIT_WM_LButtonUp(EDITSTATE *es)
static void EDIT_WM_Clear(EDITSTATE *es)
static BOOL EDIT_EM_CanUndo(const EDITSTATE *es)
static void EDIT_EM_EmptyUndoBuffer(EDITSTATE *es)
static INT EDIT_CharFromPos(EDITSTATE *es, INT x, INT y, LPBOOL after_wrap)
static void EDIT_EM_SetMargins(EDITSTATE *es, INT action, WORD left, WORD right, BOOL repaint)
static void EDIT_MoveWordBackward(EDITSTATE *es, BOOL extend)
static void text_buffer_changed(EDITSTATE *es)
static HBRUSH EDIT_NotifyCtlColor(EDITSTATE *es, HDC hdc)
static void EDIT_WM_SetFocus(HTHEME theme, EDITSTATE *es)
static void EDIT_EM_SetHandle(EDITSTATE *es, HLOCAL hloc)
static LRESULT EDIT_WM_Create(EDITSTATE *es, const WCHAR *name)
static void EDIT_InvalidateText(EDITSTATE *es, INT start, INT end)
static LRESULT EDIT_WM_KeyDown(EDITSTATE *es, INT key)
static void EDIT_EM_SetLimitText(EDITSTATE *es, UINT limit)
static void EDIT_WM_Timer(EDITSTATE *es)
static LRESULT EDIT_EM_PosFromChar(EDITSTATE *es, INT index, BOOL after_wrap)
static void EDIT_MoveForward(EDITSTATE *es, BOOL extend)
static LRESULT EDIT_EM_Scroll(EDITSTATE *es, INT action)
static LRESULT EDIT_EM_GetSel(const EDITSTATE *es, PUINT start, PUINT end)
static void EDIT_EM_SetWordBreakProc(EDITSTATE *es, EDITWORDBREAKPROCW wbp)
static void EDIT_SL_InvalidateText(EDITSTATE *es, INT start, INT end)
static void EDIT_MoveDown_ML(EDITSTATE *es, BOOL extend)
static LRESULT EDIT_WM_StyleChanged(EDITSTATE *es, WPARAM which, const STYLESTRUCT *style)
static INT EDIT_CallWordBreakProc(EDITSTATE *es, INT start, INT index, INT count, INT action)
static INT EDIT_EM_LineFromChar(EDITSTATE *es, INT index)
static void EDIT_ContextMenuCommand(EDITSTATE *es, UINT id)
static LRESULT EDIT_WM_VScroll(EDITSTATE *es, INT action, INT pos)
static BOOL EDIT_MakeFit(EDITSTATE *es, UINT size)
static void EDIT_WM_SetText(EDITSTATE *es, LPCWSTR text)
static BOOL EDIT_MakeUndoFit(EDITSTATE *es, UINT size)
static void EDIT_UpdateTextRegion(EDITSTATE *es, HRGN hrgn, BOOL bErase)
static void EDIT_UpdateText(EDITSTATE *es, const RECT *rc, BOOL bErase)
static BOOL EDIT_EM_SetTabStops(EDITSTATE *es, INT count, const INT *tabs)
static BOOL EDIT_EM_SetSel(EDITSTATE *es, UINT start, UINT end, BOOL after_wrap)
static void EDIT_ImeComposition(HWND hwnd, LPARAM CompFlag, EDITSTATE *es)
static BOOL EDIT_EM_LineScroll(EDITSTATE *es, INT dx, INT dy)
static void EDIT_WM_Size(EDITSTATE *es, UINT action)
static INT EDIT_EM_LineLength(EDITSTATE *es, INT index)
static const WCHAR indent[]
BOOL WINAPI ImmSetCompositionFontW(HIMC hIMC, LPLOGFONTW lplf)
BOOL WINAPI ImmIsIME(HKL hKL)
BOOL WINAPI ImmNotifyIME(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD_PTR dwValue)
BOOL WINAPI ImmSetCompositionWindow(HIMC hIMC, LPCOMPOSITIONFORM lpCompForm)
BOOL WINAPI ImmUnlockIMC(HIMC hIMC)
HIMC WINAPI ImmGetContext(HWND hWnd)
BOOL WINAPI ImmReleaseContext(HWND hWnd, HIMC hIMC)
LPINPUTCONTEXT WINAPI ImmLockIMC(HIMC hIMC)
static void cleanup(void)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
HRESULT WINAPI ScriptStringFree(SCRIPT_STRING_ANALYSIS *pssa)
HRESULT WINAPI ScriptStringGetLogicalWidths(SCRIPT_STRING_ANALYSIS ssa, int *piDx)
HRESULT WINAPI ScriptStringAnalyse(HDC hdc, const void *pString, int cString, int cGlyphs, int iCharset, DWORD dwFlags, int iReqWidth, SCRIPT_CONTROL *psControl, SCRIPT_STATE *psState, const int *piDx, SCRIPT_TABDEF *pTabdef, const BYTE *pbInClass, SCRIPT_STRING_ANALYSIS *pssa)
HRESULT WINAPI ScriptStringOut(SCRIPT_STRING_ANALYSIS ssa, int iX, int iY, UINT uOptions, const RECT *prc, int iMinSel, int iMaxSel, BOOL fDisabled)
const SIZE *WINAPI ScriptString_pSize(SCRIPT_STRING_ANALYSIS ssa)
const int *WINAPI ScriptString_pcOutChars(SCRIPT_STRING_ANALYSIS ssa)
HRESULT WINAPI ScriptStringXtoCP(SCRIPT_STRING_ANALYSIS ssa, int iX, int *piCh, int *piTrailing)
HRESULT WINAPI ScriptStringCPtoX(SCRIPT_STRING_ANALYSIS ssa, int icp, BOOL fTrailing, int *pX)
HRESULT WINAPI ScriptBreak(const WCHAR *chars, int count, const SCRIPT_ANALYSIS *sa, SCRIPT_LOGATTR *la)
HRESULT WINAPI DrawThemeBackground(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, const RECT *pRect, const RECT *pClipRect)
BOOL WINAPI IsThemeBackgroundPartiallyTransparent(HTHEME hTheme, int iPartId, int iStateId)
HRESULT WINAPI DrawThemeParentBackground(HWND hwnd, HDC hdc, RECT *prc)
HTHEME WINAPI OpenThemeData(HWND hwnd, LPCWSTR classlist)
HTHEME WINAPI GetWindowTheme(HWND hwnd)
HRESULT WINAPI CloseThemeData(HTHEME hTheme)
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
GLint GLint GLint GLint GLint x
GLint GLint GLint GLint GLint GLint y
GLuint GLuint GLsizei count
GLdouble GLdouble GLdouble r
GLint GLint GLsizei width
GLenum GLuint GLenum GLsizei const GLchar * buf
GLuint GLsizei GLsizei * length
GLubyte GLubyte GLubyte GLubyte w
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
HLOCAL NTAPI LocalReAlloc(HLOCAL hMem, SIZE_T dwBytes, UINT uFlags)
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
LPVOID NTAPI LocalLock(HLOCAL hMem)
BOOL NTAPI LocalUnlock(HLOCAL hMem)
SIZE_T NTAPI LocalSize(HLOCAL hMem)
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
HLOCAL NTAPI LocalFree(HLOCAL hMem)
struct INPUTCONTEXTDX * LPINPUTCONTEXTDX
#define NI_COMPOSITIONSTR
REFIID LPVOID DWORD_PTR dw
#define memcpy(s1, s2, n)
struct task_struct * current
static const WCHAR textW[]
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static float(__cdecl *square_half_float)(float x
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
static SCRIPT_CACHE SCRIPT_ANALYSIS * psa
static HTHEME(WINAPI *pOpenThemeDataEx)(HWND
void redraw(int x, int y, int cx, int cy)
static unsigned __int64 next
SCRIPT_STRING_ANALYSIS ssa
static void buffer_size(GLcontext *ctx, GLuint *width, GLuint *height)
TW_UINT32 TW_UINT16 TW_UINT16 MSG
int WINAPI GetBkMode(_In_ HDC)
BOOL WINAPI GetTextMetricsW(_In_ HDC, _Out_ LPTEXTMETRICW)
HGDIOBJ WINAPI GetStockObject(_In_ int)
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
int WINAPI GetClipBox(_In_ HDC, _Out_ LPRECT)
COLORREF WINAPI SetBkColor(_In_ HDC, _In_ COLORREF)
HRGN WINAPI CreateRectRgn(_In_ int, _In_ int, _In_ int, _In_ int)
LONG WINAPI GdiGetCharDimensions(HDC, LPTEXTMETRICW, LONG *)
COLORREF WINAPI GetTextColor(_In_ HDC)
int WINAPI IntersectClipRect(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int)
int WINAPI ExcludeClipRect(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int)
HGDIOBJ WINAPI GetCurrentObject(_In_ HDC, _In_ UINT)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
int WINAPI CombineRgn(_In_opt_ HRGN hrgnDest, _In_opt_ HRGN hrgnSrc1, _In_opt_ HRGN hrgnSrc2, _In_ int fnCombineMode)
COLORREF WINAPI GetBkColor(_In_ HDC)
#define CHINESEBIG5_CHARSET
BOOL WINAPI PatBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD)
BOOL WINAPI TextOutW(_In_ HDC hdc, _In_ int x, _In_ int y, _In_reads_(c) LPCWSTR lpString, _In_ int c)
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
HFONT WINAPI CreateFontIndirectW(_In_ const LOGFONTW *)
int WINAPI SetBkMode(_In_ HDC, _In_ int)
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
BOOL WINAPI SetRectRgn(_In_ HRGN, _In_ int, _In_ int, _In_ int, _In_ int)
BOOL WINAPI GetTextExtentPoint32W(_In_ HDC hdc, _In_reads_(c) LPCWSTR lpString, _In_ int c, _Out_ LPSIZE psizl)
HWND WINAPI GetFocus(void)
HWND WINAPI SetCapture(_In_ HWND hWnd)
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
DWORD WINAPI GetSysColor(_In_ int)
BOOL WINAPI CopyRect(_Out_ LPRECT, _In_ LPCRECT)
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define WM_CTLCOLORSTATIC
HKL WINAPI GetKeyboardLayout(_In_ DWORD)
BOOL WINAPI RedrawWindow(_In_opt_ HWND, _In_opt_ LPCRECT, _In_opt_ HRGN, _In_ UINT)
#define GetWindowLongPtrW
BOOL WINAPI ShowCaret(_In_opt_ HWND)
HDC WINAPI GetWindowDC(_In_opt_ HWND)
#define EM_GETWORDBREAKPROC
BOOL WINAPI ReleaseCapture(void)
#define EM_GETPASSWORDCHAR
#define COLOR_WINDOWFRAME
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
struct tagSCROLLINFO SCROLLINFO
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define EM_SETPASSWORDCHAR
HBRUSH WINAPI GetSysColorBrush(_In_ int)
HANDLE WINAPI SetClipboardData(_In_ UINT, _In_opt_ HANDLE)
#define EM_EMPTYUNDOBUFFER
LONG WINAPI SetWindowLongW(_In_ HWND, _In_ int, _In_ LONG)
LONG WINAPI GetWindowLongW(_In_ HWND, _In_ int)
ATOM WINAPI RegisterClassW(_In_ CONST WNDCLASSW *)
BOOL WINAPI CloseClipboard(void)
BOOL WINAPI IsRectEmpty(_In_ LPCRECT)
HDC WINAPI GetDCEx(_In_opt_ HWND, _In_opt_ HRGN, _In_ DWORD)
HWND WINAPI GetCapture(void)
BOOL WINAPI OpenClipboard(_In_opt_ HWND)
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
HANDLE WINAPI GetClipboardData(_In_ UINT)
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
#define EM_GETFIRSTVISIBLELINE
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
#define WM_IME_SETCONTEXT
BOOL WINAPI PtInRect(_In_ LPCRECT, _In_ POINT)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
HWND WINAPI SetFocus(_In_opt_ HWND)
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
#define SIF_DISABLENOSCROLL
BOOL WINAPI IntersectRect(_Out_ LPRECT, _In_ LPCRECT, _In_ LPCRECT)
BOOL WINAPI EmptyClipboard(void)
#define EM_SETWORDBREAKPROC
#define COLOR_HIGHLIGHTTEXT
HDC WINAPI GetDC(_In_opt_ HWND)
BOOL WINAPI InvalidateRgn(_In_ HWND, _In_opt_ HRGN, _In_ BOOL)
DWORD WINAPI CharUpperBuffW(_Inout_updates_(cchLength) LPWSTR lpsz, _In_ DWORD cchLength)
int(CALLBACK * EDITWORDBREAKPROCW)(LPWSTR, int, int, int)
#define CB_GETDROPPEDSTATE
BOOL WINAPI SystemParametersInfoW(_In_ UINT uiAction, _In_ UINT uiParam, _Inout_opt_ PVOID pvParam, _In_ UINT fWinIni)
#define WM_IME_COMPOSITIONFULL
BOOL WINAPI SetRectEmpty(_Out_ LPRECT)
BOOL WINAPI IsWindowEnabled(_In_ HWND)
HWND WINAPI GetParent(_In_ HWND)
BOOL WINAPI DestroyMenu(_In_ HMENU)
BOOL WINAPI OffsetRect(_Inout_ LPRECT, _In_ int, _In_ int)
BOOL WINAPI TrackPopupMenu(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _Reserved_ int, _In_ HWND, _Reserved_ LPCRECT)
int WINAPI SetScrollInfo(_In_ HWND, _In_ int, _In_ LPCSCROLLINFO, _In_ BOOL)
BOOL WINAPI UnregisterClassW(_In_ LPCWSTR, HINSTANCE)
BOOL WINAPI SetCaretPos(_In_ int, _In_ int)
int WINAPI GetScrollPos(_In_ HWND, _In_ int)
BOOL WINAPI CreateCaret(_In_ HWND, _In_opt_ HBITMAP, _In_ int, _In_ int)
BOOL WINAPI DestroyCaret(void)
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
#define SystemParametersInfo
#define SetWindowLongPtrW
BOOL WINAPI InflateRect(_Inout_ LPRECT, _In_ int, _In_ int)
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
int WINAPI ScrollWindowEx(_In_ HWND, _In_ int, _In_ int, _In_opt_ LPCRECT, _In_opt_ LPCRECT, _In_opt_ HRGN, _Out_opt_ LPRECT, _In_ UINT)
int WINAPI GetSystemMetrics(_In_ int)
BOOL WINAPI IsClipboardFormatAvailable(_In_ UINT)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
SHORT WINAPI GetKeyState(_In_ int)
DWORD WINAPI CharLowerBuffW(_Inout_updates_(cchLength) LPWSTR lpsz, _In_ DWORD cchLength)
LONG WINAPI TabbedTextOutW(_In_ HDC hdc, _In_ int x, _In_ int y, _In_reads_(chCount) LPCWSTR lpString, _In_ int chCount, _In_ int nTabPositions, _In_reads_opt_(nTabPositions) CONST INT *lpnTabStopPositions, _In_ int nTabOrigin)
HMENU WINAPI LoadMenuA(_In_opt_ HINSTANCE, _In_ LPCSTR)