2 * AxWin3 Interface Library
3 * - By John Hodge (thePowersGang)
6 * - Formatted Text window type
8 #include <axwin3/axwin.h>
9 #include <axwin3/richtext.h>
10 #include "include/internal.h"
11 #include <richtext_messages.h>
13 #include <wm_messages.h>
17 typedef struct sRichText_Window
19 tAxWin3_RichText_KeyHandler KeyCallback;
20 tAxWin3_RichText_MouseHandler MouseCallback;
21 tAxWin3_RichText_LineHandler LineHandler;
25 int AxWin3_RichText_MessageHandler(tHWND Window, int MessageID, int Size, void *Data)
27 tRichText_Window *info = AxWin3_int_GetDataPtr(Window);
28 struct sWndMsg_KeyAction *keyaction = Data;
32 if(Size < sizeof(*keyaction)) return -1;
33 info->KeyCallback(Window, 2, keyaction->KeySym, keyaction->UCS32);
36 if(Size < sizeof(*keyaction)) return -1;
37 info->KeyCallback(Window, 1, keyaction->KeySym, keyaction->UCS32);
40 if(Size < sizeof(*keyaction)) return -1;
41 info->KeyCallback(Window, 0, keyaction->KeySym, 0);
47 static void _SendAttrib(tHWND Window, int Attr, uint32_t Value)
49 struct sRichTextIPC_SetAttr msg;
52 AxWin3_SendIPC(Window, IPC_RICHTEXT_SETATTR, sizeof(msg), &msg);
55 tHWND AxWin3_RichText_CreateWindow(tHWND Parent, int Flags)
57 tHWND ret = AxWin3_CreateWindow(Parent, "RichText", Flags,
58 sizeof(tRichText_Window), AxWin3_RichText_MessageHandler);
59 // tRichText_Window *info = AxWin3_int_GetDataPtr(ret);
63 void AxWin3_RichText_SetKeyHandler(tHWND Window, tAxWin3_RichText_KeyHandler Handler)
65 tRichText_Window *info = AxWin3_int_GetDataPtr(Window);
66 info->KeyCallback = Handler;
69 void AxWin3_RichText_SetMouseHandler(tHWND Window, tAxWin3_RichText_MouseHandler Handler)
71 tRichText_Window *info = AxWin3_int_GetDataPtr(Window);
72 info->MouseCallback = Handler;
75 void AxWin3_RichText_EnableScroll(tHWND Window, int bEnable)
77 _SendAttrib(Window, _ATTR_SCROLL, bEnable);
79 void AxWin3_RichText_SetLineCount(tHWND Window, int Lines)
81 _SendAttrib(Window, _ATTR_LINECOUNT, Lines);
83 void AxWin3_RichText_SetColCount(tHWND Window, int Cols)
85 _SendAttrib(Window, _ATTR_COLCOUNT, Cols);
87 void AxWin3_RichText_SetBackground(tHWND Window, uint32_t ARGB_Colour)
89 _SendAttrib(Window, _ATTR_DEFBG, ARGB_Colour);
91 void AxWin3_RichText_SetDefaultColour(tHWND Window, uint32_t ARGB_Colour)
93 _SendAttrib(Window, _ATTR_DEFFG, ARGB_Colour);
95 void AxWin3_RichText_SetFont(tHWND Window, const char *FontName, int PointSize)
99 void AxWin3_RichText_SetCursorType(tHWND Window, int Type)
101 _SendAttrib(Window, _ATTR_CURSOR, Type);
103 void AxWin3_RichText_SetCursorBlink(tHWND Window, int bBlink)
105 _SendAttrib(Window, _ATTR_CURSORBLINK, bBlink);
107 void AxWin3_RichText_SetCursorPos(tHWND Window, int Row, int Column)
109 if(Row < 0 || Row > 0xFFFFF || Column > 0xFFF || Column < 0)
111 _SendAttrib(Window, _ATTR_CURSORPOS, ((Row & 0xFFFFF) << 12) | (Column & 0xFFF));
114 void AxWin3_RichText_ScrollRange(tHWND Window, int FirstRow, int RangeCount, int DownCount)
118 if( RangeCount < -2 || RangeCount == 0 )
120 if( RangeCount > 0 && DownCount > RangeCount )
123 struct sRichTextIPC_ScrollRange msg;
124 msg.First = FirstRow;
125 msg.Range = RangeCount;
126 msg.Count = DownCount;
127 AxWin3_SendIPC(Window, IPC_RICHTEXT_SCROLLRANGE, sizeof(msg), &msg);
130 void AxWin3_RichText_SendLine(tHWND Window, int Line, const char *Text)
132 // TODO: Local sanity check on `Line`?
133 struct sRichTextIPC_WriteLine *msg;
134 size_t len = sizeof(*msg) + strlen(Text) + 1;
138 strcpy(msg->LineData, Text);
139 AxWin3_SendIPC(Window, IPC_RICHTEXT_WRITELINE, len, msg);