Bonsoir !

J'ai une classe mere, nommée widget:
Ce qui m'interesse ce soir, est en gras!

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Widget
{
    public:
        // var set
        void SetDest(SDL_Surface* dst);
        void SetCallback(funcptr fptr);
        // clip call
        string ClipState();
        void MouseOver();
        void MouseOut();
        void MouseClick();
        // focus |callback
        bool CallBack();
        bool hasFocus() { return _focused; }
        virtual void GetFocus() {}
        virtual void DelFocus() {}
        bool Focusable() { return _focusable; }
        // gfx
        void Draw();
        // return widgets rect
        SDL_Rect* rect() { return _sandp; }

        virtual ~Widget();

    protected:
        Widget();
        SDL_Surface* _sprite;
        SDL_Surface* _dest;
        SDL_Rect* _sandp;
        string clipkey;
        Clips* clips;
        funcptr _callback;
        bool _focused;
        bool _focusable;
    private:
};
Maintenant j'ai deux classes, wfbutton & wftextbox qui heritent publiquement de widget, quand une des deux est initialiséé, voici ce qu'il se passe !

Pour le bouton:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
__WFButton::__WFButton(SDL_Rect* sandp, SDL_Surface* sprite)
{
    _sprite = sprite;
    _sandp = sandp;
    clipkey = "normal";

    map<std::string, SDL_Rect*> clipper;
    clipper["normal"] = CreateRect(0, 0, sandp->w, sandp->h);
    clipper["hover"] = CreateRect(0, sandp->h+1, sandp->w, sandp->h);
    clipper["click"] = CreateRect(0, sandp->h*2+1, sandp->w, sandp->h);
    clips = new Clips(clipper);

    _focused = false;
    _focusable = false;
}
pour le textbox

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
__WFTextBox::__WFTextBox(SDL_Rect* sandp, SDL_Surface* sprite)
{
    //Widget(sandp, sprite, true);

    _sprite = sprite;
    _sandp = sandp;
    clipkey = "normal";

    map<std::string, SDL_Rect*> clipper;
    clipper["normal"] = CreateRect(0, 0, sandp->w, sandp->h);
    clipper["hover"] = CreateRect(0, sandp->h+1, sandp->w, sandp->h);
    clipper["click"] = CreateRect(0, sandp->h*2+1, sandp->w, sandp->h);
    clips = new Clips(clipper);

    _focused = false;
    _focusable = true;
}
Maintenant, dans mon main, je check la position de la souris, si elle passe au dessus d'un widget
La boucle se fait de cette facon:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
            map<string, Widget*>::iterator itr2;
Et je fais un changement de titre banal, pour voir un peu les valeurs de mes variables
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
                        _widget = itr2->second;
                        sprintf(t, "x=%i ; y=%i ; layer = %i ; widget = %s (focused=%s ; focusable=%s)", x, y, itr->second->id(), "yes", ((_widget->hasFocus()) ? "yes" : "no"), ((_widget->Focusable()) ? "yes" : "no"));
                        SDL_WM_SetCaption(t, NULL);
Le titre affichera TOUJOURS quelque chose du genre:
x=... ; y=... ; layer=3 ; widget = yes (focused=no ; focusable=no)

En gros, quand j'initialise mes widget wfbutton & wftextbox, la variable declarée dans Widget , _focusable, est toujours egale a false.

Comment ca se fait ? Je comprend pas !

merci d'avance :o