#include "label.h"
#include "part.h"
+#include "style.h"
+
+using namespace std;
namespace Msp {
namespace GLtk {
-Label::Label(const Resources &r, const std::string &t):
- Widget(r)
+Label::Label(const Resources &r, const string &t):
+ Widget(r),
+ text()
{
- set_text(t);
+ focusable=false;
update_style();
+ set_text(t);
+}
+
+void Label::autosize()
+{
+ const list<Part> &parts=style->get_parts();
+ const Part *text_part=0;
+ for(list<Part>::const_iterator i=parts.begin(); (!text_part && i!=parts.end()); ++i)
+ if(i->get_name()=="text")
+ text_part=&*i;
+
+ geom.h=text.get_height();
+ geom.w=text.get_width();
+ if(text_part)
+ {
+ const Sides &margin=text_part->get_margin();
+ geom.w+=margin.left+margin.right;
+ geom.h+=margin.top+margin.bottom;
+ }
}
-void Label::set_text(const std::string &t)
+void Label::set_text(const string &t)
{
text=t;
}
-void Label::render_part(const Part &part) const
+void Label::render_special(const Part &part) const
{
if(part.get_name()=="text")
- render_text(part, text);
- else
- Widget::render_part(part);
+ text.render(part, geom);
+}
+
+void Label::on_style_change()
+{
+ text.set_style(style);
}
Label::Loader::Loader(Label &l):
Widget::Loader(l)
{
- add("text", &Label::text);
+ add("text", &Loader::text);
}
-Label &Label::Loader::get_object()
+void Label::Loader::text(const string &t)
{
- return static_cast<Label &>(wdg);
+ static_cast<Label &>(wdg).text=t;
}
} // namespace GLtk