#include "include/internal.h"
#include <richtext_messages.h>
#include <string.h>
+#include <wm_messages.h>
//#include <alloca.h>
// === TYPES ===
// === 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;
}
tHWND AxWin3_RichText_CreateWindow(tHWND Parent, int Flags)
{
- tHWND ret = AxWin3_CreateWindow(Parent, "RichText", Flags, sizeof(tRichText_Window), AxWin3_RichText_MessageHandler);
+ tHWND ret = AxWin3_CreateWindow(Parent, "RichText", Flags,
+ sizeof(tRichText_Window), AxWin3_RichText_MessageHandler);
// tRichText_Window *info = AxWin3_int_GetDataPtr(ret);
return ret;
}
_SendAttrib(Window, _ATTR_CURSORPOS, ((Row & 0xFFFFF) << 12) | (Column & 0xFFF));
}
+void AxWin3_RichText_ScrollRange(tHWND Window, int FirstRow, int RangeCount, int DownCount)
+{
+ if( FirstRow < 0 )
+ return ;
+ if( RangeCount < -2 || RangeCount == 0 )
+ return ;
+ if( RangeCount > 0 && DownCount > RangeCount )
+ return ;
+
+ struct sRichTextIPC_ScrollRange msg;
+ msg.First = FirstRow;
+ msg.Range = RangeCount;
+ msg.Count = DownCount;
+ AxWin3_SendIPC(Window, IPC_RICHTEXT_SCROLLRANGE, sizeof(msg), &msg);
+}
+
void AxWin3_RichText_SendLine(tHWND Window, int Line, const char *Text)
{
// TODO: Local sanity check on `Line`?