Implemented EM_GETFIRSTVISIBLELINE and EM_POSFROMCHAR (basic
suboptimal implementation, can be optimized to skip whole paragraphs later if it's useful at all).
This commit is contained in:
parent
c6593b04b9
commit
025a1a5445
|
@ -43,7 +43,7 @@
|
||||||
- EM_GETCHARFORMAT (partly done)
|
- EM_GETCHARFORMAT (partly done)
|
||||||
- EM_GETEDITSTYLE
|
- EM_GETEDITSTYLE
|
||||||
+ EM_GETEVENTMASK
|
+ EM_GETEVENTMASK
|
||||||
- EM_GETFIRSTVISIBLELINE
|
+ EM_GETFIRSTVISIBLELINE (can be optimized if needed)
|
||||||
- EM_GETIMECOLOR 1.0asian
|
- EM_GETIMECOLOR 1.0asian
|
||||||
- EM_GETIMECOMPMODE 2.0
|
- EM_GETIMECOMPMODE 2.0
|
||||||
- EM_GETIMEOPTIONS 1.0asian
|
- EM_GETIMEOPTIONS 1.0asian
|
||||||
|
@ -81,7 +81,7 @@
|
||||||
+ EM_LINELENGTH
|
+ EM_LINELENGTH
|
||||||
+ EM_LINESCROLL
|
+ EM_LINESCROLL
|
||||||
- EM_PASTESPECIAL
|
- EM_PASTESPECIAL
|
||||||
- EM_POSFROMCHARS
|
+ EM_POSFROMCHAR
|
||||||
+ EM_REDO 2.0
|
+ EM_REDO 2.0
|
||||||
- EM_REQUESTRESIZE
|
- EM_REQUESTRESIZE
|
||||||
+ EM_REPLACESEL (proper style?) ANSI&Unicode
|
+ EM_REPLACESEL (proper style?) ANSI&Unicode
|
||||||
|
@ -1111,7 +1111,6 @@ LRESULT WINAPI RichEditANSIWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lP
|
||||||
UNSUPPORTED_MSG(EM_GETAUTOURLDETECT)
|
UNSUPPORTED_MSG(EM_GETAUTOURLDETECT)
|
||||||
UNSUPPORTED_MSG(EM_GETBIDIOPTIONS)
|
UNSUPPORTED_MSG(EM_GETBIDIOPTIONS)
|
||||||
UNSUPPORTED_MSG(EM_GETEDITSTYLE)
|
UNSUPPORTED_MSG(EM_GETEDITSTYLE)
|
||||||
UNSUPPORTED_MSG(EM_GETFIRSTVISIBLELINE)
|
|
||||||
UNSUPPORTED_MSG(EM_GETIMECOMPMODE)
|
UNSUPPORTED_MSG(EM_GETIMECOMPMODE)
|
||||||
/* UNSUPPORTED_MSG(EM_GETIMESTATUS) missing in Wine headers */
|
/* UNSUPPORTED_MSG(EM_GETIMESTATUS) missing in Wine headers */
|
||||||
UNSUPPORTED_MSG(EM_GETLANGOPTIONS)
|
UNSUPPORTED_MSG(EM_GETLANGOPTIONS)
|
||||||
|
@ -1130,7 +1129,6 @@ LRESULT WINAPI RichEditANSIWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lP
|
||||||
UNSUPPORTED_MSG(EM_HIDESELECTION)
|
UNSUPPORTED_MSG(EM_HIDESELECTION)
|
||||||
UNSUPPORTED_MSG(EM_LIMITTEXT) /* also known as EM_SETLIMITTEXT */
|
UNSUPPORTED_MSG(EM_LIMITTEXT) /* also known as EM_SETLIMITTEXT */
|
||||||
UNSUPPORTED_MSG(EM_PASTESPECIAL)
|
UNSUPPORTED_MSG(EM_PASTESPECIAL)
|
||||||
/* UNSUPPORTED_MSG(EM_POSFROMCHARS) missing in Wine headers */
|
|
||||||
UNSUPPORTED_MSG(EM_REQUESTRESIZE)
|
UNSUPPORTED_MSG(EM_REQUESTRESIZE)
|
||||||
UNSUPPORTED_MSG(EM_SCROLL)
|
UNSUPPORTED_MSG(EM_SCROLL)
|
||||||
UNSUPPORTED_MSG(EM_SCROLLCARET)
|
UNSUPPORTED_MSG(EM_SCROLLCARET)
|
||||||
|
@ -1350,6 +1348,30 @@ LRESULT WINAPI RichEditANSIWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lP
|
||||||
case EM_GETPARAFORMAT:
|
case EM_GETPARAFORMAT:
|
||||||
ME_GetSelectionParaFormat(editor, (PARAFORMAT2 *)lParam);
|
ME_GetSelectionParaFormat(editor, (PARAFORMAT2 *)lParam);
|
||||||
return 0;
|
return 0;
|
||||||
|
case EM_GETFIRSTVISIBLELINE:
|
||||||
|
{
|
||||||
|
ME_DisplayItem *p = editor->pBuffer->pFirst;
|
||||||
|
int y = editor->nScrollPosY;
|
||||||
|
int ypara = 0;
|
||||||
|
int count = 0;
|
||||||
|
int ystart, yend;
|
||||||
|
while(p) {
|
||||||
|
p = ME_FindItemFwd(p, diStartRowOrParagraphOrEnd);
|
||||||
|
if (p->type == diTextEnd)
|
||||||
|
break;
|
||||||
|
if (p->type == diParagraph) {
|
||||||
|
ypara = p->member.para.nYPos;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ystart = ypara + p->member.row.nYPos;
|
||||||
|
yend = ystart + p->member.row.nHeight;
|
||||||
|
if (y < yend) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
case EM_LINESCROLL:
|
case EM_LINESCROLL:
|
||||||
{
|
{
|
||||||
int nPos = editor->nScrollPosY, nEnd= editor->nTotalLength - editor->sizeWindow.cy;
|
int nPos = editor->nScrollPosY, nEnd= editor->nTotalLength - editor->sizeWindow.cy;
|
||||||
|
@ -1684,6 +1706,29 @@ LRESULT WINAPI RichEditANSIWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lP
|
||||||
return ME_SetZoom(editor, wParam, lParam);
|
return ME_SetZoom(editor, wParam, lParam);
|
||||||
case EM_CHARFROMPOS:
|
case EM_CHARFROMPOS:
|
||||||
return ME_CharFromPos(editor, ((POINTL *)lParam)->x, ((POINTL *)lParam)->y);
|
return ME_CharFromPos(editor, ((POINTL *)lParam)->x, ((POINTL *)lParam)->y);
|
||||||
|
case EM_POSFROMCHAR:
|
||||||
|
{
|
||||||
|
ME_DisplayItem *pRun;
|
||||||
|
int nCharOfs, nOffset, nLength;
|
||||||
|
POINTL pt = {0,0};
|
||||||
|
|
||||||
|
nCharOfs = wParam;
|
||||||
|
/* detect which API version we're dealing with */
|
||||||
|
if (wParam >= 0x40000)
|
||||||
|
nCharOfs = lParam;
|
||||||
|
nLength = ME_GetTextLength(editor);
|
||||||
|
|
||||||
|
if (nCharOfs < nLength-1) {
|
||||||
|
ME_RunOfsFromCharOfs(editor, nCharOfs, &pRun, &nOffset);
|
||||||
|
pt.y = pRun->member.run.pt.y;
|
||||||
|
pt.x = pRun->member.run.pt.x + ME_PointFromChar(editor, &pRun->member.run, nOffset);
|
||||||
|
}
|
||||||
|
pt.y += ME_GetParagraph(pRun)->member.para.nYPos;
|
||||||
|
if (wParam >= 0x40000) {
|
||||||
|
*(POINTL *)wParam = pt;
|
||||||
|
}
|
||||||
|
return MAKELONG( pt.x, pt.y );
|
||||||
|
}
|
||||||
case WM_CREATE:
|
case WM_CREATE:
|
||||||
ME_CommitUndo(editor);
|
ME_CommitUndo(editor);
|
||||||
ME_WrapMarkedParagraphs(editor);
|
ME_WrapMarkedParagraphs(editor);
|
||||||
|
|
Loading…
Reference in New Issue