]> git.tdb.fi Git - libs/gltk.git/commitdiff
Fix Alignment to not fail when geom is larger han parent
authorMikko Rasa <tdb@tdb.fi>
Sun, 8 Jun 2008 14:55:50 +0000 (14:55 +0000)
committerMikko Rasa <tdb@tdb.fi>
Sun, 8 Jun 2008 14:55:50 +0000 (14:55 +0000)
Use font color for List items

source/geometry.cpp
source/list.cpp

index 8202774d62913cf894c147aec7d7e287b3828bdc..584a1aac55d934185e7bc68e793329a11d935a68 100644 (file)
@@ -42,12 +42,15 @@ Sides::Loader::Loader(Sides &s):
 void Alignment::apply(Geometry &geom, const Geometry &parent) const
 {
        if(parent.w>geom.w)
+       {
                geom.w+=static_cast<unsigned>((parent.w-geom.w)*w);
+               geom.x+=static_cast<int>((parent.w-geom.w)*x);
+       }
        if(parent.h>geom.h)
+       {
                geom.h+=static_cast<unsigned>((parent.h-geom.h)*h);
-
-       geom.x+=static_cast<int>((parent.w-geom.w)*x);
-       geom.y+=static_cast<int>((parent.h-geom.h)*y);
+               geom.y+=static_cast<int>((parent.h-geom.h)*y);
+       }
 }
 
 void Alignment::apply(Geometry &geom, const Geometry &parent, const Sides &margin) const
@@ -55,13 +58,19 @@ void Alignment::apply(Geometry &geom, const Geometry &parent, const Sides &margi
        unsigned pw=parent.w-margin.left-margin.right;
        unsigned ph=parent.h-margin.bottom-margin.top;
 
+       geom.x+=margin.left;
+       geom.y+=margin.bottom;
+
        if(parent.w>geom.w)
+       {
                geom.w+=static_cast<unsigned>((pw-geom.w)*w);
+               geom.x+=static_cast<int>((pw-geom.w)*x);
+       }
        if(parent.h>geom.h)
+       {
                geom.h+=static_cast<unsigned>((ph-geom.h)*h);
-
-       geom.x+=static_cast<int>(margin.left+(pw-geom.w)*x);
-       geom.y+=static_cast<int>(margin.bottom+(ph-geom.h)*y);
+               geom.y+=static_cast<int>((ph-geom.h)*y);
+       }
 }
 
 } // namespace GLtk
index 8c0d789188ab917221336d98f09efbc66bb561fe..04adb399cc2adf237b3384384ac807ea5b6b5ff3 100644 (file)
@@ -5,6 +5,7 @@ Copyright © 2007  Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
 
+#include <msp/gl/immediate.h>
 #include <msp/gl/matrix.h>
 #include <msp/gl/transform.h>
 #include "graphic.h"
@@ -147,6 +148,7 @@ void List::render_special(const Part &part) const
        {
                const GL::Font *const font=style->get_font();
                const float font_size=font->get_default_size();
+               const GL::Color &color=style->get_font_color();
                const unsigned row_height=static_cast<unsigned>(font_size);
                const Sides &margin=part.get_margin();
 
@@ -159,13 +161,16 @@ void List::render_special(const Part &part) const
                        Geometry rgeom;
                        rgeom.w=static_cast<unsigned>(font->get_string_width(items[first+i])*font_size);
                        rgeom.h=static_cast<unsigned>((font->get_ascent()-font->get_descent())*font_size);
+                       rgeom.x=margin.left;
                        rgeom.y=geom.h-margin.top-(i+1)*row_height-static_cast<int>(font->get_descent()*font_size);
                        part.get_alignment().apply(rgeom, pgeom);
 
                        GL::push_matrix();
                        GL::translate(rgeom.x, rgeom.y, 0);
                        GL::scale_uniform(font_size);
-                       font->draw_string(items[first+i]);
+                       GL::Immediate imm((GL::COLOR4_UBYTE, GL::TEXCOORD2, GL::VERTEX2));
+                       imm.color(color.r, color.g, color.b);
+                       font->draw_string(items[first+i], imm);
                        GL::pop_matrix();
                }
        }