From c5a1d303850e1e5941616b79b91f1e33cfc33ba6 Mon Sep 17 00:00:00 2001 From: Cary Sandvig Date: Tue, 27 Feb 2001 00:40:48 +0000 Subject: [PATCH] fix get/set width/heigh interface --- panda/src/gui/guiLabel.I | 10 ++++-- panda/src/gui/guiLabel.cxx | 62 ++++++++++++++++++++++++++++++-------- 2 files changed, 58 insertions(+), 14 deletions(-) diff --git a/panda/src/gui/guiLabel.I b/panda/src/gui/guiLabel.I index 5c81732ee4..8fd865febb 100644 --- a/panda/src/gui/guiLabel.I +++ b/panda/src/gui/guiLabel.I @@ -36,7 +36,10 @@ INLINE void GuiLabel::set_width(float f) { _width = 0.; } else { _have_width = true; - _width = f; + if (_type == MODEL) + _width = f / _model_width; + else + _width = f; } this->set_properties(); } @@ -47,7 +50,10 @@ INLINE void GuiLabel::set_height(float f) { _height = 0.; } else { _have_height = true; - _height = f; + if (_type == MODEL) + _height = f / _model_height; + else + _height = f; } this->set_properties(); } diff --git a/panda/src/gui/guiLabel.cxx b/panda/src/gui/guiLabel.cxx index fd5e3b0fbd..ec2a657f0e 100644 --- a/panda/src/gui/guiLabel.cxx +++ b/panda/src/gui/guiLabel.cxx @@ -363,24 +363,62 @@ void GuiLabel::get_extents(float& l, float& r, float& b, float& t) { float GuiLabel::get_width(void) { float w; - TextNode* n = DCAST(TextNode, _geom); - if (n->has_card()) { - LVecBase4f v = n->get_card_actual(); - w = v[1] - v[0]; - } else { - w = n->get_width(); + switch (_type) { + case SIMPLE_TEXT: + { + TextNode* n = DCAST(TextNode, _geom); + if (n->has_card()) { + LVecBase4f v = n->get_card_actual(); + w = v[1] - v[0]; + } else + w = n->get_width(); + } + break; + case SIMPLE_TEXTURE: + gui_cat->warning() << "tried to get width from a texture label" << endl; + w = 1.; + break; + case SIMPLE_CARD: + w = _have_width?_width:1.; + break; + case MODEL: + w = _have_width?(_width*_model_width):_model_width; + break; + default: + gui_cat->warning() + << "trying to get width from something I don't know how to" << endl; + w = 1.; } return w; } float GuiLabel::get_height(void) { float h; - TextNode* n = DCAST(TextNode, _geom); - if (n->has_card()) { - LVecBase4f v = n->get_card_actual(); - h = v[3] - v[2]; - } else { - h = n->get_width(); + switch (_type) { + case SIMPLE_TEXT: + { + TextNode* n = DCAST(TextNode, _geom); + if (n->has_card()) { + LVecBase4f v = n->get_card_actual(); + h = v[3] - v[2]; + } else + h = n->get_width(); + } + break; + case SIMPLE_TEXTURE: + gui_cat->warning() << "tried to get height from a texture label" << endl; + h = 1.; + break; + case SIMPLE_CARD: + h = _have_height?_height:1.; + break; + case MODEL: + h = _have_height?(_height*_model_height):_model_height; + break; + default: + gui_cat->warning() + << "trying to get height from something I don't know how to" << endl; + h = 1.; } return h; }