From a9d04a73afcdf40c33d889090d303117b7fd3a7d Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Sun, 8 Jun 2008 14:55:50 +0000 Subject: [PATCH] Fix Alignment to not fail when geom is larger han parent Use font color for List items --- source/geometry.cpp | 21 +++++++++++++++------ source/list.cpp | 7 ++++++- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/source/geometry.cpp b/source/geometry.cpp index 8202774..584a1aa 100644 --- a/source/geometry.cpp +++ b/source/geometry.cpp @@ -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((parent.w-geom.w)*w); + geom.x+=static_cast((parent.w-geom.w)*x); + } if(parent.h>geom.h) + { geom.h+=static_cast((parent.h-geom.h)*h); - - geom.x+=static_cast((parent.w-geom.w)*x); - geom.y+=static_cast((parent.h-geom.h)*y); + geom.y+=static_cast((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((pw-geom.w)*w); + geom.x+=static_cast((pw-geom.w)*x); + } if(parent.h>geom.h) + { geom.h+=static_cast((ph-geom.h)*h); - - geom.x+=static_cast(margin.left+(pw-geom.w)*x); - geom.y+=static_cast(margin.bottom+(ph-geom.h)*y); + geom.y+=static_cast((ph-geom.h)*y); + } } } // namespace GLtk diff --git a/source/list.cpp b/source/list.cpp index 8c0d789..04adb39 100644 --- a/source/list.cpp +++ b/source/list.cpp @@ -5,6 +5,7 @@ Copyright © 2007 Mikko Rasa, Mikkosoft Productions Distributed under the LGPL */ +#include #include #include #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(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(font->get_string_width(items[first+i])*font_size); rgeom.h=static_cast((font->get_ascent()-font->get_descent())*font_size); + rgeom.x=margin.left; rgeom.y=geom.h-margin.top-(i+1)*row_height-static_cast(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(); } } -- 2.43.0