void Widget_SetText(tWidgetWin *Info, int Len, tWidgetMsg_SetText *Msg);
int Renderer_Widget_HandleMessage(tWindow *Target, int Msg, int Len, void *Data);
// --- Type helpers
-void Widget_TextBox_UpdateText(tElement *Element, const char *Text);
+void Widget_DispText_UpdateText(tElement *Element, const char *Text);
void Widget_Image_UpdateText(tElement *Element, const char *Text);
int Widget_Button_MouseButton(tElement *Element, int X, int Y, int Button, int bPress);
+void Widget_TextInput_Init(tElement *Element);
// === GLOBALS ===
tWMRenderer gRenderer_Widget = {
} gaWM_WidgetTypes[NUM_ELETYPES] = {
{0}, // NULL
{0}, // Box
- {.UpdateText = Widget_TextBox_UpdateText}, // Text
+ {.UpdateText = Widget_DispText_UpdateText}, // Text
{.UpdateText = Widget_Image_UpdateText}, // Image
- {.MouseButton = Widget_Button_MouseButton} // Button
+ {.MouseButton = Widget_Button_MouseButton}, // Button
+ {0}, // Spacer
+ {.Init = Widget_TextInput_Init}, // Text Box (Single Line)
};
const int ciWM_NumWidgetTypes = sizeof(gaWM_WidgetTypes)/sizeof(gaWM_WidgetTypes[0]);
dynWith /= nChildren - nFixed;
}
- _SysDebug("%i - nChildren = %i, nFixed = %i, dynWith = %i, fixedSize = %i",
- Element->ID, nChildren, nFixed, dynWith, fixedSize);
+// _SysDebug("%i - nChildren = %i, nFixed = %i, dynWith = %i, fixedSize = %i",
+// Element->ID, nChildren, nFixed, dynWith, fixedSize);
// Get the cross size
if( Element->Flags & ELEFLAG_VERTICAL )
if( Element->Flags & ELEFLAG_NORENDER ) return ;
- _SysDebug("Widget_UpdatePosition: (Element=%p(%i Type=%i Flags=0x%x))",
- Element, Element->ID, Element->Type, Element->Flags);
+// _SysDebug("Widget_UpdatePosition: (Element=%p(%i Type=%i Flags=0x%x))",
+// Element, Element->ID, Element->Type, Element->Flags);
// Initialise
x = Element->CachedX + Element->PaddingL;
- Element->PaddingT - Element->PaddingB;
}
- _SysDebug(" Widget_UpdatePosition[%i]: newX = %i, newY = %i", Element->ID, newX, newY);
+// _SysDebug(" Widget_UpdatePosition[%i]: newX = %i, newY = %i", Element->ID, newX, newY);
// Check for changes, and don't update if there was no change
if( newX != child->CachedX || newY != child->CachedY )
return 0; }
+ case WNDMSG_MOUSEMOVE: {
+ _SysDebug("TODO: Support widget mouse move events");
+ return 0; }
+
case WNDMSG_MOUSEBTN: {
struct sWndMsg_MouseButton *msg = Data;
tWidgetMsg_MouseBtn client_msg;
}
// --- Type Helpers
-void Widget_TextBox_UpdateText(tElement *Element, const char *Text)
+void Widget_DispText_UpdateText(tElement *Element, const char *Text)
{
int w=0, h=0;
return 0; // Handled
}
+void Widget_TextInput_Init(tElement *Element)
+{
+ int h;
+
+ // TODO: Select font correctly
+ WM_Render_GetTextDims(NULL, "jJ", NULL, &h);
+
+ if( Element->Parent && (Element->Parent->Flags & ELEFLAG_VERTICAL) )
+ Element->MinWith = h;
+ else
+ Element->MinCross = h;
+
+ // No need to explicitly update parent min dims, as the AddElement routine does that
+}
+