DXCanvas
a canvas implementation for DesktopX
Tuesday, August 26, 2008 by Littleboy | Discussion: DesktopX
Update:
This small update brings a proper shadow implementation with blurring, two new functions (textPath and textAlongPath) and a few bug fixes. textAlongPath is still somewhat buggy with multi-segment paths but otherwise works great (see the TextWave demo). I fixed a few problems with arcTo that wasn’t working as specified and made a few changes here and there. More importantly, I fixed a nasty crash bug that was sometimes happening on exit.
There is also two new utility functions available from script allowing you to suspend the canvas drawing updates. This allows you to do all the drawing necessary for a frame of animation and refresh the canvas at the end, instead of having it refresh at 30fps while your script is doing all the drawing operations.
With this new API, it was possible to fix all the flickering in the included examples! I’ve also added a few new example scripts. Check out the Polygon example, as well as all the text-related ones.
Every major browser has support for it, Yahoo! Widgets has support for it, how come there isn't something for DesktopX?
Enter DXCanvas, a DesktopX drawing plugin that implements the Canvas spec (plus some DesktopX-specific additions).
How does it work

DXCanvas is a DesktopX drawing plugin, which means it takes over drawing for the object it is associated to.
In the configuration, you can set the initial size for the canvas. By default, the drawing surface size will be 300x150. You can also specify whether you want the surface to be transparent and show the other objects or windows under it, or opaque.
A canvas object is made available to scripting. To be able to draw on the canvas, you need to request a context. This is done by calling getContext(type) on the canvas object. The only supported type right now is "2d".
See the list of functions in the implementation section. Note that some are slightly different from the Canvas specification, or are completely new. This is to adjust to differences in what is possible in a browser and in DesktopX.
Canvas Controller Widget
I've made a little widget to make testing easier. It loads a list of scripts from a user-defined folder and allows you to switch between them. It support scripts written in both JScript and VBScript.
It basically associate the script to an object having the DXCanvas plugin as a capability.
Two functions are required for the scripts to work: Object_OnScriptEnter() and Object_OnScriptExit().
The canvas size is reset its default size of 300x150 when switching between scripts, so make sure to set it to the required size if needed by your script.
To add a new script to the list, create a new .js or .vbs file in a folder and select this folder in the widget preferences. A few test scripts are included in the Script folder.
It also support subfolders (only 1 folder deep), so you can organize your scripts in subfolders.
How to help
Download the Canvas Controller widget and start creating scripts!
What to look for
- strange behavior: colors are not right, context is not saved or restored correctly, etc.
- the output from a script is different in Firefox or Safari
- crashes or memory leaks
What is broken/not working properly
- Drawing still flicker (not as badly as before)
- This is a DEBUG build, so it's going to be slower than normal
Links
- HTML5 Spec on Canvas
- Canvas Tutorial
- Yahoo! Widgets Canvas Documentation (Look in Core DOM Reference -> Canvas / CanvasRenderingContext2D)
Changelog
1.1 Build 287:
- Added manual drawing mode with suspendDrawing/resumeDrawing methods
(this should allow users to work around the flickering) - Fixed text position being off baseline when drawing on a path
- Fixed a rare crash when drawing text on a path
- Activated Pixman MMX&SSE2 fast paths
- Updated Pango to fix font leak (rev 2746)
- Updated Pixman (0.13.2)
1.1 Build 269:
- Added textPath, textAlongPath (with stroke or fill option)
- Added support for shadows
- arcTo is incorrect when the three points are collinear
- arcTo should draw a straight line from P0 to P1
- restore() with an empty stack has no effect
- Corrected order of data returned by getImageData (BRGA -> RGBA)
- ImageData is now converted to non-premultiplied color
- Preserve the current path when clipping
- rgba colors were not converted to string properly (green had the wrong value)
- Some composite operations are now handled correctly
- Fixed Debug build crashing when expired
- Fixed stack overflow crash on exit
- Added check for font validity on assignment and fallback to default font (will raise an error in debug mode if font is incorrect)
- Moved state management to its own class
- Updated Cairo(1.8.4), Pixman(0.12.0), Pango(1.22.3), Glib(2.18.3) and libpng(1.2.33)
1.0 Build 225:
- Fixed large canvas objects taking a lot of CPU
- Log is always enabled
1.0 Build 217
- Fixed drawing being incomplete in some cases
- Added workaround for pink color drawing transparent. DesktopX always use pink to draw transparent surfaces, even in per-pixel mode. rgb(255, 0, 255) will be changed to rgb(255, 1, 255)
1.0 Build 214
- Added per-object log files
- Added more log info when creating a new context object
1.0 Build 211
- Added support for % in rgb/rgba colors
- Added "transparent" color (equivalent to "rgba(0,0,0,0)")
- Added SVG colors "darkgrey", "darkslategrey", "dimgrey", "grey", "lightgray", "lightslategrey" and "slategrey"
- Zero size canvas is allowed
- Properly share canvas state (context style stack was not properly shared before)
- DrawImage and DrawImageRegion check for negative width and height and adjust the coordinates
- Only match full color strings
- Accept rgb values outside [0;255] and clamp the value properly
- Clamp alpha and use premultiplied color values when painting with alpha (still somewhat wrong)
- Fixed leak and crash with CanvasImageData & CanvasPixelArray
- Fixed crash with invalid parameters in createImageData and getImageData
- Zero-length line gradients should paint nothing
- Radial gradients with the same start and end circle should paint nothing
- Image data now accepts negative width and height (you get the untransformed data for the resulting rectangle)
- arc() with zero radius draws a line to the start point.
- arcTo() has no effect if the context has no subpaths or if P0 = P1
- arcTo() draws a straight line to P1 if P1 = P2 or if radius = 0
- bezierCurveTo() has no effect if the context has no subpaths
- lineTo() has no effect if the context has no subpaths
- quadraticCurveTo() has no effect if the context has no subpaths
- Updated cairo, pixman and pango libraries
1.0 Build 201
- Added hsl/hsla color parsing
- Added some logging (DXCanvas.log in object directory)
- Fixed text stroking always drawing at position (0,0)
- Fixed text baseline being off by the text height
1.0 Build 191
- Added redraw calls buffering (less flickering)
- Added debugMode attribute to canvas. In debug mode, passing invalid parameters will result in an error being raised instead of the invalid value being silently ignored.
- No longer returns errors when passing invalid parameters to a lot of functions (as specified in Canvas specification)
- CanvasPixelArray.XXX6(index, value) now takes an int instead of a char and will clamp that value to [0;255]
1.0 Build 180
- Implemented toImage
- Implemented createImageData, getImageData and putImageData
- Added canvas support to createPattern, drawImage and drawImageRegion
- Fixed createPattern, drawImage and drawImageRegion not working in VBScript
- Fixed createPattern, drawImage and drawImageRegion not making a copy of the source image or canvas
- Fixed drawImageRegion using wrong default values for dw and dh
- Fixed drawImageRegion not creating a new path, resulting in image "corruption"
1.0 Build 168
- Implemented font attribute setter/getter
- Implemented fillText, strokeText and measureText (using Pango)
- Implemented arcTo (using patch from Behdad Esfahbod)
- Fixed image loading (SD_LOAD_IMAGE seems to be corrupting some images...)
1.0 Build 159
- Implemented textAlign and textBaseline attributes setters/getters (not used yet)
- Implemented createPattern, loadImage, drawImage and drawImageRegion
- Update to cairo 1.7.4 (better support for text)
- Statically linked to cairo lib (no need for cairo.dll anymore)
1.0 Build 149
- First test version
Download
You can download a test version here. It only includes the Canvas Controller widget for now. Please do not use the DXCanvas plugin in your own objects and widgets yet. This version of the plugin will expire on the 10/01/2008.
Implementation
Under the hood, it's using Cairo, a 2D vector graphics library that also powers the Mozilla and Yahoo Widgets implementations. Right now, the Cairo library is dynamically loaded at runtime, but I hope to have it statically linked into the plugin for the final version.
Here is a list classes with their attributes and functions and the state of their implementation
Canvas
| Name | Implemented | Comment |
|---|---|---|
| width | YES | |
| height | YES | |
| debugMode | YES | Invalid input will raise an error instead of being ignored. |
| getContext(type) | YES | |
| toImage(path) | YES | Saves to a PNG file (replaces toDataURL) |
| suspendDrawing() | YES | |
| resumeDrawing() | YES |
CanvasRenderingContext2D
| Name | Implemented | Comment |
|---|---|---|
| globalAlpha | YES | |
| globalCompositeOperation | YES | |
| strokeStyle | YES | |
| fillStyle | YES | |
| lineWidth | YES | |
| lineCap | YES | |
| lineJoin | YES | |
| miterLimit | YES | |
| shadowOffsetX | YES | Shadows are not implemented yet. |
| shadowOffsetY | YES | Shadows are not implemented yet. |
| shadowBlur | YES | Shadows are not implemented yet. |
| shadowColor | YES | Shadows are not implemented yet. |
| font | YES | |
| textAlign | YES | |
| textBaseLine | YES | Hanging and ideographic baselines are treated as alphabetic. |
| canvas | YES | |
| save | YES | |
| restore | YES | |
| scale(x, y) | YES | |
| rotate(angle) | YES | |
| translate(x, y) | YES | |
| transform(m11, m12, m21, m22, dx, dy) | YES | |
| setTransform(m11, m12, m21, m22, dx, dy) | YES | |
| createLinearGradient(x0, y0, x1, y1) | YES | |
| createRadialGradient(x0, y0, r0, x1, y1, r1) | YES | |
| createPattern(input, repeat) | YES | |
| clearRect(x, y, w, h) | YES | |
| fillRect(x, y, w, h) | YES | |
| strokeRect(x, y, w, h) | YES | |
| beginPath | YES | |
| closePath | YES | |
| moveTo(x, y) | YES | |
| lineTo(x, y) | YES | |
| quadraticCurveTo(cpx, cpy, x, y) | YES | |
| bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) | YES | |
| arcTo(x1, y1, x2, y2, radius) | YES | |
| rect(x, y, width, height) | YES | |
| arc(x, y, radius, startAngle, endAngle, anticlockwise) | YES | |
| fill() | YES | |
| stroke() | YES | |
| clip() | YES | |
| isPointInPath(x, y) | YES | |
| fillText(text, x, y) | YES | |
| strokeText(text, x, y) | YES | |
| measureText(text) | YES | |
| textAlongPath(text, stroke) | YES | Adds (or draws) the specified text along the current path |
| pathText(text) | YES | Adds the strokes from the specified text to the current path |
| loadImage(path) | YES | |
| drawImage(input, dx, dy, dw, dh) | YES | |
| drawImageRegion(input, sx, sy, sw, sh, dx, dy, dz, dh) | YES | |
| createImageData(sw, sh) | YES | |
| getImageData(sx, sy, sw, sh) | YES | image data uses the BGRA format |
| putImageData(imageData, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) | YES |
Gradient
| Name | Implemented | Comment |
|---|---|---|
| addColorStop(offset, color) | YES |
ImageData
| Name | Implemented | Comment |
|---|---|---|
| width | YES | |
| height | YES | |
| data | YES |
PixelArray
| Name | Implemented | Comment |
|---|---|---|
| length | YES | |
| XXX5(index) | YES | |
| XXX6(index, value) | YES |
TextMetrics
| Name | Implemented | Comment |
|---|---|---|
| width | YES |
Reply #42 Thursday, September 11, 2008 9:02 AM
I haven't had time to look further into that problem yet. I'm using Vista myself and it works fine here. I included a dxpack in the latest build in case you want to take a look. Good work on the scripts. Are you working on a widget already?
I'm going to publish another test build soon as there is a problem with stroked text in the current public build (fixed internally).
Reply #43 Thursday, September 11, 2008 10:35 AM
I have not started on a widget/object yet. I tried to on Sep 4th when I posted about my problem with the Controller on Vista. After I realized that the Controller would not work, I tried to make an object from scratch, added your plug-in under additional capabilities and tried to run some of the scripts I put together. I could not go further from that point on because I got script errors (Null), "Object not available" type errors and assumed that I either had a Vista problem or was not making a proper declaration somewhere in my script to include the Canvas plug-in. I can examine the scripts in the Dxpack that you included in the build to see what I'm doing wrong. I hope I'm just having a problem with your Canvas Controller widget and not the plug-in itself. I REALY want this plug-in to work and have some project ideas in mind.
Some ideas include:
- Charting and Graphing
- Meters that can't be done with the current plug-ins:
- for example, I just made a DX Wi-Fi meter that works on Vista. It does not use any plug-ins, but uses different bitmaps for different states(meter levels). I want the meter to be dynamically drawn so I'm not limited to discreet states (i.e. 5 states and 5 images)
- DX based image editing
- Live object reflections
- I have not thought much about this yet, but is it possible to pass the .Image value from a normal DX object into the context of an object using the DXcanvas plugin so it can be manipulated or annotated with the drawing subs?
- Realtime enhancements to objects, like running indicators, or annotations to highlight a specific area on an object
- a simple implemantation of the LOGO language(which is fun for kids to play with). I always liked moving the turtle around.
Reply #44 Thursday, September 11, 2008 12:05 PM
I'm going to work on creating or more accurately adapting the Bar Chart Script (that I mentioned in the forum a while back) into a function. The basic function should be easy, the only issues I've experienced have been parsing csv files because of essentially no standards.
Wouldn't the live object reflection be possible already? Set up a mask object then draw a gradient with one color being transparent and import the image into that object.
Also, I would think you could easily get another object's picture by using Object.Picture? Off to try some of your ideas. ![]()
Reply #45 Thursday, September 11, 2008 12:15 PM
Object.Picture I meant, not Object.Image
Reply #46 Thursday, September 11, 2008 12:20 PM
Technically yes, object reflection is possible, but the reflected image has to be 'mirrored' to actually represent the reflection. The ImageMagik dll will allow you to do the image manipulation. I meant reflections of stuff drawn on a Canvas object, which is deninately doable.
Reply #48 Thursday, September 11, 2008 6:03 PM
Here's a better calendar script.
- Option Explicit
- Sub Object_OnScriptEnter
- canvas.width = 200
- canvas.height = 200
- DrawCalendar()
- End Sub
- Sub Object_OnScriptExit
- End Sub
- ' Three Sections Month/Year, Weekdays, Calendar Days
- Sub DrawCalendar()
- Dim ctx
- Dim x1,y1 ' Month/Year x,y positions
- Dim w1, h1 ' Month/Year width, height
- Dim x2,y2 ' Weekday Headings x,y positions
- Dim w2, h2 ' Weekday Headings width, height
- Dim x3, y3 ' Calendar x,y positions
- Dim w3, h3 ' Calendar Days
- Dim c, r ' Column, Row space
- Dim strDate
- Dim pattern
- Dim i,j
- Dim curMth
- Dim FirstDayOfWeek
- Dim thismonth,thisyear,thisMonthName,calFirstDay
- Dim calDaysInMonth, calDay
- x1=5
- y1=5
- w1=canvas.width-(x1*2)
- h1=25
- x2=5
- y2=(y1*2)+h1
- w2=25
- h2=15
- x3=5
- y3=y1+y2+h2
- w3=w2
- h3=25
- c=2
- r=2
- strDate=MonthName(Month(Now))&" "&Year(Now)
- ' Draw Background
- Set ctx = canvas.getContext("2d")
- ctx.fillStyle = "black"
- ctx.fillRect 0, 0, 200, 200
- ' Draw Month/Year
- ctx.fillStyle = "white"
- ctx.fillRect x1, y1, w1, h1
- ctx.font = "Sans Bold 12"
- ctx.fillStyle = "black"
- ctx.fillText strDate, x1+15, y1 'arrWkDay(i), x, y
- ' Draw Weekday Headings
- For i=0 to 6
- If i=0 Then
- x2=5 ' x coord of first column
- ctx.fillStyle = "gray"
- ElseIf i>0 And i<6 Then
- x2=5+(i*(w2+c))
- ctx.fillStyle = "white"
- ElseIf i=6 Then
- x2=5+(i*(w2+c))
- ctx.fillStyle = "gray"
- End If
- ctx.fillRect x2, y2, w2, h2
- ' Weekday Headings
- ctx.font = "Sans 8"
- ctx.fillStyle = "black"
- ctx.fillText WeekDayName((i+1), True,1), x2+2, y2 'arrWkDay(i), x, y
- Next
- ' Calendar Area
- ' Create Transparent background relative to Weeday headings
- ctx.clearRect x3, y3, 200-(x3*2), 200-(y3+y1)
- ' Create Gradient Background
- Set pattern = ctx.createLinearGradient(0, 0, 0, 200-(y3+y1))
- pattern.addColorStop 1, "blue"
- pattern.addColorStop 0, "rgba(255,255,255,0.5)"
- ctx.fillStyle = pattern
- ctx.rect x3, y3, 200-(x3*2), 200-(y3+y1)
- ctx.fill
- ' Get first day of week from system settings
- If Weekday(MonthName(8) & " 7, 2004") = 7 Then
- FirstDayOfWeek = 1
- Else
- FirstDayOfWeek = 2
- End If
- ' Draw Days
- curMth = Now()
- curMth = Month(curMth) & " " & Year(curMth)
- ' Determine the month and year that we are drawing from the variable we passed to the function
- thismonth = Left(curMth, InStr(curMth," ") -1)
- thisyear = Right(curMth, Len(curMth) - Len(thismonth) - 1)
- ' Get the month name and write it to the text object for the month name
- thisMonthName = MonthName(thismonth)
- ' Check which day number in the week the first day of the month occurs on
- calFirstDay = thisMonthName & " 1, " & thisYear
- calFirstDay = CDate(calFirstDay)
- calFirstDay = DatePart("w", calFirstDay, FirstDayOfWeek)
- ' Check how many days there are in the current month
- calDaysInMonth = DaysInAnyMonth(thisMonth, thisYear)
- x3=5
- calDay=0
- For j = calFirstDay To calFirstDay + calDaysInMonth -1
- If j = calFirstDay + Day(Now()) - 1 Then
- ctx.fillStyle = "red" ' Highlight today
- ElseIf j=0 Or j=7 Or j=8 Or j=14 Or j=15 Or j=21 Or j=22 Or j=28 Or j=29 Or j=35 Or j=36 Or j=42 Or j=43 Then
- ctx.fillStyle = "gray" ' Highlight Weekends
- Else
- ctx.fillStyle = "white"
- End If
- ctx.fillRect x3 + ((w3+c) * ((j-1) Mod 7)), y3 + (Int((j-1)/7)*(h3+r)), w3, h3
- ' Calculate Day
- calDay=calDay+1
- ctx.font = "Sans 10"
- ctx.fillStyle = "black"
- ctx.fillText calDay, x3 + ((w3+c) * ((j-1) Mod 7)), y3 + (Int((j-1)/7)*(h3+r))
- ' Create Transparent square to give a border illusion for each day
- '**Note: Gradient will not show up in this sequence
- 'ctx.clearRect x + ((w+c) * ((j-1) Mod 7))+bw, y2 + (Int((j-1)/7)*(h2+r))+bw, w-(bw*2), h2-(bw*2)
- Next
- End Sub
- ' Function to return the number of days in a month for the month and year provided
- Function DaysInAnyMonth(intMonth, IntYear)
- If IntYear = 0 Then
- IntYear = Year(Now())
- End If
- Select Case (intMonth)
- Case 9, 4, 6, 11
- DaysInAnyMonth = 30
- Case 2 ' February (includes leap year calculation)
- If (IntYear Mod 4 = 0) And (IntYear Mod 100 <> 0) Or (IntYear Mod 400 = 0) Then
- DaysInAnyMonth = 29
- Else
- DaysInAnyMonth = 28
- End If
- Case Else
- DaysInAnyMonth = 31
- End Select
- End Function
Reply #49 Friday, September 12, 2008 12:27 PM
New Build with a little bit of logging. See DXCanvas.log in AppData folder if using the widget or the currentTheme folder if using the dxpack (don't forget to copy the DXCanvas dll to your DesktopX SDPlugins folder if using the later!).
The problem with stroked text always showing at coordinates (0,0) should be fixed. There is also a slight change with the default text position. If you want to get the old behaviour, set the text baseline to "top" (ctx.textBaseline = "top").
You can also use CSS3 hsl/hsla color definitions now. The format is hsl[a](hue, saturation, lightness [,alpha]) with hue an angle in degrees, saturation and lightness as a percentage. For example, hsla(240, 100%, 50%, 0.5) will get you a semi-transparent solid blue.
Reply #50 Sunday, September 14, 2008 1:55 PM
Another build is available with a lot of small bugs and a few crashes and leaks fixed. The only new feature is support for % notation with rgb/rgba colors and a few new color definitions.
Reply #51 Sunday, September 14, 2008 8:29 PM
Littleboy,
With the latest build the controller starts minimized to the system tray and crashes when I try to open it. This occurs on all of my systems - Vista and XP. Tried running a script from a new object and still get the (Null) error on the Set ctx = canvas.getContext("2d") line.
Reply #53 Sunday, September 14, 2008 9:46 PM
20:07:17:337 =====================================================================================================================
20:07:17:337 == DXCanvas v1.0 build 211
20:07:17:337 =====================================================================================================================
20:07:17:337 Creating new surface (300x150)
20:07:17:337 Creating new context
20:08:22:662 Destroying surface and context
===============Finish Loging================
Reply #54 Monday, September 15, 2008 12:46 AM
OK, so it's creating the surface and context allright. How come you get null when asking for the context?
I forgot to ask you for the crash details (the contents of the crash dialog). Did you extract the new version to a new folder or to the same folder as the old version? Is the dxpack doing the same thing and crashing DesktopX too?
If you have a debugger installed on the machine, getting a stack trace would be nice too (if you don't, don't worry about it).
Reply #55 Monday, September 15, 2008 7:45 AM
When it crashes on Vista I only get a nice pretty dialog that says - Canvas Controller.exe has stopped working. On XP this is what I get for an error code:
AppName: canvas controller.exe AppVer: 0.0.0.0 ModName: canvas controller.exe ModVer: 0.0.0.0 Offset: 00014aa3 This is what is in the crash log: *************************************************************** <?xml version="1.0" encoding="UTF-16"?> ***************************************************************
<DATABASE>
<EXE NAME="Canvas Controller.exe" FILTER="GRABMI_FILTER_PRIVACY">
<MATCHING_FILE NAME="Canvas Controller.exe" SIZE="1112064" CHECKSUM="0x1E519228" MODULE_TYPE="WIN32" PE_CHECKSUM="0x8ECB3" LINKER_VERSION="0x0" LINK_DATE="03/28/2008 19:14:43" UPTO_LINK_DATE="03/28/2008 19:14:43" />
<MATCHING_FILE NAME="SDCtrls.dll" SIZE="217088" CHECKSUM="0xE6CA394" BIN_FILE_VERSION="1.0.0.3" BIN_PRODUCT_VERSION="1.0.0.3" PRODUCT_VERSION="1, 0, 0, 3" FILE_DESCRIPTION="DesktopX ActiveX USER Control Wrapper" COMPANY_NAME="Stardock" PRODUCT_NAME="DesktopX ActiveX Controls" FILE_VERSION="1, 0, 0, 3" ORIGINAL_FILENAME="SDCtrls.DLL" INTERNAL_NAME="SDCtrls" LEGAL_COPYRIGHT="Copyright 2004" VERFILEDATEHI="0x0" VERFILEDATELO="0x0" VERFILEOS="0x4" VERFILETYPE="0x2" MODULE_TYPE="WIN32" PE_CHECKSUM="0x0" LINKER_VERSION="0x0" UPTO_BIN_FILE_VERSION="1.0.0.3" UPTO_BIN_PRODUCT_VERSION="1.0.0.3" LINK_DATE="05/22/2006 19:19:36" UPTO_LINK_DATE="05/22/2006 19:19:36" VER_LANGUAGE="English (United States) [0x409]" />
<MATCHING_FILE NAME="SDPlugins\DXAxHost.dll" SIZE="442560" CHECKSUM="0x4CEA5916" BIN_FILE_VERSION="3.5.0.0" BIN_PRODUCT_VERSION="3.5.0.0" PRODUCT_VERSION="3, 5, 0, 0" FILE_DESCRIPTION="DXScript" COMPANY_NAME="Stardock" PRODUCT_NAME="DXScript" FILE_VERSION="3, 5, 0, 0" ORIGINAL_FILENAME="DXAxHost.DLL" INTERNAL_NAME="DXAxHost" LEGAL_COPYRIGHT="Copyright 2001-2007 Stardock Corporation" VERFILEDATEHI="0x0" VERFILEDATELO="0x0" VERFILEOS="0x4" VERFILETYPE="0x2" MODULE_TYPE="WIN32" PE_CHECKSUM="0x796DA" LINKER_VERSION="0x0" UPTO_BIN_FILE_VERSION="3.5.0.0" UPTO_BIN_PRODUCT_VERSION="3.5.0.0" LINK_DATE="03/26/2008 23:44:02" UPTO_LINK_DATE="03/26/2008 23:44:02" VER_LANGUAGE="English (United States) [0x409]" />
<MATCHING_FILE NAME="SDPlugins\DXCanvas.dll" SIZE="2642944" CHECKSUM="0xA36A1A4B" BIN_FILE_VERSION="1.0.0.1" BIN_PRODUCT_VERSION="1.0.0.1" PRODUCT_VERSION="1.0.0.0" FILE_DESCRIPTION="DesktopX plugin : Provides a scriptable free-form vector drawing surface" COMPANY_NAME="Three Oaks Crossing" PRODUCT_NAME="DXCanvas" FILE_VERSION="1.0.0.0" ORIGINAL_FILENAME="DXCanvas.dll" INTERNAL_NAME="DXCanvas.dll" LEGAL_COPYRIGHT="Copyright (c) 2008 Three Oaks Crossing. All rights reserved." VERFILEDATEHI="0x0" VERFILEDATELO="0x0" VERFILEOS="0x4" VERFILETYPE="0x2" MODULE_TYPE="WIN32" PE_CHECKSUM="0x0" LINKER_VERSION="0x0" UPTO_BIN_FILE_VERSION="1.0.0.1" UPTO_BIN_PRODUCT_VERSION="1.0.0.1" LINK_DATE="09/14/2008 17:18:57" UPTO_LINK_DATE="09/14/2008 17:18:57" VER_LANGUAGE="English (United States) [0x409]" />
</EXE>
<EXE NAME="kernel32.dll" FILTER="GRABMI_FILTER_THISFILEONLY">
<MATCHING_FILE NAME="kernel32.dll" SIZE="984576" CHECKSUM="0xF0B331F6" BIN_FILE_VERSION="5.1.2600.3119" BIN_PRODUCT_VERSION="5.1.2600.3119" PRODUCT_VERSION="5.1.2600.3119" FILE_DESCRIPTION="Windows NT BASE API Client DLL" COMPANY_NAME="Microsoft Corporation" PRODUCT_NAME="Microsoft® Windows® Operating System" FILE_VERSION="5.1.2600.3119 (xpsp_sp2_gdr.070416-1301)" ORIGINAL_FILENAME="kernel32" INTERNAL_NAME="kernel32" LEGAL_COPYRIGHT="© Microsoft Corporation. All rights reserved." VERFILEDATEHI="0x0" VERFILEDATELO="0x0" VERFILEOS="0x40004" VERFILETYPE="0x2" MODULE_TYPE="WIN32" PE_CHECKSUM="0xF9293" LINKER_VERSION="0x50001" UPTO_BIN_FILE_VERSION="5.1.2600.3119" UPTO_BIN_PRODUCT_VERSION="5.1.2600.3119" LINK_DATE="04/16/2007 15:52:53" UPTO_LINK_DATE="04/16/2007 15:52:53" VER_LANGUAGE="English (United States) [0x409]" />
</EXE>
</DATABASE>
I extracted the zip to a new folder and tried it and it crashed. I also extracted the zip over the old and got the same. This build did not have a .dxpack included in the .zip
I also tried to run one of the sample scripts in a new object, included the plug-in in Additional abilities and still get the null error.
Hope this helps.
Reply #56 Monday, September 15, 2008 2:48 PM
Same happened to me. Starts minimized, then crashed.
I compiled a gadget using the controller object and had the same result.
Then when I went into your main script and edited the paths you had, basically just change forward slashes to back slashes then it works. Strange behavior because it should bring up an error about the script paths and not crash.
Reply #57 Monday, September 15, 2008 2:50 PM
Are you running anything from McFee ? This looks like your antispyware is catching it for some reason. Can you try disabling it and test again?
What was the latest working build for you? IIRC using the plugin alone never worked for you, right?
Reply #58 Monday, September 15, 2008 8:01 PM
I'm not running anything from McCafee. The plugin never worked on Vista for me.
Reply #59 Monday, September 15, 2008 8:04 PM
Your previous build worked for me on my work computer(XP).
Reply #60 Tuesday, September 16, 2008 12:38 PM
Build 214 is working on my XP machine (XP Pro - SP2) here at work. I'll try it on Vista tonight and let you know ASAP.
Please login to comment and/or vote for this skin.
Welcome Guest! Please take the time to register with us.
There are many great features available to you once you register, including:
- Richer content, access to many features that are disabled for guests like commenting on the forums and downloading skins.
- Access to a great community, with a massive database of many, many areas of interest.
- Access to contests & subscription offers like exclusive emails.
- It's simple, and FREE!







Reply #41 Thursday, September 11, 2008 8:52 AM
Littleboy,
I'm still having problems with the new build running the Canvas Controller on my Vista machines (see reply #36 of this thread). The controller and canvas procedures/plug-ins work great on my XP machine here at work.
Any ideas?
Thanks.