Bonsoir !
J'ai une classe mere, nommée widget:
Ce qui m'interesse ce soir, est en gras!
Maintenant j'ai deux classes, wfbutton & wftextbox qui heritent publiquement de widget, quand une des deux est initialiséé, voici ce qu'il se passe !
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: };
Pour le bouton:
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 __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; }
Maintenant, dans mon main, je check la position de la souris, si elle passe au dessus d'un widget
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; }
La boucle se fait de cette facon:
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 map<string, Widget*>::iterator itr2;
Le titre affichera TOUJOURS quelque chose du genre:
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);
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
Partager