--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uidesigner/com.nokia.sdt.test.componentlibrary/components/testing/render_visual.js Fri Apr 03 23:33:03 2009 +0100
@@ -0,0 +1,306 @@
+/*
+* 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
+}
+