Browse Source

fix get/set width/heigh interface

Cary Sandvig 25 năm trước cách đây
mục cha
commit
c5a1d30385
2 tập tin đã thay đổi với 58 bổ sung14 xóa
  1. 8 2
      panda/src/gui/guiLabel.I
  2. 50 12
      panda/src/gui/guiLabel.cxx

+ 8 - 2
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();
 }

+ 50 - 12
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;
 }