+void Widget_Fire(tElement *Element)
+{
+ tWidgetMsg_Fire msg;
+ msg.WidgetID = Element->ID;
+ WM_SendMessage(Element->Window, Element->Window, MSG_WIDGET_FIRE, sizeof(msg), &msg);
+}
+
+// --- Type Helpers
+void Widget_DispText_UpdateText(tElement *Element, const char *Text)
+{
+ int w=0, h=0;
+
+ if(Element->Text) free(Element->Text);
+ Element->Text = strdup(Text);
+
+ WM_Render_GetTextDims(NULL, Element->Text, &w, &h);
+ if(Element->Parent && (Element->Parent->Flags & ELEFLAG_VERTICAL)) {
+ Element->MinCross = w;
+ Element->MinWith = h;
+ }
+ else {
+ Element->MinWith = w;
+ Element->MinCross = h;
+ }
+
+ Widget_UpdateMinDims(Element->Parent);
+}
+
+void Widget_Image_UpdateText(tElement *Element, const char *Text)
+{
+ if(Element->Data) free(Element->Data);
+ Element->Data = Image_Load( Text );
+ if(!Element->Data) {
+// Element->Flags &= ~ELEFLAG_FIXEDSIZE;
+ return ;
+ }
+
+ Element->CachedW = ((tImage*)Element->Data)->Width;
+ Element->CachedH = ((tImage*)Element->Data)->Height;
+
+ if(Element->Parent && (Element->Parent->Flags & ELEFLAG_VERTICAL) ) {
+ Element->MinCross = ((tImage*)Element->Data)->Width;
+ Element->MinWith = ((tImage*)Element->Data)->Height;
+ }
+ else {
+ Element->MinWith = ((tImage*)Element->Data)->Width;
+ Element->MinCross = ((tImage*)Element->Data)->Height;
+ }
+
+ Widget_UpdateMinDims(Element->Parent);
+
+ // NOTE: Doesn't update Element->Text because it's useless
+}
+
+int Widget_Button_MouseButton(tElement *Element, int X, int Y, int Button, int bPress)
+{
+ _SysDebug("Ele %i - Button %i %s",
+ Element->ID, Button,
+ (bPress ? "pressed" : "released")
+ );
+ if(!bPress) Widget_Fire(Element);
+ 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
+}
+