From 43e77bd5aa56e5bf0cfd84c1cd8da35c3b85891d Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Mon, 16 Feb 2009 06:29:21 +0000 Subject: [PATCH] Fix for #2563 - OrderedLayout flicker on repaint Changed Label so it never wraps when its width is undefined. Changed default Label width to 100%. svn changeset:6841/svn branch:trunk --- .../toolkit/terminal/gwt/client/ui/ILabel.java | 14 +++++++++++++- .../terminal/gwt/client/ui/IOrderedLayout.java | 13 +++++++------ .../ui/layout/ChildComponentContainer.java | 17 ++++++++++------- src/com/itmill/toolkit/ui/Label.java | 14 ++++++++------ 4 files changed, 38 insertions(+), 20 deletions(-) diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/ILabel.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/ILabel.java index f3bec455f0..1ca24b330e 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/ILabel.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/ILabel.java @@ -20,6 +20,8 @@ import com.itmill.toolkit.terminal.gwt.client.Util; public class ILabel extends HTML implements Paintable { public static final String CLASSNAME = "i-label"; + private static final String CLASSNAME_UNDEFINED_WIDTH = "i-label-undef-w"; + private ApplicationConnection client; private int verticalPaddingBorder = 0; private int horizontalPaddingBorder = 0; @@ -72,7 +74,12 @@ public class ILabel extends HTML implements Paintable { } else if ("uidl".equals(mode)) { setHTML(uidl.getChildrenAsXML()); } else if ("xhtml".equals(mode)) { - setHTML(uidl.getChildUIDL(0).getChildUIDL(0).getChildString(0)); + UIDL content = uidl.getChildUIDL(0).getChildUIDL(0); + if (content.getChildCount() > 0) { + setHTML(content.getChildString(0)); + } else { + setHTML(""); + } sinkOnloads = true; } else if ("xml".equals(mode)) { setHTML(uidl.getChildUIDL(0).getChildString(0)); @@ -107,5 +114,10 @@ public class ILabel extends HTML implements Paintable { public void setWidth(String width) { horizontalPaddingBorder = Util.setWidthExcludingPaddingAndBorder(this, width, horizontalPaddingBorder); + if (width == null || width.equals("")) { + setStyleName(getElement(), CLASSNAME_UNDEFINED_WIDTH, true); + } else { + setStyleName(getElement(), CLASSNAME_UNDEFINED_WIDTH, false); + } } } diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IOrderedLayout.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IOrderedLayout.java index ffa30f724b..aa961ee8a6 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IOrderedLayout.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IOrderedLayout.java @@ -737,12 +737,13 @@ public class IOrderedLayout extends CellBasedLayout { for (Paintable p : children) { /* Update widget size from DOM */ ChildComponentContainer componentContainer = getComponentContainer((Widget) p); - if (isDynamicWidth()) { - componentContainer.setUnlimitedContainerWidth(); - } else { - componentContainer.setLimitedContainerWidth(activeLayoutSize - .getWidth()); - } + // This should no longer be needed (after #2563) + // if (isDynamicWidth()) { + // componentContainer.setUnlimitedContainerWidth(); + // } else { + // componentContainer.setLimitedContainerWidth(activeLayoutSize + // .getWidth()); + // } componentContainer.updateWidgetSize(); diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/layout/ChildComponentContainer.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/layout/ChildComponentContainer.java index fe8ba6497e..87e02f56af 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/layout/ChildComponentContainer.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/layout/ChildComponentContainer.java @@ -72,7 +72,7 @@ public class ChildComponentContainer extends Panel { setElement(containerDIV); containerDIV.getStyle().setProperty("height", "0"); - // DOM.setStyleAttribute(containerDIV, "width", "0px"); + containerDIV.getStyle().setProperty("width", "0px"); containerDIV.getStyle().setProperty("overflow", "hidden"); widgetDIV = Document.get().createDivElement(); @@ -171,12 +171,15 @@ public class ChildComponentContainer extends Panel { * For fixed width layouts we specify the width directly so that height * is automatically calculated correctly (e.g. for Labels). */ - if (fixedWidth > 0) { - setLimitedContainerWidth(fixedWidth); - } else { - setUnlimitedContainerWidth(); - } - + /* + * This should no longer be needed (after #2563) as all components are + * such that they can be rendered inside a 0x0 DIV. + */ + // if (fixedWidth > 0) { + // setLimitedContainerWidth(fixedWidth); + // } else { + // setUnlimitedContainerWidth(); + // } ((Paintable) widget).updateFromUIDL(childUIDL, client); } diff --git a/src/com/itmill/toolkit/ui/Label.java b/src/com/itmill/toolkit/ui/Label.java index b11f9f5a2e..1a9e497e9c 100644 --- a/src/com/itmill/toolkit/ui/Label.java +++ b/src/com/itmill/toolkit/ui/Label.java @@ -101,7 +101,7 @@ public class Label extends AbstractComponent implements Property, * Creates an empty Label. */ public Label() { - setPropertyDataSource(new ObjectProperty("", String.class)); + this(""); } /** @@ -110,7 +110,7 @@ public class Label extends AbstractComponent implements Property, * @param content */ public Label(String content) { - setPropertyDataSource(new ObjectProperty(content, String.class)); + this(content, CONTENT_DEFAULT); } /** @@ -120,7 +120,7 @@ public class Label extends AbstractComponent implements Property, * @param contentSource */ public Label(Property contentSource) { - setPropertyDataSource(contentSource); + this(contentSource, CONTENT_DEFAULT); } /** @@ -130,8 +130,7 @@ public class Label extends AbstractComponent implements Property, * @param contentMode */ public Label(String content, int contentMode) { - setPropertyDataSource(new ObjectProperty(content, String.class)); - setContentMode(contentMode); + this(new ObjectProperty(content, String.class), contentMode); } /** @@ -143,7 +142,10 @@ public class Label extends AbstractComponent implements Property, */ public Label(Property contentSource, int contentMode) { setPropertyDataSource(contentSource); - setContentMode(contentMode); + if (contentMode != CONTENT_DEFAULT) { + setContentMode(contentMode); + } + setWidth(100, UNITS_PERCENTAGE); } /** -- 2.39.5