]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.eclipse.swt.win32.win32.x86_64/src/org/eclipse/swt/layout/FillData.java
Work around SWT 4.13 - 4.18 Win32 DnD bug 567422
[simantics/platform.git] / bundles / org.eclipse.swt.win32.win32.x86_64 / src / org / eclipse / swt / layout / FillData.java
diff --git a/bundles/org.eclipse.swt.win32.win32.x86_64/src/org/eclipse/swt/layout/FillData.java b/bundles/org.eclipse.swt.win32.win32.x86_64/src/org/eclipse/swt/layout/FillData.java
new file mode 100644 (file)
index 0000000..cb1dc26
--- /dev/null
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2005 IBM Corporation and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.layout;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.widgets.*;
+
+class FillData {
+
+       int defaultWidth = -1, defaultHeight = -1;
+       int currentWhint, currentHhint, currentWidth = -1, currentHeight = -1;
+
+Point computeSize (Control control, int wHint, int hHint, boolean flushCache) {
+       if (flushCache) flushCache();
+       if (wHint == SWT.DEFAULT && hHint == SWT.DEFAULT) {
+               if (defaultWidth == -1 || defaultHeight == -1) {
+                       Point size = control.computeSize (wHint, hHint, flushCache);
+                       defaultWidth = size.x;
+                       defaultHeight = size.y;
+               }
+               return new Point(defaultWidth, defaultHeight);
+       }
+       if (currentWidth == -1 || currentHeight == -1 || wHint != currentWhint || hHint != currentHhint) {
+               Point size = control.computeSize (wHint, hHint, flushCache);
+               currentWhint = wHint;
+               currentHhint = hHint;
+               currentWidth = size.x;
+               currentHeight = size.y;
+       }
+       return new Point(currentWidth, currentHeight);
+}
+void flushCache () {
+       defaultWidth = defaultHeight = -1;
+       currentWidth = currentHeight = -1;
+}
+}