X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FApplications%2Faxwin3_src%2Flibaxwin3.so_src%2Fr_richtext.c;h=1ac98fe5c5bcad4e4dd09e9ad786efe30577b252;hb=45ff232a1db704623e0c4baed011d12cbd44b06e;hp=74b437b1ea5c2fdc2df51cb4563b0f5cf38ae4c6;hpb=a897ce08ed162eff3e06db533c490c4dd5b23e54;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 74b437b1..1ac98fe5 100644 --- a/Usermode/Applications/axwin3_src/libaxwin3.so_src/r_richtext.c +++ b/Usermode/Applications/axwin3_src/libaxwin3.so_src/r_richtext.c @@ -9,6 +9,9 @@ #include #include "include/internal.h" #include +#include +#include +//#include // === TYPES === typedef struct sRichText_Window @@ -21,15 +24,32 @@ typedef struct sRichText_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; + switch(MessageID) + { + case WNDMSG_KEYFIRE: + if(Size < sizeof(*keyaction)) return -1; + info->KeyCallback(Window, 2, keyaction->KeySym, keyaction->UCS32); + return 1; + case WNDMSG_KEYDOWN: + if(Size < sizeof(*keyaction)) return -1; + info->KeyCallback(Window, 1, keyaction->KeySym, keyaction->UCS32); + return 1; + case WNDMSG_KEYUP: + if(Size < sizeof(*keyaction)) return -1; + info->KeyCallback(Window, 0, keyaction->KeySym, 0); + 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 +109,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); +} +