uidesigner/com.nokia.sdt.test.componentlibrary/components/testing/render_visual.js
author timkelly
Tue, 22 Jun 2010 14:54:23 -0500
branchC3_BUILDER_WORK
changeset 1522 58667ad9656d
parent 0 fb279309251b
permissions -rw-r--r--
Clean up APIs/Tests around SBSv2 query mechanism (got rid of most all the original test API now that it's been moved into BuildContextSBSv2. Clean up the Build Configuration Filtering prefs and rename hyperlinks from other prefs to note the new name.

/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description: 
*
*/

/*
 * Render test
 *
 * globals available are:
 *
 *		instance (WrappedInstance)
 *		parent (WrappedInstance)
 *		children (WrappedInstance[])
 *		
 * rendering globals:
 *		graphics (wrapped SWT GC)
 *		Colors (object from which getColor(r,g,b) is available)
 *		Fonts (object from which getFont("path") is available)
 *		Images (object from which newImage(device,w,h) is available)
 */

include("library.js")

function Visual() {
}

function detailedDraw(string, x, y) {
	var extent = graphics.stringExtent(string)
	var metrics = graphics.getFontMetrics()
	var orig = graphics.getForeground()
	
	var hy = y + metrics.getHeight() 

	var origbk = graphics.getBackground()
	graphics.setBackground(Colors.getColor(192,192,192))
	graphics.fillRectangle(x, hy-metrics.getAscent(), extent.x, metrics.getAscent()+metrics.getDescent()+metrics.getLeading())
	graphics.setBackground(origbk)
	
		
	java.lang.System.out.println("height="+metrics.getHeight()+
		" descent="+metrics.getDescent()+
		" ascent="+metrics.getAscent())
	graphics.setLineDash(new Array(1,1))
	
	// baseline (green)
	graphics.setForeground(Colors.getColor(0, 255, 0))
	graphics.drawLine(x, hy, x+extent.x, hy)

	// descent (cyan)
	graphics.setForeground(Colors.getColor(0, 255, 255))
	graphics.drawLine(x+1, hy+metrics.getDescent(), x+extent.x, hy+metrics.getDescent())

	// ascent (yellow)
	graphics.setForeground(Colors.getColor(255, 255, 0))
	graphics.drawLine(x, hy-metrics.getAscent(), x+extent.x, hy-metrics.getAscent())

	// height (red)
	graphics.setForeground(Colors.getColor(255, 0, 0))
	graphics.drawLine(x+1, y, x+extent.x, y)

	graphics.setLineDash(null)

	graphics.setForeground(orig)
	graphics.drawString(string, x, y)	
	
	
	return extent.y
}

Visual.prototype.getPattern = function(type) {
	if (this.image3 == null) {
		this.image3 = Images.newImage(graphics.getDevice(), 3, 3)
	}
	if (this.image4 == null) {
		this.image4 = Images.newImage(graphics.getDevice(), 4, 4)
	}
	
	type = Math.floor(type)
	var img;
	if (type != 8.0 && type != 3.0 && type != 5.0)
		img = this.image3
	else
		img = this.image4
		
	var gc = new GC(graphics.getDevice(), img)

	gc.setBackground(Colors.getColor(255, 255, 255))
	gc.fillRectangle(0, 0, 4, 4);
	gc.setBackground(Colors.getColor(255, 255,255))
	gc.setForeground(Colors.getColor(0, 0, 0))
	
	switch (type) {
	case 1: // solid
	default:
		gc.setBackground(Colors.getColor(0, 0, 0))
		gc.fillRectangle(0, 0, 5, 5); 
		break;
	case 3: // vertical hatch
		gc.drawLine(1, 0, 1, 3); 
		gc.drawLine(3, 0, 3, 3); 
		break;
	case 4: // forward diagonal hatch
		gc.drawLine(0, 2, 2, 0); 
		break;
	case 5: // horizontal hatch
		gc.drawLine(0, 1, 3, 1);
		gc.drawLine(0, 3, 3, 3);
		break;
	case 6: // rearward diagonal hatch
		gc.drawLine(0, 0, 2, 2);
		break;
	case 7: // square cross hatch
		gc.drawLine(1, 0, 1, 3);
		gc.drawLine(0, 1, 3, 1);
		break;
	case 8: // diamond cross hatch
		gc.drawLine(0, 0, 3, 3); 
		gc.drawLine(2, 0, 0, 2);
		break;
	}
	
	gc.dispose()
	
	return new Pattern(graphics.getDevice(), img)
}

Visual.prototype.draw = function(instance, laf, graphics) {
	var properties = instance.properties
	var width = properties["size"].width;
	var height = properties.size["height"]

	var base = "data/s60"
	//var base = "c:/downloads"
	var thickness;
	
	var r,p,x,y,size,border;
	
	switch (properties.appearance) {
	case 0:
	default:
		thickness = 1;
		graphics.setLineWidth(thickness)
		graphics.setForeground(getBlue())
		graphics.setBackground(Colors.getColor(255, 255, 255))
		
		graphics.fillGradientRectangle(0, 0, properties.size.width, properties.size.height, true)
		break;
	case 1:
		thickness = 2;
		graphics.setLineWidth(thickness)
	
		r = new Rectangle(width/2, height/2, width/2-4, height/2-4)
		
		graphics.setForeground(Colors.getColor(48, 64, 64))
		graphics.setLineWidth(2)
		graphics.drawRectangle(r)			
		break;
	case 2:
		r = new Rectangle(0, 0, width, height)
		
		graphics.setForeground(Colors.getColor(0, 0, 64))
		graphics.setLineWidth(2)
		graphics.drawRectangle(r)			
		break;
	case 3:
		// ensure Path is available
		p = new Path(graphics.getDevice())
		p.moveTo(width/2, 0)
		p.lineTo(0, height)
		p.lineTo(width, height/2)
		graphics.setClipping(p);
	
		graphics.setForeground(Colors.getColor(128, 128, 0))
		graphics.setBackground(Colors.getColor(128, 128, 0))
		graphics.setAlpha(64)	// note: no effect yet
		graphics.setLineWidth(1)
		
		size = properties.value
		if (size <= 0)
			size = 1
		
		for (y=0; y<height; y+=size)
			for (x=size*(((y/size)&1)^1); x<width; x+=size*2)
				graphics.fillRectangle(x, y, size, size)
				
		graphics.setForeground(Colors.getColor(0, 128, 128))
		graphics.setBackground(Colors.getColor(0, 128, 128))
		graphics.setAlpha(128)	// note: no effect yet
		for (y=0; y<height; y+=size)
			for (x=size*((y/size)&1); x<width; x+=size*2)
				graphics.fillRectangle(x, y, size, size)	
		break;
		
	case 4:
		r = new Rectangle(0, 0, width, height)
		graphics.setLineWidth(1)
		graphics.drawRectangle(r)
		
		r = new Rectangle(4, height/2, width-8, height/2-4)
	
		graphics.drawRectangle(r)
		graphics.setFont(Fonts.getGlobalFont(base+"/fonts/Alp17.14.ttf", 14))
		
		graphics.setForeground(Colors.getColor(0, 0, 0))
		//detailedDraw("Hello", r.x, r.y)
		graphics.drawFormattedString("\"Hello Sedona!\" says a wrapped box.\nFoo,\nbar.",
			r,
			Font.WRAPPING_ENABLED+Font.DRAW_TRANSPARENT+Font.ALIGN_CENTER);	
		break;
		
	case 5:
		graphics.setFont(Fonts.getGlobalFont(base+"/fonts/Alb13.10.ttf", 10))
		h = graphics.getFontMetrics().getHeight()
		r = new Rectangle(4, height/4, width-8, height/4*3-8)
		graphics.drawFormattedString("First", r, 0)
		r.y += h
		graphics.drawFormattedString("Second", r, Font.OPTIONS_STRIKETHROUGH)
		r.y += h
		graphics.drawFormattedString("Third", r, Font.OPTIONS_UNDERLINE)
		break;
		
	case 6:
		r = 32
		str="!xpEdant \u011E \u52a3\u554f\u6C55"
		graphics.setFont(Fonts.getGlobalFont(base+"/fonts/Alb19.15.ttf", 15))
		r += detailedDraw(str, 4, r)
		graphics.setFont(Fonts.getGlobalFont(base+"/fonts/Alp17.14.ttf", 14))
		r += detailedDraw(str, 4, r)
		graphics.setFont(Fonts.getGlobalFont(base+"/fonts/Alpi17.14.ttf", 14))
		r += detailedDraw(str, 4, r)
		graphics.setFont(Fonts.getGlobalFont(base+"/fonts/Albi17b.14.ttf", 14))
		r += detailedDraw(str, 4, r)
		graphics.setFont(Fonts.getGlobalFont(base+"/fonts/Alb12.9.ttf", 9))
		r += detailedDraw(str, 4, r)
		graphics.setFont(Fonts.getGlobalFont(base+"/fonts/Alb17.14.ttf", 14))
		r += detailedDraw(str, 4, r)
		graphics.setFont(Fonts.getGlobalFont(base+"/fonts/Aco21.16.ttf", 16))
		r += detailedDraw("|=+-\u00d7\u00f7", 4, r)
		graphics.setFont(Fonts.getGlobalFont(base+"/fonts/JapanPlain12.12.ttf", 12))
		r += detailedDraw(str, 4, r)
		graphics.setFont(Fonts.getGlobalFont(base+"/fonts/JapanPlain16.17.ttf", 17))
		r += detailedDraw(str, 4, r)
		//graphics.setFont(Fonts.getGlobalFont("c:/winnt/fonts/Arial.ttf", 12))
		//r += detailedDraw(str, 4, r)
		//graphics.setFont(Fonts.getGlobalFont("c:/winnt/fonts/ArialUni.ttf", 12))
		//r += detailedDraw(str, 4, r)
		break;

	case 7:
		graphics.setBackground(Colors.getColor(64,160,160))
		graphics.fillRectangle(0, 0, width, height)

		border = width/8
		// ensure Pattern works
		p = new Path(graphics.getDevice())
		p.moveTo(border, height/2)
		p.quadTo(border, border, width/2-border, border*2)
		p.quadTo(width-border, border, width-border, height/2-border)
		p.quadTo(width-border, height-border, width/2-border, height-border)
		p.quadTo(border, height-border, border, height/2-border)
		graphics.setClipping(p);
	
		pattern = this.getPattern(properties.value)
		graphics.setBackgroundPattern(pattern)
		graphics.setForegroundPattern(pattern)
		
//		graphics.setBackground(Colors.getColor(255, 128, 64))
		graphics.setForeground(Colors.getColor(0, 0, 0))
		graphics.fillRectangle(0, 0, width, height)
		
		break;
		

	}

	// draw a label on top identifying this	
	full = new Rectangle(0, 0, width, height)
	graphics.setClipping(full)
	graphics.setForeground(Colors.getColor(0, 0, 128))
	graphics.setBackground(Colors.getColor(128, 128, 128))
	//java.lang.System.out.println("1")
	graphics.setFont(Fonts.getGlobalFont(base+"/fonts/Alpi12.9.ttf", 9))
	
	s = '(name='+properties.name+'; appearance='+properties.appearance+')';
	r = graphics.formattedStringExtent(s, full, Font.WRAPPING_ENABLED)
	//java.lang.System.out.println("r="+r)
	graphics.drawFormattedString(s, r,
		Font.WRAPPING_ENABLED+Font.DRAW_OPAQUE);
}

Visual.prototype.getPreferredSize = function(wHint, hHint) {
	return null; // needs implementation	
}