30#include "wine/unicode.h"
43#define LIF_FLAGSMASK (LIF_STATE | LIF_ITEMID | LIF_URL)
44#define LIS_MASK (LIS_FOCUSED | LIS_ENABLED | LIS_VISITED)
93#define SL_LEFTMARGIN (0)
94#define SL_TOPMARGIN (0)
95#define SL_RIGHTMARGIN (0)
96#define SL_BOTTOMMARGIN (0)
131 ERR(
"Failed to alloc DOC_ITEM structure!\n");
135 Item->nText = textlen;
169 static const WCHAR SL_LINKOPEN[] = {
'<',
'a' };
170 static const WCHAR SL_HREF[] = {
'h',
'r',
'e',
'f',
'=',
'\"' };
171 static const WCHAR SL_ID[] = {
'i',
'd',
'=',
'\"' };
172 static const WCHAR SL_LINKCLOSE[] = {
'<',
'/',
'a',
'>' };
174 int taglen = 0, textlen = 0, linklen = 0, docitems = 0;
218 CurrentParameter = &lpUrl;
219 CurrentParameterLen = &lenUrl;
225 CurrentParameter = &lpID;
226 CurrentParameterLen = &lenId;
238 *CurrentParameter =
current + taglen;
239 *CurrentParameterLen = 0;
241 for(tmp = *CurrentParameter; *tmp != 0; tmp++)
250 (*CurrentParameterLen)++;
275 if(ValidLink && ValidParam)
289 if(textstart ==
NULL)
298 if(textstart !=
NULL && textlen > 0 && firsttag > textstart)
303 ERR(
"Unable to create new document item!\n");
313 if(linktext !=
NULL && linklen > 0)
318 ERR(
"Unable to create new document item!\n");
368 if(CurrentType ==
slText && textstart ==
NULL)
383 if(textstart ==
NULL && CurrentType ==
slText)
392 if(textstart !=
NULL && textlen > 0)
397 ERR(
"Unable to create new document item!\n");
437 if(linktext !=
NULL && linklen > 0)
443 ERR(
"Unable to create new document item!\n");
463 ERR(
"DocItem not a link!\n");
491 if ((Current->
Type ==
slLink) && (iLink-- <= 0))
569 for (
i = 0;
i < nFit;
i++)
if (
Text[
i] ==
'\n')
break;
571 if (
i == *LineLen)
return FALSE;
577 while (
i &&
Text[
i - 1] != BreakChar)
i--;
599 int x,
y, LineHeight;
603 szDoc.
cx = szDoc.
cy = 0;
619 LineHeight =
tm.tmHeight +
tm.tmExternalLeading;
630 if(Current->
nText == 0)
657 if (
n && *tx ==
'\n')
671 if((
n == 0 && SkipChars != 0) ||
711 cbl = bl + nBlocks - 1;
714 cbl->
nSkip = SkipChars;
738 ERR(
"Failed to alloc DOC_TEXTBLOCK structure!\n");
903 ERR(
"Failed to create link font!\n");
974 if(Current == DocItem)
980 Current->
u.
Link.state &= ~LIS_FOCUSED;
1002 ERR(
"Invalid Flags!\n");
1009 ERR(
"Link %d couldn't be found\n",
Item->iLink);
1023 ERR(
"Unable to allocate memory for link id\n");
1040 ERR(
"Unable to allocate memory for link url\n");
1048 di->
u.
Link.szID = szId;
1054 di->
u.
Link.szUrl = szUrl;
1064 Repaint = (oldstate != di->
u.
Link.state);
1088 ERR(
"Invalid Flags!\n");
1095 ERR(
"Link %d couldn't be found\n",
Item->iLink);
1105 Item->state &= ~LIS_FOCUSED;
1123 if(di->
u.
Link.szUrl)
1183 if(Current->
u.
Link.szID)
1191 if(Current->
u.
Link.szUrl)
1253 if(
Link->u.Link.szID)
1261 if(
Link->u.Link.szUrl)
1354 if(Old !=
NULL && Old != Current)
1430 if(NewFocus !=
NULL)
1434 if(OldFocus && OldFocus != NewFocus)
1461 return NewFocus ==
NULL;
1474 rc.
right = cxMaxWidth;
1673 infoPtr->
Style &= ~WS_DISABLED;
1678 case WM_STYLECHANGED:
1693 if (!infoPtr)
return -1;
1697 infoPtr->Self =
hwnd;
1698 infoPtr->Notify =
cs->hwndParent;
1699 infoPtr->Style =
cs->style;
1701 infoPtr->LinkFont = 0;
1703 infoPtr->HasFocus =
FALSE;
1704 infoPtr->MouseDownID = -1;
1708 infoPtr->BreakChar =
' ';
1710 TRACE(
"SysLink Ctrl creation, hwnd=%p\n",
hwnd);
1715 TRACE(
"SysLink Ctrl destruction, hwnd=%p\n",
hwnd);
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static void list_remove(struct list_entry *entry)
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
static void list_init(struct list_entry *head)
PVOID ReAlloc(IN DWORD dwFlags, IN PVOID lpMem, IN SIZE_T dwBytes)
PVOID Alloc(IN DWORD dwFlags, IN SIZE_T dwBytes)
BOOL COMCTL32_IsReflectedMessage(UINT uMsg) DECLSPEC_HIDDEN
VOID COMCTL32_RefreshSysColors(void) DECLSPEC_HIDDEN
COMCTL32_SysColor comctl32_color
static LRESULT SYSLINK_Draw(const SYSLINK_INFO *infoPtr, HDC hdc)
static LRESULT WINAPI SysLinkWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
static VOID SYSLINK_Render(const SYSLINK_INFO *infoPtr, HDC hdc, PRECT pRect)
static BOOL SYSLINK_PtInDocItem(const DOC_ITEM *DocItem, POINT pt)
struct _DOC_ITEM DOC_ITEM
static PDOC_ITEM SYSLINK_GetNextLink(const SYSLINK_INFO *infoPtr, PDOC_ITEM Current)
VOID SYSLINK_Unregister(void)
static LRESULT SYSLINK_LButtonDown(SYSLINK_INFO *infoPtr, const POINT *pt)
static BOOL SYSLINK_WrapLine(LPWSTR Text, WCHAR BreakChar, int x, int *LineLen, int nFit, LPSIZE Extent)
static PDOC_ITEM SYSLINK_AppendDocItem(SYSLINK_INFO *infoPtr, LPCWSTR Text, UINT textlen, SL_ITEM_TYPE type, PDOC_ITEM LastItem)
static LONG SYSLINK_GetIdealSize(const SYSLINK_INFO *infoPtr, int cxMaxWidth, SIZE *lpSize)
VOID SYSLINK_Register(void)
static LRESULT SYSLINK_SetFocus(SYSLINK_INFO *infoPtr)
static PDOC_ITEM SYSLINK_LinkAtPt(const SYSLINK_INFO *infoPtr, const POINT *pt, int *LinkId, BOOL MustBeEnabled)
static LRESULT SYSLINK_Paint(const SYSLINK_INFO *infoPtr, HDC hdcParam)
static PDOC_ITEM SYSLINK_GetLinkItemByIndex(const SYSLINK_INFO *infoPtr, int iLink)
static LRESULT SYSLINK_KillFocus(SYSLINK_INFO *infoPtr)
static UINT SYSLINK_ParseText(SYSLINK_INFO *infoPtr, LPCWSTR Text)
static LRESULT SYSLINK_SetText(SYSLINK_INFO *infoPtr, LPCWSTR Text)
static VOID SYSLINK_RepaintLink(const SYSLINK_INFO *infoPtr, const DOC_ITEM *DocItem)
static HFONT SYSLINK_SetFont(SYSLINK_INFO *infoPtr, HFONT hFont, BOOL bRedraw)
static LRESULT SYSLINK_GetItem(const SYSLINK_INFO *infoPtr, PLITEM Item)
static PDOC_ITEM SYSLINK_GetPrevLink(const SYSLINK_INFO *infoPtr, PDOC_ITEM Current)
static LRESULT SYSLINK_SetItem(const SYSLINK_INFO *infoPtr, const LITEM *Item)
static PDOC_ITEM SYSLINK_GetFocusLink(const SYSLINK_INFO *infoPtr, int *LinkId)
static LRESULT SYSLINK_LButtonUp(SYSLINK_INFO *infoPtr, const POINT *pt)
static PDOC_ITEM SYSLINK_SetFocusLink(const SYSLINK_INFO *infoPtr, const DOC_ITEM *DocItem)
static BOOL SYSLINK_OnEnter(const SYSLINK_INFO *infoPtr)
static BOOL SYSLINK_NoNextLink(const SYSLINK_INFO *infoPtr, BOOL Prev)
struct DOC_TEXTBLOCK * PDOC_TEXTBLOCK
static VOID SYSLINK_FreeDocItem(PDOC_ITEM DocItem)
static BOOL SYSKEY_SelectNextPrevLink(const SYSLINK_INFO *infoPtr, BOOL Prev)
static VOID SYSLINK_ClearDoc(SYSLINK_INFO *infoPtr)
static LRESULT SYSLINK_SendParentNotify(const SYSLINK_INFO *infoPtr, UINT code, const DOC_ITEM *Link, int iLink)
struct _DOC_ITEM * PDOC_ITEM
static LRESULT SYSLINK_GetIdealHeight(const SYSLINK_INFO *infoPtr)
static LRESULT SYSLINK_HitTest(const SYSLINK_INFO *infoPtr, PLHITTESTINFO HitTest)
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei GLenum type
GLint GLint GLint GLint GLint GLint y
GLint GLint GLsizei GLsizei height
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
static const struct newhuff ht[]
struct task_struct * current
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
#define LM_GETIDEALHEIGHT
#define strncmpiW(s1, s2, n)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
#define LIST_FOR_EACH_ENTRY_REV(elem, list, type, field)
__WINE_SERVER_LIST_INLINE void list_add_after(struct list *elem, struct list *to_add)
__WINE_SERVER_LIST_INLINE struct list * list_tail(const struct list *list)
struct _DOC_ITEM::@329::@331 Text
struct _DOC_ITEM::@329::@330 Link
WCHAR szUrl[L_MAX_URL_LENGTH]
WCHAR szID[MAX_LINKID_TEXT]
#define FIELD_OFFSET(t, f)
static int Link(const char **args)
_In_ WDFCOLLECTION _In_ WDFOBJECT Item
int WINAPI GetBkMode(_In_ HDC)
BOOL WINAPI GetTextMetricsW(_In_ HDC, _Out_ LPTEXTMETRICW)
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)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
BOOL WINAPI ExtTextOutW(_In_ HDC hdc, _In_ int x, _In_ int y, _In_ UINT options, _In_opt_ const RECT *lprect, _In_reads_opt_(c) LPCWSTR lpString, _In_ UINT c, _In_reads_opt_(c) const INT *lpDx)
BOOL WINAPI GetTextExtentExPointW(_In_ HDC hdc, _In_reads_(cchString) LPCWSTR lpszString, _In_ int cchString, _In_ int nMaxExtent, _Out_opt_ LPINT lpnFit, _Out_writes_to_opt_(cchString, *lpnFit) LPINT lpnDx, _Out_ LPSIZE lpSize)
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)
HBRUSH WINAPI CreateSolidBrush(_In_ COLORREF)
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define WM_CTLCOLORSTATIC
BOOL WINAPI RedrawWindow(_In_opt_ HWND, _In_opt_ LPCRECT, _In_opt_ HRGN, _In_ UINT)
#define GetWindowLongPtrW
DWORD WINAPI GetMessagePos(void)
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
ATOM WINAPI RegisterClassW(_In_ CONST WNDCLASSW *)
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
#define WM_SYSCOLORCHANGE
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
struct tagSTYLESTRUCT * LPSTYLESTRUCT
BOOL WINAPI PtInRect(_In_ LPCRECT, _In_ POINT)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
HWND WINAPI SetFocus(_In_opt_ HWND)
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
HDC WINAPI GetDC(_In_opt_ HWND)
BOOL WINAPI UnregisterClassW(_In_ LPCWSTR, HINSTANCE)
BOOL WINAPI DrawFocusRect(_In_ HDC, _In_ LPCRECT)
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
#define SetWindowLongPtrW
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
SHORT WINAPI GetKeyState(_In_ int)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)
_In_opt_ PALLOCATE_FUNCTION _In_opt_ PFREE_FUNCTION Free