int SDL_ToggleButtonEventHandler(SDL_Widget *widget,SDL_Event *event)
{
    SDL_ToggleButton *Button=(SDL_ToggleButton*)widget;

    switch(event->type)
    {
    case SDL_MOUSEMOTION:
        if(SDL_WidgetIsInside(widget,event->motion.x,event->motion.y))
        {
            if(Button->State == SDL_BUTTON_STATE_UP)
            {
                Button->State = SDL_BUTTON_STATE_HIGHLIGHTED;
                SDL_WidgetRedrawEvent(widget);
            }
        }
        else
            Button->State = SDL_BUTTON_STATE_UP;
        
        break;
    case SDL_MOUSEBUTTONUP:
        if(SDL_WidgetIsInside(widget,event->motion.x,event->motion.y))
        {
            Button->State = SDL_BUTTON_STATE_HIGHLIGHTED;
            SDL_WidgetRedrawEvent(widget);
        }
        else
            Button->State = SDL_BUTTON_STATE_UP;
        break;
    default:
        break;
    }
    return 0;
}
int SDL_ProgressBarEventHandler(SDL_Widget *widget, SDL_Event *event)
{

    SDL_ProgressBar *ProgressBar=(SDL_ProgressBar*)widget;

    switch(event->type)
    {
    case SDL_MOUSEBUTTONDOWN:
        if(SDL_WidgetIsInside(widget,event->motion.x,event->motion.y))
        {
            if(ProgressBar->Orientation == HORIZONTAL)
            {
                ProgressBar->State=PROGRESSBAR_DRAG;
                ProgressBar->CurrentLine = event->motion.x - widget->Rect.x;
                ProgressBar_CurrentValue(ProgressBar);
                SDL_WidgetRedrawEvent(widget);
            }
        }
        break;
    case SDL_MOUSEMOTION:
        if(ProgressBar->Orientation == HORIZONTAL)
        {
            if(ProgressBar->State==PROGRESSBAR_DRAG)
            {
                ProgressBar->CurrentLine = event->motion.x - widget->Rect.x;
                ProgressBar_CurrentValue(ProgressBar);
                SDL_WidgetRedrawEvent(widget);
            }
        }
        break;
    case SDL_MOUSEBUTTONUP:
        if(ProgressBar->State == PROGRESSBAR_DRAG ||
                SDL_WidgetIsInside(widget,event->motion.x,event->motion.y))
        {
            if(ProgressBar->Orientation == VERTICAL)
            {
                ProgressBar->CurrentLine = event->motion.y - widget->Rect.y;
                ProgressBar_CurrentValue(ProgressBar);
                SDL_WidgetRedrawEvent(widget);
            }
            else if(ProgressBar->Orientation == HORIZONTAL)
            {
                ProgressBar->CurrentLine = event->motion.x - widget->Rect.x;
                ProgressBar_CurrentValue(ProgressBar);
                SDL_WidgetRedrawEvent(widget);
            }
            ProgressBar->State=PROGRESSBAR_NORMAL;
            SDL_SignalEmit(widget,"clicked");
        }
        break;
    default:
        break;
    }
    return 0;

}
Esempio n. 3
0
int SDL_PanelSetBackgroundColor(SDL_Widget *widget,Uint32 color)
{
    SDL_Panel *Panel=(SDL_Panel*)widget;
    Panel->color=color;
    SDL_WidgetRedrawEvent(widget);
    return 1;
}
Esempio n. 4
0
static void SDL_ButtonSignalMouseButtonUp(SDL_Object *object,void *signaldata,void *userdata)
{
    SDL_Button *Button=(SDL_Button*)object;
    SDL_Event *event=(SDL_Event *)signaldata;
    SDL_Widget *widget=(SDL_Widget*)object;

    if(SDL_WidgetIsInside(widget,event->motion.x,event->motion.y))
    {
        Button->State = SDL_BUTTON_STATE_HIGHLIGHTED;
        SDL_WidgetRedrawEvent(widget);
    }
    else
    {
        if(Button->State != SDL_BUTTON_STATE_UP)
        {
            Button->State = SDL_BUTTON_STATE_UP;
            SDL_WidgetRedrawEvent(widget);
        }
    }


}
Esempio n. 5
0
static int SDL_ScrollbarPixeloffset(SDL_Scrollbar *Scrollbar)
{
    SDL_Widget *widget=(SDL_Widget*)Scrollbar;
    int retval = 0;

    if(Scrollbar->CurrentValue < Scrollbar->MinValue)
        Scrollbar->CurrentValue = Scrollbar->MinValue;

    if(Scrollbar->CurrentValue > Scrollbar->MaxValue)
        Scrollbar->CurrentValue = Scrollbar->MaxValue;


    if(Scrollbar->Orientation == VERTICAL)
    {
        int height =  widget->Rect.h * Scrollbar->NormalStepValue / Scrollbar->MaxValue;   /* Height is the button height */
            
        if(height < 6)
            height = 6;

        Scrollbar->PixelValue = Scrollbar->CurrentValue * (widget->Rect.h - height) / Scrollbar->MaxValue;
        

        if(Scrollbar->PixelValue >  widget->Rect.h - height)
            Scrollbar->PixelValue = widget->Rect.h - height;

        retval = 1;

    }
    else
    {
        int width =  widget->Rect.w * Scrollbar->NormalStepValue / Scrollbar->MaxValue;   /* Width is the button height */
            
        if(width < 6)
            width = 6;

        Scrollbar->PixelValue = Scrollbar->CurrentValue * (widget->Rect.w - width) / Scrollbar->MaxValue;
        

        if(Scrollbar->PixelValue >  widget->Rect.w - width)
            Scrollbar->PixelValue = widget->Rect.w - width;

        retval = 1;

    }
    SDL_SignalEmit(widget,"value-changed",widget);
    SDL_WidgetRedrawEvent(widget);
    return retval;
}
Esempio n. 6
0
static void SDL_ButtonSignalMouseButtonDown(SDL_Object *object,void *signaldata,void *userdata)
{
    SDL_Button *Button = (SDL_Button*) object;
    SDL_Event  *event  = (SDL_Event *) signaldata;
    SDL_Widget *widget = (SDL_Widget*) object;

    if(SDL_WidgetIsInside(widget,event->motion.x,event->motion.y) &&
       event->button.button == 1)
    {
        Button->State = SDL_BUTTON_STATE_DOWN;
        SDL_SignalEmit(widget,"clicked",NULL);
        SDL_WidgetRedrawEvent(widget);
    }
    else
        Button->State = SDL_BUTTON_STATE_UP;        
}
static void SDL_SignalToggleButtonMouseButtonDown(SDL_Object *object,void *signaldata,void *userdata)
{
    SDL_ToggleButton *Button=(SDL_ToggleButton*)object;
    SDL_Event *event=(SDL_Event*)signaldata;

    if(SDL_WidgetIsInside((SDL_Widget*)object,event->motion.x,event->motion.y))
    {
        Button->State = SDL_BUTTON_STATE_DOWN;
        SDL_SignalObjectEmit(object,"clicked",NULL);
        SDL_WidgetRedrawEvent((SDL_Widget*)object);
    }
    else
        Button->State = SDL_BUTTON_STATE_UP;        

    userdata=userdata;
}
Esempio n. 8
0
int SDL_LabelSetText(SDL_Widget *widget,char *text)
{
    SDL_Label *Label=(SDL_Label*)widget;


    if(Label == NULL || text == NULL)
        return 0;


    if(Label->Caption)
        SDL_StringFree(Label->Caption);
    Label->Caption = SDL_StringCreate(text);
    
    SDL_WidgetRedrawEvent(widget);

    return 1;
}
Esempio n. 9
0
void SDL_ScrollbarSetCurrentValue(SDL_Widget *widget,int CurrentValue)
{
    SDL_Scrollbar *Scrollbar=(SDL_Scrollbar*)widget;
    if(CurrentValue < 0)
        CurrentValue = 0;

    if(CurrentValue >= Scrollbar->MaxValue)
        CurrentValue = Scrollbar->MaxValue - 1;

    if(Scrollbar->CurrentValue != CurrentValue)
    {
        Scrollbar->CurrentValue = CurrentValue;
        Scrollbar->PixelValue   = Scrollbar->CurrentValue * widget->Rect.h / Scrollbar->MaxValue;

        SDL_SignalEmit(widget,"value-changed",widget);
        SDL_WidgetRedrawEvent(widget);
    }
}
Esempio n. 10
0
int SDL_ScrollbarSetMaxValue(SDL_Widget *widget,int MaxValue)
{
    SDL_Scrollbar *Scrollbar=(SDL_Scrollbar*)widget;

    if(MaxValue == 0)
        return 0;

    if(MaxValue < Scrollbar->CurrentValue)
    {
        Scrollbar->CurrentValue = MaxValue;
        SDL_SignalEmit(widget,"value-changed",widget);
    }

    Scrollbar->MaxValue     = MaxValue;

    SDL_ScrollbarPixeloffset(Scrollbar);
    SDL_WidgetRedrawEvent(widget);
    return 1;
}
Esempio n. 11
0
static void SDL_ButtonSignalMouseMotion(SDL_Object *object,void *signaldata,void *userdata)
{
    SDL_Button *Button=(SDL_Button*)object;
    SDL_Event *event = (SDL_Event *)signaldata;
    SDL_Widget *widget=(SDL_Widget*)object;    

    if(SDL_WidgetIsInside(widget,event->motion.x,event->motion.y))
    {
        if(Button->State == SDL_BUTTON_STATE_UP)
        {
            Button->State = SDL_BUTTON_STATE_HIGHLIGHTED;
#if 0
            if(Button->Style != NULL && Button->Style->Highlighted != NULL)
            {
                SDL_WidgetRedrawEvent(widget);
            }
#endif
        }
    }
}
Esempio n. 12
0
int SDL_ProgressBarSetCurrentValue(SDL_Widget *widget,int value)
{
    SDL_ProgressBar *ProgressBar=(SDL_ProgressBar*)widget;

    if(ProgressBar->State == PROGRESSBAR_DRAG)
        return 0;
    if(ProgressBar->CurrentValue != value )
    {
        ProgressBar->CurrentValue = value;
        if(ProgressBar->Orientation == VERTICAL)
        {
            ProgressBar->CurrentLine  = (value * widget->Rect.h) /
                                        (ProgressBar->MaxValue - ProgressBar->MinValue);
        }
        else
        {
            ProgressBar->CurrentLine  = (value * widget->Rect.w)
                                        / (ProgressBar->MaxValue - ProgressBar->MinValue);
        }

        SDL_WidgetRedrawEvent(widget);
    }
    return 0;
}
/* return 0 if no windows are available */
int SDL_WindowManagerEvent(SDL_Event *event)
{
    SDL_WidgetList* WidgetList;
    SDL_Widget* focus_widget=NULL;
    SDL_Window *window;

    SDL_WindowManagerWindowEvent(event);
    window = SDL_WindowGetTopVisibleWindow();

    if(SDL_WindowAvailable() == 0)
        return 0;

    if(window && event->type >= SDL_MOUSEMOTION)
    {
        event->motion.xrel = event->motion.x;
        event->motion.yrel = event->motion.y;
        event->motion.x -= window->Widget.Rect.x;
        event->motion.y -= window->Widget.Rect.y;
    }

    focus_widget = SDL_WindowGetFocusWidget();

    if(event->type == SDL_MOUSEBUTTONDOWN &&
       focus_widget != NULL &&
       SDL_WidgetIsInside(focus_widget,event->motion.x,event->motion.y))
    {
        SDL_WidgetEvent(focus_widget,event);
        return 1;
    }
    if(event->type == SDL_MOUSEBUTTONDOWN)
    {
        SDL_WidgetList*  focus_widget = SDL_WindowGetWidgetList();
        while(focus_widget)
        {
            SDL_Widget *w=(SDL_Widget*)focus_widget->Widget;
            
            if(SDL_WidgetIsInside(w,event->motion.x,event->motion.y))
            {
                if(focus_widget->Widget->flags & WIDGET_FOCUSABLE)
                {
                    SDL_WindowSetFocusWidget(focus_widget->Widget);
                    SDL_WidgetRedrawEvent(focus_widget->Widget);
                }
                /*  Bug found when there are overlapping widgets the focus is set to the wrong widget */
            }
            focus_widget=focus_widget->Next;
        }
    }

    WidgetList = SDL_WindowGetWidgetList();
    while(WidgetList)
    {
	/* ATTEN: here should be the old value of the WidgetList, if the win->WidgetList value changed in the following 
	 * SDL_WidgetEvent() function, then this pointer here could not update immediately.
	 */
        SDL_Widget *Widget=(SDL_Widget*)WidgetList->Widget;

        /* tangg added */
        if(Widget && (Widget->flags & WIDGET_VISIBLE))
        {
            SDL_WidgetEvent(Widget,event);
        }
        WidgetList=WidgetList->Next;
    }

    /* If the widgets don't handle the event pass
       the event to the event handler of the window */
    {
        SDL_Window *Win;

        Win=SDL_WindowGetTopVisibleWindow();
        
        if(Win && Win->EventHandler)
        {

            Win->EventHandler(*event);
        }
    }
    return 1;
}
int SDL_WindowManagerWindowEvent(SDL_Event *event)
{
    SDL_WindowListElem *CurrentWindow  = (SDL_WindowListElem*)WindowList.last;
    SDL_WindowListElem *PreviousWindow = NULL;
    SDL_WindowListElem *StoredPreviousWindow = NULL;
    SDL_WindowListElem *StoredWindow         = NULL;

    switch(event->type)
    {
    case SDL_KEYDOWN:
        switch( event->key.keysym.sym ) 
        {
        case SDLK_TAB:
        {
            SDL_Widget     *FocusWidget;
            SDL_WidgetList *WidgetList;
            SDL_Widget     *FirstFocusWidget=NULL;
            int store=0;

            WidgetList  = SDL_WindowGetWidgetList();
            FocusWidget = SDL_WindowGetFocusWidget();
            
            while(WidgetList)
            {
                if(FocusWidget == NULL)
                {
                    if(WidgetList->Widget->flags & WIDGET_FOCUSABLE)
                    {
                        SDL_WindowSetFocusWidget(WidgetList->Widget);
                        break;
                    }
                }
                else
                {
                    if((WidgetList->Widget->flags & WIDGET_FOCUSABLE) && FirstFocusWidget == NULL)
                        FirstFocusWidget=WidgetList->Widget;

                    if(store && (WidgetList->Widget->flags & WIDGET_FOCUSABLE))
                    {
                        SDL_WindowSetFocusWidget(WidgetList->Widget);
                        break;
                    }
                    if(WidgetList->Widget == FocusWidget)
                        store=1;

                }
                WidgetList = WidgetList->Next;
            
            }
            if(WidgetList == NULL)
            {
                if(FirstFocusWidget)
                    SDL_WindowSetFocusWidget(FirstFocusWidget);
            }
            SDL_WidgetRedrawEvent(FocusWidget);
            
        }
        break;

        default:
            break;
        }
        break;
        
    }

    if(event->type == SDL_MOUSEBUTTONDOWN && CurrentWindow)
    {
        while(CurrentWindow->ll.next)
        {
            if(SDL_WidgetIsInside(&CurrentWindow->Window->Widget,event->motion.x,event->motion.y))
            {
                /* Remember the top most visible window which is clicked on */
                StoredWindow         = CurrentWindow;                
              	StoredPreviousWindow = PreviousWindow;
            }
            PreviousWindow = CurrentWindow;
            CurrentWindow  = (SDL_WindowListElem*)CurrentWindow->ll.next;
        }

        if(StoredWindow)
        {
            /* If there is a window click, make sure it becomes the top visible window */
            CurrentWindow->ll.next = &StoredWindow->ll;
            if(StoredPreviousWindow == NULL)
                WindowList.first = StoredWindow->ll.next;
            else
                StoredPreviousWindow->ll.next = StoredWindow->ll.next;
            StoredWindow->ll.next = NULL;
            return 1;
        }
   
    }
    return 0;
}
Esempio n. 15
0
static void SDL_PanelImageFrameUpdate(SDL_Object *object,void *signaldata,void *userdata)
{
	SDL_WidgetRedrawEvent(userdata);
}
Esempio n. 16
0
static void SDL_ScrollbarSignalMouseMotion(SDL_Object *object,void *signaldata,void *userdata)
{
    SDL_Scrollbar *Scrollbar=(SDL_Scrollbar*)object;    
    SDL_Widget *widget=(SDL_Widget*)object;
    SDL_Event *Event=(SDL_Event*)signaldata;


    if(Scrollbar->State == SCROLLBAR_DRAG)
    {
        if(Scrollbar->Orientation == VERTICAL)
        {
            int height;
            height = widget->Rect.h * Scrollbar->NormalStepValue / Scrollbar->MaxValue;   /* Height is the button height */
            if(height < 6)
                height = 6;

            Scrollbar->PixelValue   = Event->motion.y - widget->Rect.y - Scrollbar->offset;

            if(Scrollbar->PixelValue >  widget->Rect.h - height)
                Scrollbar->PixelValue = widget->Rect.h - height;
            if(Scrollbar->PixelValue < 0)
                Scrollbar->PixelValue = 0;


            Scrollbar->CurrentValue = ((Scrollbar->MaxValue - Scrollbar->MinValue)* Scrollbar->PixelValue) 
                / (widget->Rect.h - height);

            if(Scrollbar->CurrentValue < 0)
                Scrollbar->CurrentValue = 0;            
            
            SDL_SignalEmit(widget,"value-changed",widget);
            SDL_WidgetRedrawEvent(widget);
        }
        else
        {
            int width;
            width = widget->Rect.w  *Scrollbar->NormalStepValue / Scrollbar->MaxValue;   /* Height is the button height */

            if(width < 6)
                width = 6;
            
            Scrollbar->PixelValue   = Event->motion.x - widget->Rect.x - Scrollbar->offset;

            if(Scrollbar->PixelValue >  widget->Rect.w - width)
                Scrollbar->PixelValue = widget->Rect.w - width;
            
            if(Scrollbar->PixelValue < 0)
                Scrollbar->PixelValue = 0;
            
            Scrollbar->CurrentValue = ((Scrollbar->MaxValue - Scrollbar->MinValue) * Scrollbar->PixelValue) 
                / (widget->Rect.w - width);
            
            if(Scrollbar->CurrentValue < 0)
                Scrollbar->CurrentValue = 0;
            SDL_SignalEmit(widget,"value-changed",widget);
            SDL_WidgetRedrawEvent(widget);

        }
    }

}