Project

General

Profile

Image is growing with every update

Added by Markus Wolters over 11 years ago

Hi,

I've created a class messagebox derived from WContainerWidget, holding two WContainerWidget (notify and contentdata) itself. From my application a timer is calling

void messagebox::blink(tBlinkState state) {
    if(bIsNotificationActive == false)
        return;
    if(state == On) {
        notify->setHidden(false);
    } else {
        notify->setHidden(true);
    }
}

every second. In a second class derived from messagebox I add an image at session start.

WContainerWidget *cwToday = new WContainerWidget();
    Wt::WGridLayout *layout = new Wt::WGridLayout();
    layout->addWidget(new WImage("css/images/weather/" + (*wdays.begin())->cond_image), 0, 0, 1, 2, AlignCenter);
    layout->addWidget(new Wt::WText("Item 1 0"), 1, 0);
    layout->addWidget(new Wt::WText("Item 1 1"), 1, 1);
    cwToday->setLayout(layout);
    contentdata->addWidget(cwToday);

My problem is, that every time the blink function is called, the cond_image is growing, even if no update should happen because bIsNotificationActive is set to false. Does this behavior make any sense to you?

Thanks in advance

Markus


Replies (1)

RE: Image is growing with every update - Added by Koen Deforche over 11 years ago

Hey,

The reason is the layout. From WGridLayout reference documentation:

If you want to use the layout manager for a container which does not have a height that is constrained somehow, you need to specify AlignTop in the alignment flags of WContainerWidget::setLayout(). Otherwise the behavior is undefined (the parent container will continue to increase in size as it tries to satisfy the constraints assuming a contrained height).

In your case, you'll thus need:

cwToday->setLayout(layout, AlignTop | AlignJustify);

Regards,

koen

    (1-1/1)