Comportement etrange avec heritage !
Bonsoir !
J'ai une classe mere, nommée widget:
Ce qui m'interesse ce soir, est en gras!
Code:
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:
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:
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:
map<string, Widget*>::iterator itr2;
Et je fais un changement de titre banal, pour voir un peu les valeurs de mes variables
Code:
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