]> git.mxchange.org Git - flightgear.git/blobdiff - src/GUI/layout.cxx
Fix GUI and HUD text rendering problems.
[flightgear.git] / src / GUI / layout.cxx
index 6783187db5580368a4e72f28e68d772bb99baf73..12d13df7d476046695a9e6d8ce1dbd9fdcc8db30 100644 (file)
@@ -39,6 +39,9 @@ void LayoutWidget::calcPrefSize(int* w, int* h)
 {
     *w = *h = 0; // Ask for nothing by default
 
+    if (getBool("hide") || isType("nasal"))
+        return;
+
     int legw = stringLength(getStr("legend"));
     int labw = stringLength(getStr("label"));
 
@@ -94,6 +97,9 @@ void LayoutWidget::calcPrefSize(int* w, int* h)
 // Set up geometry such that the widget lives "inside" the specified 
 void LayoutWidget::layout(int x, int y, int w, int h)
 {
+    if (getBool("hide") || isType("nasal"))
+        return;
+
     setNum("__bx", x);
     setNum("__by", y);
     setNum("__bw", w);
@@ -147,7 +153,10 @@ void LayoutWidget::layout(int x, int y, int w, int h)
     // the x/y/w/h box we have calculated.
     if (isType("text")) {
         // puText labels are layed out to the right of the box, so
-        // zero the width.
+        // zero the width. Also subtract PUSTR_RGAP from the x
+        // coordinate to compensate for the added gap between the
+        // label and its empty puObject.
+        x -= 5;
         w = 0;
     } else if (isType("input") || isType("combo") || isType("select")) {
         // Fix the height to a constant
@@ -176,10 +185,7 @@ void LayoutWidget::layout(int x, int y, int w, int h)
         if     (eq(layout, "hbox" )) doHVBox(true, false);
         else if(eq(layout, "vbox" )) doHVBox(true, true);
         else if(eq(layout, "table")) doTable(true);
-    } else if(isType("hrule"))
-        doHVBox(true, false);
-    else if(isType("vrule"))
-        doHVBox(true, true);
+    }
 }
 
 // Convention: the "A" cooridinate refers to the major axis of the
@@ -192,6 +198,9 @@ void LayoutWidget::doHVBox(bool doLayout, bool vertical, int* w, int* h)
     int nEq = 0, eqA = 0, eqB = 0, eqTotalA = 0;
     for(i=0; i<nc; i++) {
         LayoutWidget child = getChild(i);
+        if (child.getBool("hide"))
+            continue;
+
         int a, b;
         child.calcPrefSize(vertical ? &b : &a, vertical ? &a : &b);
         if(doLayout) prefA[i] = a;
@@ -227,6 +236,9 @@ void LayoutWidget::doHVBox(bool doLayout, bool vertical, int* w, int* h)
         // from top to bottom instead of along the cartesian Y axis.
         int idx = vertical ? (nc-i-1) : i;
         LayoutWidget child = getChild(idx);
+        if (child.getBool("hide"))
+            continue;
+
         if(child.getBool("equal")) {
             int pad = child.padding();
             prefA[idx] = eqA + 2*pad;
@@ -303,7 +315,7 @@ void LayoutWidget::doTable(bool doLayout, int* w, int* h)
             int total = 0;
             for(j=0; j<cell->rspan; j++)
                 total += rowSizes[cell->row + j];
-            int extra = total - cell->h;
+            int extra = cell->h - total;
             if(extra > 0) {
                 for(j=0; j<cell->rspan; j++) {
                     int chunk = extra / (cell->rspan - j);
@@ -316,7 +328,7 @@ void LayoutWidget::doTable(bool doLayout, int* w, int* h)
             int total = 0;
             for(j=0; j<cell->cspan; j++)
                 total += colSizes[cell->col + j];
-            int extra = total - cell->w;
+            int extra = cell->w - total;
             if(extra > 0) {
                 for(j=0; j<cell->cspan; j++) {
                     int chunk = extra / (cell->cspan - j);