X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FApplications%2Faxwin3_src%2Flibaxwin3.so_src%2Fr_richtext.c;h=9fed54494b1b2d29750905155dc60a527cdff6d1;hb=97088ef688ddecc19077ce134046af7ea6d1e232;hp=9ef1680636d50e4956c39d35adf928b254d2fd3e;hpb=134ea1493847ea65896430c446c471874d0cf4fa;p=tpg%2Facess2.git diff --git a/Usermode/Applications/axwin3_src/libaxwin3.so_src/r_richtext.c b/Usermode/Applications/axwin3_src/libaxwin3.so_src/r_richtext.c index 9ef16806..9fed5449 100644 --- a/Usermode/Applications/axwin3_src/libaxwin3.so_src/r_richtext.c +++ b/Usermode/Applications/axwin3_src/libaxwin3.so_src/r_richtext.c @@ -9,27 +9,40 @@ #include #include "include/internal.h" #include +#include +#include +//#include // === TYPES === typedef struct sRichText_Window { tAxWin3_RichText_KeyHandler KeyCallback; tAxWin3_RichText_MouseHandler MouseCallback; -// tAxWin3_RichText_LineHandler LineHandler; + tAxWin3_RichText_LineHandler LineHandler; } tRichText_Window; // === CODE === int AxWin3_RichText_MessageHandler(tHWND Window, int MessageID, int Size, void *Data) { + tRichText_Window *info = AxWin3_int_GetDataPtr(Window); + struct sWndMsg_KeyAction *keyaction = Data; + _SysDebug("MessageID = %i", MessageID); + switch(MessageID) + { + case WNDMSG_KEYFIRE: + if(Size < sizeof(*keyaction)) return -1; + info->KeyCallback(Window, 2, keyaction->KeySym, keyaction->UCS32); + return 1; + } return 0; } static void _SendAttrib(tHWND Window, int Attr, uint32_t Value) { - struct sRichTextMsg_SetAttr msg; + struct sRichTextIPC_SetAttr msg; msg.Attr = Attr; msg.Value = Value; - AxWin3_SendMessage(Window, Window, MSG_RICHTEXT_SETATTR, sizeof(msg), &msg); + AxWin3_SendIPC(Window, IPC_RICHTEXT_SETATTR, sizeof(msg), &msg); } tHWND AxWin3_RichText_CreateWindow(tHWND Parent, int Flags) @@ -89,3 +102,16 @@ void AxWin3_RichText_SetCursorPos(tHWND Window, int Row, int Column) return ; _SendAttrib(Window, _ATTR_CURSORPOS, ((Row & 0xFFFFF) << 12) | (Column & 0xFFF)); } + +void AxWin3_RichText_SendLine(tHWND Window, int Line, const char *Text) +{ + // TODO: Local sanity check on `Line`? + struct sRichTextIPC_WriteLine *msg; + size_t len = sizeof(*msg) + strlen(Text) + 1; + char buffer[len]; + msg = (void*)buffer; + msg->Line = Line; + strcpy(msg->LineData, Text); + AxWin3_SendIPC(Window, IPC_RICHTEXT_WRITELINE, len, msg); +} +