From 4d6cb7b107040ec9aedf9b73725675309a1c5729 Mon Sep 17 00:00:00 2001 From: Henri Sara Date: Tue, 26 Sep 2017 10:28:14 +0300 Subject: Relayout GridLayout when font loading completes (#10077) If a GridLayout is used and font loading is not complete, force another layout after all fonts are loaded. Fixes #9921 Fixes #8207 --- .../client/ui/gridlayout/GridLayoutConnector.java | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'client') diff --git a/client/src/main/java/com/vaadin/client/ui/gridlayout/GridLayoutConnector.java b/client/src/main/java/com/vaadin/client/ui/gridlayout/GridLayoutConnector.java index 3113183e3e..6749d14b10 100644 --- a/client/src/main/java/com/vaadin/client/ui/gridlayout/GridLayoutConnector.java +++ b/client/src/main/java/com/vaadin/client/ui/gridlayout/GridLayoutConnector.java @@ -41,6 +41,8 @@ import com.vaadin.ui.GridLayout; public class GridLayoutConnector extends AbstractComponentContainerConnector implements DirectionalManagedLayout { + private static boolean fontLoadingCallbackRegistered = false; + private LayoutClickEventHandler clickEventHandler = new LayoutClickEventHandler( this) { @@ -64,8 +66,26 @@ public class GridLayoutConnector extends AbstractComponentContainerConnector getLayoutManager().registerDependency(this, getWidget().spacingMeasureElement); + + if (!fontLoadingCallbackRegistered) { + fontLoadingCallbackRegistered = true; + registerFontLoadedCallback(); + } } + private static native void registerFontLoadedCallback() + /*-{ + try { + if ($doc.fonts && $doc.fonts.status == 'loading') { + $doc.fonts.ready.then(function () { + $wnd.vaadin.forceLayout(); + }); + } + } catch(err) { + // fonts ready promise not supported by the browser + } + }-*/; + @Override public void onUnregister() { VGridLayout layout = getWidget(); @@ -151,7 +171,6 @@ public class GridLayoutConnector extends AbstractComponentContainerConnector cell.setComponent(componentConnector, getChildComponents()); } - } private void initSize() { -- cgit v1.2.3