Return to Snippet

Revision: 48791
at July 9, 2011 01:37 by mcorlan


Initial Code
private function updateNonVirtual(containerWidth:Number, containerHeight:Number):void {
	var layoutTarget:GroupBase = target;
	if (!(layoutTarget as DataGroup).dataProvider || (layoutTarget as DataGroup).dataProvider.length == 0)
		return;
	
	if (!_containerWidth)
		_containerWidth = containerWidth;
	if (!_containerHeight)
		_containerHeight = containerHeight;
	
	var x:Number = 0;
	var y:Number = 0;
	var maxWidth:Number = 0;
	var maxHeight:Number = 0;
	var elementWidth:Number, elementHeight:Number, prevElementHeight:Number;
	
	//add some extra rows after the current view
	y = 0;
	var count:int = layoutTarget.numElements;
	var element:ILayoutElement;
	
	for (var i:int = 0; i < count; i++) {
		// get the current element, we're going to work with the
		// ILayoutElement interface
		element = layoutTarget.getElementAt(i);
		// Resize the element to its preferred size by passing
		// NaN for the width and height constraints
		element.setLayoutBoundsSize(NaN, NaN);
		if (element["data"] && _sectionLabel in element["data"]) {
			elementWidth = containerWidth;
			elementHeight = _sectionHeight;
		} else {
			elementWidth = _columnWidth;
			elementHeight = _tileHeight;
		}				
		element.setLayoutBoundsSize(elementWidth, elementHeight);
		
		// Would the element fit on this line, or should we move
		// to the next line?
		if (x + elementWidth > containerWidth) {
			x = 0;
			//move to the next row
			y += prevElementHeight + _verticalGap;
		}
		// Position the element
		element.setLayoutBoundsPosition(x, y);
		prevElementHeight = elementHeight;
		// Update the current position, add the gap
		x += elementWidth + _horizontalGap;
	}
	// Scrolling support - update the content size
	layoutTarget.setContentSize(containerWidth, y);
}

Initial URL
http://corlan.org/?p=2987

Initial Description


Initial Title
Custom Layout manager updateDisplayList() method - non virtual

Initial Tags


Initial Language
ActionScript 3