Selaa lähdekoodia

Provide sizing information for paintables (#8313)

tags/7.0.0.alpha2
Leif Åstrand 12 vuotta sitten
vanhempi
commit
cfe6e9b760

+ 54
- 0
src/com/vaadin/terminal/gwt/client/VPaintableWidget.java Näytä tiedosto

@@ -31,4 +31,58 @@ public interface VPaintableWidget extends VPaintable {
public VPaintableWidgetContainer getParent();

public MeasuredSize getMeasuredSize();

/**
* Returns <code>true</code> if the width of this paintable is currently
* undefined. If the width is undefined, the actual width of the paintable
* is defined by its contents.
*
* @return <code>true</code> if the width is undefined, else
* <code>false</code>
*/
public boolean isUndefinedWidth();

/**
* Returns <code>true</code> if the height of this paintable is currently
* undefined. If the height is undefined, the actual height of the paintable
* is defined by its contents.
*
* @return <code>true</code> if the height is undefined, else
* <code>false</code>
*/
public boolean isUndefinedHeight();

/**
* Returns <code>true</code> if the width of this paintable is currently
* relative. If the width is relative, the actual width of the paintable is
* a percentage of the size allocated to it by its parent.
*
* @return <code>true</code> if the width is undefined, else
* <code>false</code>
*/
public boolean isRelativeWidth();

/**
* Returns <code>true</code> if the height of this paintable is currently
* relative. If the height is relative, the actual height of the paintable
* is a percentage of the size allocated to it by its parent.
*
* @return <code>true</code> if the width is undefined, else
* <code>false</code>
*/
public boolean isRelativeHeight();

/**
* Gets the width of this paintable as defined on the server.
*
* @return the server side width definition
*/
public String getDefinedWidth();

/**
* Gets the height of this paintable as defined on the server.
*
* @return the server side height definition
*/
public String getDefinedHeight();
}

+ 55
- 2
src/com/vaadin/terminal/gwt/client/ui/VAbstractPaintableWidget.java Näytä tiedosto

@@ -8,6 +8,7 @@ import com.google.gwt.user.client.ui.FocusWidget;
import com.google.gwt.user.client.ui.Focusable;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.MeasureManager;
import com.vaadin.terminal.gwt.client.MeasureManager.MeasuredSize;
import com.vaadin.terminal.gwt.client.TooltipInfo;
import com.vaadin.terminal.gwt.client.UIDL;
@@ -24,12 +25,15 @@ public abstract class VAbstractPaintableWidget implements VPaintableWidget {
private ApplicationConnection connection;
private String id;

private final MeasuredSize measuredSize = new MeasuredSize();
private final MeasuredSize measuredSize = new MeasuredSize(this);

/* State variables */
private boolean enabled = true;
private boolean visible = true;

private String definedWidth = "";
private String definedHeight = "";

/**
* Default constructor
*/
@@ -183,7 +187,56 @@ public abstract class VAbstractPaintableWidget implements VPaintableWidget {
* taken into account
*/

getConnection().updateComponentSize(this, uidl);
updateComponentSize(uidl);
}

private void updateComponentSize(UIDL uidl) {
String w = uidl.hasAttribute("width") ? uidl
.getStringAttribute("width") : "";

String h = uidl.hasAttribute("height") ? uidl
.getStringAttribute("height") : "";

// Dirty if either dimension changed between relative and non-relative
MeasureManager.MeasuredSize measuredSize = getMeasuredSize();
if (!measuredSize.isDirty()
&& (w.endsWith("%") != definedWidth.endsWith("%") || h
.endsWith("%") != definedHeight.endsWith("%"))) {
measuredSize.setDirty(true);
}

definedWidth = w;
definedHeight = h;

// Set defined sizes
Widget component = getWidgetForPaintable();

component.setHeight(h);
component.setWidth(w);
}

public boolean isRelativeHeight() {
return definedHeight.endsWith("%");
}

public boolean isRelativeWidth() {
return definedWidth.endsWith("%");
}

public boolean isUndefinedHeight() {
return definedHeight.length() == 0;
}

public boolean isUndefinedWidth() {
return definedWidth.length() == 0;
}

public String getDefinedHeight() {
return definedHeight;
}

public String getDefinedWidth() {
return definedWidth;
}

/**

Loading…
Peruuta
Tallenna