Binding MaximumTextWidth

Started by samuelellis, 13 September 2023, 12:44:13

samuelellis

Hello,
How can I bind Labels MaximumTextWidth on widgets width? I'm making custom slider with it's name and value shown above.
Here is what I have for now:
class MyTguiSlider : public Panel
 {
 public:
  typedef std::shared_ptr<MyTguiSlider> Ptr;
  typedef std::shared_ptr<const MyTguiSlider> ConstPtr;

  MyTguiSlider(const sf::String& name, const Layout width = { "100%"});
  ~MyTguiSlider() {};

  static MyTguiSlider::Ptr create(const sf::String& name, const Layout width = { "100%" });

 protected:
 private:
  Label::Ptr m_nameLabel;
  Label::Ptr m_valueLabel;
  Slider::Ptr m_slider;
 };

tgui::MyTguiSlider::MyTguiSlider(const sf::String& name, const Layout width)
 { 
  m_valueLabel = Label::create("100.00");
  m_slider = Slider::create();
  m_nameLabel = Label::create(name); 
  getRenderer()->setBackgroundColor({ 100, 100, 60 });

  m_slider->setSize("95%", 10);
  m_slider->setPosition("&.w/2 - w/2", "nameLabel.bottom + h");
  add(m_slider, "slider"); 
 
  m_valueLabel->setHorizontalAlignment(Label::HorizontalAlignment::Right);
  m_valueLabel->setPosition("slider.right - width", "slider.top - height");
  add(m_valueLabel, "valueLabel"); 

  m_nameLabel->setMaximumTextWidth(m_slider->getSize().x - m_valueLabel->getSize().x - 10);
  m_nameLabel->setPosition("slider.left", 0);
  add(m_nameLabel, "nameLabel");
 

  setSize(width, "slider.bottom + 10");
 }

texus

You will need to manually update the maximum text width when the size changes, i.e. add something like the following at the end of the MyTguiSlider constructor:
Code (cpp) Select
onSizeChange([this]{
    m_nameLabel->setMaximumTextWidth(m_slider->getSize().x - m_valueLabel->getSize().x - 10);
});