/*******************************************************************************
 * Copyright (c) 2005 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.swt.custom;

import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.*;

class CLayoutData {

	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;
}
}
