- CapeSoft Draw Basic Documentation and Template Reference
- Draw Method and Property Reference
- Draw Layers
- Draw Header - Easy dynamic window headings
- DrawImage
New image loading and handling, including
loading and saving a wide variety of formats such as JPEG, PNG,
TIFF and more. Features image rotation, high quality resizing,
automatic tiling, grayscale conversion and colour manipulation
and much more!
- Draw Paint
Create dynamic, user interactive
graphics, click and drag to select, move, resize and place object.
- Frequently Asked Questions (FAQ)
- Version History
Introduction
The CapeSoft Draw control allows you
to draw directly to an image control. Not only is this fast, but has the added
advantage that if the control is refreshed, it simply redraws the image, rather
than re-calling each of drawing commands. And it allows:
- Individual pixels to be modified, which is great for per pixel effects
- Faster special effects drawing.
- Images can be saved in either BMP or PNG formats, and with the new DrawImage
functionality (which utilizes the Clarion FreeImage library available from
www.Clarionfreeimage.com) images can be loaded and saved to and from JPEG, BMP, TIFF, PNG,
PCX and a large number of additional formats.
- Real-time animation in a standard Clarion image control.
- Very fast redraws.
- All commands are drawn directly to a buffer.
- Advanced drawing functions that easily allow you to achieve complex effects.
- Multiple layers, and transparency types.
Draw now supports multiple drawing surfaces, otherwise known as
layers.
Some of the features include:
- Layers can be any size (not necessarily the same as the image control).
- Layers can be hidden, which means you that can have hidden drawing surface that can be
used as off-screen buffers.
- Pixels can be copied in blocks of any size from any layer to any layer, with full control
over the exact size and location of the block.
- Any layer can be drawn directly to the image control.
- Drawing to a layer is as simple as selecting the layer using the
WithLayer() method and
then calling the Draw methods normally;
- Each layer supports index transparency (a single color can be selected as transparent).
- In addition each layer can have an associated alpha layer, which allows soft transparency
effects. Alpha layers can store three separate channels of alpha information,
which can be associated with any number of layers.
- See the section on layers for more information.
And best of all the upgrade to Draw 2 from previous versions is
free!
What's New
This section briefly describes what's new in the current release,
and important information when upgrading from older versions.
Draw 2.64
Updated DrawHeader template and added a new DrawHeader Class.
The DrawHeader no longer uses the local procedure, and the Utility templates
are no longer needed. The new options on the Global extension allow the old
template to be used (tick the Use Old Drawheader template
option), and also allows all settings for the DrawHeader object
to be overridden at the template level. The local extension
provides the same settings, and allows the global settings to be
overridden where needed.
DrawHeader control can use the new or old template code as
needed, simply tick the box for control that should use the old
DrawHeader template code, and use the Global extension to
specify whether the old of new template should be the default.
Draw 2.55
Updated DrawHeader template
For projects using the DrawHeader template run the DrawHeadingABC or DrawHeadingLegacy
utility template to import the update DrawMakeHeading function into your
application. This release adds resizing support and the ability to redraw the
control without recreating the icon.
Draw 2.30
Major new features include handling of Complex Script languages such as
Arabic and Hebrew (see the new
Show()
method documentation for more) as well as
Right-To-Left text ordering etc., support for
curve drawing. See the
History section for more.
Draw 2.13
Draw and Progress Compatibility
Draw 2.13 and Progress 1.14 both have template changes that make them incompatible
with the previous versions of the products, so please ensure that you
upgrade both products to Draw 2.13 and Progress 1.14 or later!
Draw 2.07
Important:
Because the equates that draw uses now all begin with 'Draw:', compiling
programs that use version prior to 2.07 may produce errors, in order to fix
these errors simply add the text 'Draw:' to each equate used in your source
code
. This mainly affects the internal drawing methods, as
a number of the API equates now have Draw: prepended to the label (e.g.
LOGPIXELSX
becomes Draw:LOGPIXELSX).
Most of the Draw equates already use the Draw: naming scheme. Only a very small
number of equates have been changed, so it is unlikely that you will comes across
this error.
See the
History
section for a full list and for features added in previous releases.
Support and Purchase
Your questions, comments and suggestions are welcome. See
our web page (
www.capesoft.com) for new
versions. You can also contact us in one of the following ways:
CapeSoft Support |
Email |
|
Telephone |
+27 87 828 0123 |
Fax |
+27 21 715 2535 |
Post |
PO Box 511, Plumstead, 7801, Cape Town, South Africa |
Draw may be purchased from:
CapeSoft Sales |
Web |
www.capesoft.com |
Email |
|
Telephone |
+27 87 828 0123 |
Fax |
+27 21 715 2535 |
Post |
PO Box 511, Plumstead, 7801, Cape Town, South Africa |
Installation
Run the supplied installation file.
Distribution
If you need to save images as PNG files you need to
ship the
cs_libpng.DLL and the
zlib.DLL files. These will be in your
application folder, or if not, in the
\clarion\accessory\bin folder. Cs_libpng.dll and zlib.dll are
inked at runtime. If they are not present Draw will simply not allow
PNGs to be written.
If you are using the Draw.
Barcode function
to create PDF417 compatible 2D barcodes then you need to ship the
Barcode.DLL
file.
If you are using the FreeImage functionality then you will need to ship the
FreeImage.DLL as well. Please note that you will need to comply with the
FreeImage License if you ship this DLL.
Acknowlegements
This product includes the
FreeImage DLL
and is included here under the terms of the
FIPL.
A copy of the FIPL can be found in your
\clarion\accessory\licenses folder.
This product includes the
LibPng
DLL and is included here under the terms of the
Libpng License. A copy of this can be found in your
\clarion\accessory\licenses folder.
This product includes
ZLIB
and is included here under the terms of the
Zlib License
which can also be found in your
\clarion\accessory\licenses folder.
Jump Start
Keen to get started? Or just don't like wading through all the documentation?
This section is just for you - the basics on how to get Draw working
as quickly and simply as possible.
This jump start will show you how to place a Draw control on a window
and draw a red rectangle into the control. The completed app is in the
/3rdparty/examples/Draw/JumpStart/ directory in you Clarion directory
(QuickDraw.app is the ABC version and QuickLegacy is the Legacy version).
- Create a new application (or open an existing one).
- Select a procedure with a window that you would
like to place the Draw control on (create one if necessary), right click
the procedure name and choose "window" to open the window formatter.
- Go to the Control Template pad, and choose Draw from the section Draw.
Then click on the window to add the Draw control to the window.
Resize the Draw control - you can make it any size you like.
- Right click on the Draw control and choose "Actions".
Change the name of the object to "drawer". Click OK
- Place a button on the window and change the text to read "Blank".
Right click on the button and choose "embeds" . In the "Control
Events" section, double click on "Accepted" and choose
"Source". Type the following code into the embed:
drawer.Blank
(color:white)
drawer.Display()
The first line of code clears the Draw layer to white, the second line
then write resultant pixels to the image control. Each time you call the
Draw methods you need to call Display() to update the image control. Click
"Exit" to leave the embeditor (click Yes when it prompts you
to save your work) and close the embeds window.
- Place a second button on the window with the text "Box". Follow
the same steps as above, except this time use place the following code
in the Accepted embed:
drawer.Box(10,
10, Random(80, 200),
Random(80,
200), color:red)
drawer.Display()
This will draw a red box with the top left hand corner at (10, 10) and a
width and height of between 80 and 200 pixels. Again exit the embeditor and
save you work. You can now exit the window editor, save the application,
compile and run it. You may notice that the box has a black border, you can
set the pen color that is used to draw line by calling the SetPenColor()
method.
- Try adding the following code before the call to drawer.Box():
drawer.SetPenColor
(Random(
color:black,
color:white))
You can also try out the setpenwidth() method
to set the line thickness.
For more advanced examples see the Examples section.
Useful Information:
Methods use in the quickstart
Blank() - clears the current
layer to the color specified
Display() - writes all visible layers to the
image control
Box() - Draws a rectangle
Setpencolor() - sets the current pen color
(used for drawing lines and borders)
Layers
In the above example we completely ignored the fact that Draw supports
multiple layers. When the Draw object is first created it creates
a layer and sets it as the active layer, so it is possible to
simply ignore the fact that a layer is being used. Layers allow
a huge amount of flexibility and power, see the section on
layers
for more information.
Lines and Fills
In addition to setting the pen and fill colors, Draw also supports
patterned fill and pens. See
SetFill() and
Setpenstyle()
Shading
As well as supporting simple shapes like
boxes,
lines and
ellipses Draw
has methods that create shapes with complex color shaded fills for
boxes,
cylinders,
ellipses and
even shaded lines.
Adding a Draw Control to your Window
Note: CapeSoft Draw only supports 32 bit applications
Adding a Draw Control to your window is easy:
- (Optional) Add the global extension template
for Draw. Go to the Global Properties Dialog box in you application, selection
extensions, then insert the GloDraw extension.
- Open the window editor for the window;
- Place an image control on the window;
- Select CapeSoft Draw Control from the template populate box;
- Right click on the control and choose 'actions', here you can customize the
Draw control's settings, such as giving the object a name - see
Options
for the Draw Control.
The Draw Global Extension Template
The global extension is used to enable Draw in your application and
also allows you to disable all Draw code, primarily
for debugging. From Beta 11, Draw uses runtime DLL linking for writing to PNGs,
see the section on
Distribution for the DLL required
for PNG writing.
Using Draw in Multi-DLL applications
Draw provide options on the global extension to make using it in multi DLL applications simple.
Draw is exported from the Data DLL, and then used in the other apps in your
system as required.
Data DLL App
- Add the Draw Global extension
- On the Multi-DLL tab tick on both options.
Other Apps (DLLs and EXEs)
- Add the Draw Global Extension
- On the Multi-DLL tab tick on ONLY the first option. (DLL's will
default to this being on, but EXE's need it explicitly set.)
Options for the Draw Control
Setting the Object Name
Under 'actions' in the control properties box you can set the object name.
This is the object whose methods you will call to do the actual drawing. All
examples in this document use the object name "Drawer".
Setting the Class Name
You can also set the class that Draw uses to create objects, this allows
you to modify or replace the Draw class with your own customized version with
a different name. If you do this please remember to add your own .clw to the
project (under "external source files").
Don't generate this Draw Object
This option works similarly to the option on the global template "Don't
generate Draw code", rather than disabling all draw code globally, this
option allows you to disable any generated code for this object only.
IMPORTANT: The origin of the Draw control
is the top left corner and is (1,1). See the image below.
Pixels and Dialog Units
Draw uses pixels throughout rather than dialog units. There are a number
of reason behind this, however the primary one is that for drawing pixels is
the natural unit of measurement, as whatever is drawn will eventually be rendered
in pixels. Changing the font or font size used for a window will not affect
Draw at all, unlike other controls which will be affected by the change in dialog
units. Using pixels also ensures that there are no rounding errors that result
in inaccurate drawing. In addition you can do calculations far more accurately
than the screen can render and simply pass the Rounded values to Draw.
You can convert from dialog units to pixels - to get the current
number of pixels per dialog units (this is likely to be a fraction, not a whole
integer):
pixPerUnit
real
curUnits
byte
code
curUnits = target{prop:pixels}
target{PROP:Pixels} = 0 ! Set to DLUs instead of pixels.
pixPerUnit = self.width/self.control{prop:width}
target{prop:pixels} = curUnits
Examples
Notes on getting started.
Unlike the Clarion drawing functions, the Draw control does not display
the result as each function is called, you need to call the
Draw.Display()
method to update the Draw control. Before drawing, you can call the
Blank
method to erase everything on the Draw control, or simply draw over the existing
image. This allows you to do real-time animation, simply by calling all the
drawing commands before calling
Display to update the
control, and
Blank between each frame of the animation.
Note that Blank does not take effect until Display is called.
A typical usage of the Draw methods would be:
Drawer.Blank()
Drawer.SetPenColor(COLOR:Red)
Drawer.Ellipse(1, 1, Drawer.width, Drawer.height,
COLOR:Green)
Drawer.Display()
This would display an ellipse with red line and a green fill that is the width
and height of the Draw control.
You can draw to any image control on a window or a report, however when drawing
to a report, you need to call the Clarion SetTarget(Report) function
before
calling any Draw methods. You can call SetTarget() with no parameters to make
the current topmost window the current target. See the section on
Using Draw on a Report
There are a number of examples in your
\Clarion\3rdParty\Examples\Draw directory.
The examples are a great way to get started and see a few of the ways you can
use CapeSoft Draw. Draw ships with the following examples:
JumpStart | The result of following the JumpStart section. Th most basic example
of how to use Draw. The ABC version is called QuickDraw.app, the Legacy
version is QuickLegacy.app
See JumpStart for more details. |
3Dmap | The 3D map example uses Draw
to create really cool 3D maps, with a number of shading and display options.
The app file is clarion/3rdparty/examples/Draw/3DMap/map.app |
pattern | Pattern.app is both an example and a useful
tool. It creates a patterned fill that is used to fill a rectangle. It also
displays the pattern string that can be used within your source code. See
the Pattern section for more information. |
Demo | Draw 2.10 ships with a new Demo application that is
a great place to get a feel for some of the things that are possible to
do quite simply using Draw. This application demonstrates all the basic
functions in Draw as well as some neat effects like drop shadows, pie
slices, shaded bars etc. |
Draw Layers
| The new Draw example
application that ships with Draw 2.00 and later. Allows you to Draw to an
image control and shows off a few of Draw's layer features. |
DrawImage | This example utilizes the Clarion FreeImage template (available
from
www.clarionfreeimage.com) to save to different file formats
and to read images from different file formats. You must have
downloaded and installed the Clarion FreeImage template in order
to compile this application |
Debugging and Logging
Draw provides a Log() method to assist in debugging your Draw
applications. This method outputs a string to the windows debug output, all
output can be viewer using the free DebugView application from www.sysinternals.com.
DebugView can also be used to view any error message that Draw might encounter,
even is Draw.suppressErrors = 1. In order to use the build in logging in Draw
you should set the Draw.logging property to 1. Any error that a Draw method
encounters will then be sent to the debug output. This has the advantage of
allowing debug output to be viewed regardless of whether the app is compiled
in debug or release mode. It also allows debug output with affecting the program
execution, and allows debug logs to be saved. You can view both your own output
(using the Log() method) and Draw's output using Debugview, in addition DebugView
can be used for producing log files for other CapeSoft products, such as
File Manager 3 and
NetTalk.
Compiler Errors
Unknown template type. Activate
ClarionFreeImage - You are trying to compile/load a draw
application that uses the Clarion FreeImage template. This is an independent
template available for free download from
www.clarionfreeimage.com which
you can use to add additional functionality to Draw (like loading and saving
images from/to jpg, and other common graphic file formats).
Using the Draw Pattern Fill Maker
Versions from Beta 7 and later include the Draw Pattern Fill Maker, an application
which allows you to easily design your own patterned fills with an easy to use
graphical interface. See the
Setfill() method for more
information on pattern fills. To use the Draw Pattern Fill Maker, simply compile
the pattern.app that ships with Draw. The files that you need are:
pattern.app - the app file
about.jpg, back.jpg and tick.jpg - image files used in the app
pattern.ico - the application icon
These files are installed in your Clarion directory under 3rdparty/examples/pattern
Simply open pattern.app in Clarion, compile it and run it.
To create a pattern click on the boxes on the left, you will see the resultant
pattern in real time on the right of the window. To use the pattern in your
clarion app, copy across the string displayed in the text box at the bottom
of the window. You can use a variable to store the string, or simply pass it
as a string, for example:
Drawer.SetFill('0000000010101010000100011010101000000000101010100001000110101010')
Each pattern is a 8x8 block of pixels that is tiled as necessary to cover the
entire fill area, hence the string is 64 characters long, a 1 (one) represents
a pixel to filled with the current color, while a 0 (zero) represents a pixel
that remains untouched.
See the
Setfill() method for more information on pattern fills.
Using Draw on Reports
Draw supports the same command on reports as it does on windows, however reports
do differ in some ways. When calling Clarion's drawing functions to draw to
a report it is necessary to call SetTarget(Report), similarly Draw requires
that you call SetTarget(Report) before calling any Draw methods that will draw
to the report. When you are finished you can call SetTarget() to set the current
target to the last window opened on the current thread. See the Clarion documentation
on SetTarget() for more information.
Populating the Draw control on a report is identical to populating it on a
window, simply place an image control on the Report and select the "DrawR
- CapeSoft Draw Control" template list under "Class Draw - CapeSoft
Draw Template" when populating it. The "R" on the end of "Draw"
in the template name signifies that it is the Report template control.
When drawing to a report, you will most likely want to increase the resolution
when you are drawing (unless you like big pixels and jagged edges of course),
as printing is generally done at a much higher resolution than your monitor
might display (most screens typically display 96 DPI or less, whereas most desktop
printers will print at at least 200DPI, and possibly considerably higher.) So
how do we increase the resolution of the Draw control so that our printed reports
look really good?
Firstly add the following data to the report procedure:
resized byte
Then, in the source code for the report procedure, directly after the call
to PARENT.Open() the Draw template would have populated the following code:
SetTarget(report)
drawer.Init(?Draw)
SetTarget()
When you would like to draw to the report:
SetTarget(report)
drawer.SetPenColor(color:green)
drawer.SetFontColor(color:red)
drawer.SetPenWidth(1)
drawer.Blank()
if resized = 0 !
checks if the image control should be resized
drawer.Resize(drawer.width*4,
drawer.height*4)
resized = 1
end
Once you have finished drawing to the report call SetTarget(), this will set
the target back to the last window.
That's it, you can now Draw to reports with high resolution Draw controls.
Bear in mind that you should multiply the size of anything that you draw by
the amount that you multiply the Draw buffer by (in this case four). If you
don't you will get a tiny version of whatever you are drawing in the bottom
left corner of the Draw control, this is simply because each pixel is taking
up 1/16 (in this case) of what it was taking up before we resized the buffer.
For example if we draw a box before the resize: Draw.Box(10, 10, 100, 122, color:red)
we should modify the call to Draw.Box(40, 40, 400, 488, color:red). If you are
going to be changing the resolution frequently, or allowing the user to specify
the resolution you should probably create a variable to store the multiplication
factor.
For example the above code to resize the control and draw a box would become:
resMult long
resMult
= 4
if resized = 0
drawer.Resize(drawer.width*resMult,
drawer.height*resMult)
resized = 1
end
drawer.Box(10*resMult,
10*resMult, 100*resMult, 122*resMult, color:red)
The call to Draw.Resize() sets the size of the Draw buffer to be 16 times larger
(four times as wide and four times as high). You can experiment with a multiplication
value that suits you, the higher the value, the higher the resolution, but obviously
the more memory you will use.
In order to reduce the amount of memory used by high resolution Draw controls
on reports, as well as provide a significant speed improvement, you can use
256 colour drawing. See the section on
Init256() for
how to draw in 256 colours on a report.
It is also useful to be able to change the font size on reports, especially
at higher resolution. To do this you can simply set the Draw.fontZoom class
property. The fontZoom property defaults to 1, to increase the size that the
fonts draw, increase fontZoom. In the example above we increased the resolution
by a factor of 4, so we can set the fontZoom property to 4. When you increase
the fontZoom factor, it allows you to use the same point size at higher resolutions.
See the
Show() method for more information.
A note on printer and monitor resolutions:
A fairly reasonable heuristic (rule of thumb) for estimating the needed resolution
of an image for printing is to simply divide the required printer resolution
by 4. So for a 360DPI inkjet, a 90 DPI image will print reasonably well, for
a 720 DPI inkjet you should use around 180 DPI. More resolution will generally
give you a crisper printout and fewer jagged edges (to a point, the resolution
is limited by the printer capabilities). The default resolution of the Draw
control is 72 DPI.
License & Copyright
This template is copyright © 2016 by CapeSoft Software. None of the included files may be distributed. Your programs
which use Draw can be distributed without any Draw royalties.
Each developer needs his own license to use Draw. (Need to
buy
more licenses?)
This product is provided as-is. Use it entirely at your own risk. Use of this
product implies your acceptance of this, along with the recognition of the copyright
stated above. In no way will CapeSoft Software, their employees
or affiliates be liable in any way for any damages or business losses you may
incur as a direct or indirect result of using this product
Version History
Download latest version
here
Version 3.58 (13 September 2018)
- Add: Clarion 11 to install.
Version 3.57 (15 September 2015)
- Fix to header if shading was not set to anything (global value
should be used.)
Version 3.56 (10 August 2015)
- Better support for Resizers with Auto-Headers.
Version 3.55 (25 February 2015)
- Installer supports Clarion 10.
Version 3.54 (16 January 2015)
- Better support for ResizeAndsplit in DrawHeader class.
Version 3.53 (22 December 2014)
- Do not add Auto DrawHeader extension to Widget procedures.
- Remove ObjectName and lhClassName parameters from LocalAutoHeader
extension.
- Added calls to %SetUseVersion to Resize #ATs.
Version 3.52 (16 December 2014)
- DrawHeader.Init method had a different property name to Draw.Ini,
which caused an embed point to be duplicated.
- Add Decide method to DrawHeader class. (return FALSE to suppress the
header.)
Version 3.51 (7 November 2014)
- More support for suppressing "empty" icons from project.
Version 3.50 (22 September 2014)
- Suppress "empty" icons from project.
Version 3.49 (11 July 2014)
- Draw Headings allow settings from AnyFont and Makeover to be used as
default values.
- Icons used by Headings are automatically added to the Project.
- Fix: Bug in DrawHeader where Icon would sometimes not display at
all.
Version 3.48 (19 June 2014)
- Automatically copy zlib.dll, freeimage.dll and cs_libpng.dll to
application folder when compiling.
- Work-Around: Apps being upgraded from earlier versions are changing
BarHeight from -1 to 0.
- Add: Auto-Draw-Header detects existence of manual header in a
procedure, and disables itself.
Version 3.47 (10 May 2014)
- Experiments with anti-aliased curve.
Version 3.46 (21 January 2014)
Version 3.45 (7 January 2014)
Version 3.44 (3 January 2014)
- Add: New Method: Flood (and
internal method _flood)
- Add: New Method: FindPixel
- Add: NewMethod: RoundRect
- Change: PutPixel Method
takes optional Layer parameter. (implemented as new method for
performance reasons.)
- Change: Show method multi-layer anti-aliased text optimization
removed.
- Change: HasAlpha method returns
the number of the Alpha layer. In the past it always returned 1 if the
alpha layer existed.
- Change: New parameter pQuad added to
Ellipse method.
- Internal: _NormCoords method name changed to NormalizeCoordinates
- Fix: ShowLayer took a parameter, but did not use it.
Version 3.43 (17 December 2013)
- Add: ResetDisplayArea called in INIT method.
- ASSERTS added to code to ensure DataStore is open before being used.
Version 3.42 (13 September 2013)
- Refactor: Options on Global extension and Local extension reorganized.
- Change: When DrawHeader control dropped on a window then it
automatically positions at 1,1 not where the mouse is.
- Add: Template option to set Icon Size for the Icon in the header.
- Add: Activate Auto Headers global extension.
- Add LocalAutoHeader local extension.
- Add: HeaderHeight property to DrawHeader class
- Add: SetWindow and SetTextY methods to DrawHeader class
Version 3.41 (18 July 2013)
- Add: Create:Arc added as a supported
drawing item to the DrawPaint class.
- Add: StartAngle and EndAngle added to the
ItemQueue properties - used by the
new Arc type.
- Add: Trace method to send debug information to debugview.
Version 3.40 (5 July 2013)
- Fix: Resize support in Header template could cause the program to
GPF.
Version 3.39 (7 June 2013)
- checked template support to make sure all generated code is excluded
if "Disable Draw" or "disable Draw Object" is on.
Version 3.38 (23 May 2013)
- Update: Implement 4.02 of cape templates.
- Fix: Set DrawLinkMode and DrawDllMode correctly in Multi-Proj
projects.
Version 3.37 (11 May 2013)
- Fix: GEN: Unknown Variable '%lhNoDraw'
Version 3.36 (30 April 2013)
- Updated Install to detect Clarion 9.
Version 3.35 (14 March 2013)
- Changed to Ver4 object/template management system.
IMPORTANT
READ THIS.
- Add: support for Multi-Proj in C8
Version 3.34 (11 February 2013)
- Fix: LoadIcon method copes better with 16 bit screen depth, and 32
bit icons with no alpha channel.
Version 3.33 (21 January 2013)
- Fix: DrawPaint class did not set the PenWidth before drawing
ellipses and circles.
Version 3.32 (6 November 2012)
- Implemented: Cape01 template format.
Version 3.31 (23 October 2012)
- Fix: LoadImage method could hang when loading an icon for a
DrawHeader.
Version 3.30 (12 July 2012)
- Template rework of Object and Export generation.
Version 3.26 (24 May 2012)
- Fix: (regression) Errors caused by DrawHeader fixed.
Version 3.25 (23 May 2012)
- Fix: All methods exported from Data DLL.
Version 3.23 (12 April 2012)
- Fix: Polygon, FillPolygon methods. Handle case where ymin = 0 and no
edges with y > 0.
Version 3.22 (14 December 2011)
- Required for Insight Graphing 2
- Added: Length3d method
returns the length of the vector in 3D space.
- Added: Normalize method
normalizes the passed Vector.
Version 3.21 (24 October 2011)
- Required for Insight Graphing 2
- Fixed: MouseX and
MouseY methods returning values offset up to the width
of the scroll bar when the Draw canvas was larger than the control and a
scroll bar was used in only one direction (either horizontal or
vertical, but not both) and the scroll bar was used to change the
position within the control (at full scroll the mouse coordinate would
be offset by the width of the scrollbar which was not present).
- Added: MultiMonitors
example application. Demonstrates listing all monitors, position a
window on the primary display, opening a window on a new thread on the
secondary display and setting it to full screen, and fullscreen
animation and color calculation using Draw.
- Added: Fullscreen
method which retrieves the monitor info for the screen that the window
is currently on and resizes the window to the full size of the screen.
See the "GoFullscreen" example application, which demonstrates creating
full screen Draw applications without title bars window borders etc.
- Added: GoFullscreen example application
(Clarion 6) which demonstrates creating fullscreen applications. Note
that the code used in the example is included in the
"HowTo" section of the
documentation.
- Added: Multiple Monitors section to the
"HowTo" section of the
documentation.
- Added: LoadUser32 method loads all
runtime loaded API functions required from User32.dll. This is called
automatically the first time a method which requires the functionality
is called.
- Added: ListMonitors
method lists all monitors on the system
- Renamed: EnumFonts to
EnumFontFamilies
- Fixed: Font enumeration was causing a
GPF
- Added: Font enumeration to the Demo
example
- Added: DRAW_DISPLAY_DEVICE type
- Added: DRAW_MONITORINFO type
- Added: DRAW_DEVMODE type
- Added: ListDisplayDevices
methods lists all display devices
Version 3.20 (16 September 2011)
- Required for Insight Graphing 2
- Fixed: Max method
returning the minimum value rather than maximum when three or more
parameters where passed.
- Updated: Validated the behavior of the
Min method.
- Fixed: RgbToHsv
treating certain colors as grey, resulting in incorrect conversion
- Fixed: LightenColor not
correctly lightening the color
- Fixed: Missing value clipping in
LightenColor and DarkenColor
- Added: DarkenColor now
supports both absolute and relative adjustments
- Added: LightenColor now
supports both absolute and relative adjustments
- Added: LightenColor now
does perceptual lightening rather than simply adjusting the HSV Value of
the color - the saturation is proportionally adjusted for colors with a
maximum lightness, resulting in the method behaving perceptually as
expected.
- Updated: Saturate
method calculation
- Updated: Desaturate
method calculation
- Fixed: aaArc
Anti-Aliased Arcs drawing with a "width" and "height" up to 1 pixels
less than the correct sizes.
- Added: aaArc
automatically falls back to the pen color if not explicit color is
specified, and draws nothing if no color is passed and the pen color is
COLOR:None.
- Added: aaArc returns
without drawing anything if the penWidth is zero.
- Added: PieSlice, aaPieSlice,
aaChord, aaBezier, and aaRoundRect now
do not draw anything if a line only pie slice is specified and the pen
width is set to zero (0).
- Added: _LineColor
internal method.
- Removed: Deprecated WuLine
method.
- Added: _PieLine method - draws a line only pie slice.
- Added: _ArcCheck
- Added: _ChordCalc
- Added: DrawChordCalc
type
- Updated: Refactored _mArc
- Updated: Refactored _mThickArc
- Updated: Refactored PieSlice
- Updated: Refactored ShadeArcBand
- Updated: Ellipse and Arc parameter handling and coordinate
normalization.
- Added: _PieCalcLines
for calculating arc radials
- Added: aaShadeLine
- Fixed: PieSlice not
supporting startRadius when the width and height of the base ellipse
were the same (slice out of a circle).
- Fixed: Arcs drawing based on an ellipse
that could be 1 pixels too wide and high (only affected non anti-aliased
arcs).
- Fixed: Ellipses and thick ellipses
drawing up to 1 pixel too wide or high (did not affect anti-aliased
ellipses)
- Removed: Deprecated OldGrabScreen method
- Added: Improve PieSlice
drawing
- Removed: endRadius from PieSlice
drawing
- Added: _LineColor
- Added: _PieBorder.
Draws the pie slice outline - can be used to draw line only pies, used
internally for pie slice anti-aliasing, and can draw line on pie slices
with shaded lines.
- Added: PieResetSlice
- Added: new aaPie method
that takes a PieSliceType parameter
- Added: aaArc method now
allows the start and end point values for the arc to the returned using
the pStart and pEnd parameters
- Updated: Refactored aaArc
to improve performance and reduce code and duplication (halved the
number of if statements per pixel executed)
- Updated: Improved aaArc
end point pixel accuracy
- Updated: Improved performances of
aaPie and aaShadeArcBand methods.
- Updated: Improved the drawing of pie
slices
- Added: LengthenLine
which takes a width and height for a line and increments them by the
passed amount while maintaining the line gradient and orientation (the
line is lengthened).
- Added: Inc method
increments the absolute value of the passed number by the passed amount
(increment if the number is positive, decrement if it is negative)
- Fixed: Cylinder method
drawing cylinder ends 1 pixels too large.
- Added: Partial support for cylinder
anti-aliasing (the bottom edge is not anti-aliased in this release.
- Added: _ArcFill method draws an arc and fills the
additional pixels (much like anti-aliasing but at full strength) to
create a 2 pixel wide arc.
- Added: ColorPos method
returns the color at a point in a given color range. The color range (or
gradient) is based on a start color, end color and the distance between
them.
- Updated: ColorRange
method refactored
- Added: "ColorHandling" example
application uses the new ColorPos method to create a "palette" of colors
using four base colors. Requires CapeSoft StringTheory.
Version 3.11 (28 July 2011)
- Fixed: Typo in the Draw.inc on the
_AddLayerOrder method (resulting in an unresolved for
export error in multi-DLL applications).
Version 3.10 (28 July 2011)
- Fixed:
Display method was
using the maxLayer property rather than numLayers when looping through
the layerOrder. This was causing a reduction in display performance.
Optimized multi layer display performance.
- Fixed/Changed: Rewrote the
InitLayer method to
improve performance and eliminate issues with duplicate entries in the
layerOrder array which would degrade display performance over time when
using multiple layer.
- Added: _AddLayerOrder
method which adds a new layer to the layerOrder array. This method is
internal and is not expected to be called directly.
- Deprecated: The maxLayer property has
been deprecated and removed.
- Added: Documented the
SetDisplayArea
method.
- Added: Document the
ResetDisplayArea
method.
Version 3.09 (21 July 2011)
- Fixed: Typo on the export name for the
Captcha method (was being exported as Capatcha). This
has no impact on application using Draw.
- Fixed: The ErrorTrap
method being called when diReadImageToBuffer was called
with a buffer that was intentionally too small (the method returns the
required size).
- Added: handling for invalid
layerOrder array values to prevent a potential GPF.
- Added: diWriteImage
method for saving the image in almost two different file formats
including JPEG, PNG, TIFF, BMP, ICO, PBM, Targa, JPEG2000 etc.
- Fixed: bug with the
layerOrder array that caused duplicate layer entries when
KillLayer and InitLayer were called
multiple times for the same layer. This could result in a GPF or reduced
display performance.
- Added: New menu system to the
documentation, cleaned up links and added missing items to the menu.
- Updated: The DrawImage documentation.
This is still a work in progress, see the DrawImage example application
for an example of using DrawImage.
- New: Added an example of the new diWriteImage to the DrawImage
example.
Version 3.08 (12 July 2011)
- Fixed: Typo in the template causing an
unresolved external in multi-dll applications on the LinearEllipse
method.
- Fixed: The MouseX and
MouseY methods not
correctly restoring the PROP:pixels setting for the window when
PROP:Thous was non zero (restoring PROP:Thous to a non zero value clears
PROP:Pixels).
Version 3.07 (11 July 2011)
- Updated: All examples applications have
been updated and tested, including migrating older examples from Clarion
5.0 to Clarion 5.5. Removed all old examples which were extraneous,
removed duplicate or deprecated files from examples, added manifests for
all examples, correct missing templates or compile errors etc.
- Fixed: Ellipse drawing off by one pixel
when the width or height were passed as negative values.
- Fixed: Shaded ellipses not drawing
correctly with vertical shading.
- Fixed: ShadeLine method not drawing
vertically shaded lines correctly.
- Added: _NormCoords method to provide
consistent coordinate normalization
- Added: _ClipCoords to provided
consistent coordinate clipping
- Fixed: Clipping of coordinates was
allowing (0, 0) rather than treating (1, 1) as the origin
- Fixed: Clipping or coordinates allowing
coordinates ending 1 pixel off the canvas
- Updated: Improved clipping and
normalization of coordinates for patterned lines.
- Fixed: Additional pixel drawing on
shaded vertical lines.
- Fixed: Shaded ellipses could draw the
left hand side of the ellipse with a radius 1 pixel greater than the
right hand side depending on the size and coordinates.
- Updated: Validated styled lines drawing
coordinates.
- Updated: Refactoring clipping and
normalization code for shaded and styled lines
- Fixed: Horizontal shaded lines filling 1
additional pixel.
- Fixed: Shaded vertical lines not shading
(drawing as a solid color).
- Updated: Optimized and refactored
_ErrLine
method, removed extraneous code
- Added: New AntiAlias example
demonstrates the new Anti Aliasing support in Draw.
- Updated: Removed additional extraneous
files from examples and reduced installer size.
- Updated: Modified the Chord method to
call Arc and removed duplicate extraneous code.
- Updated: Removed deprecated/unused
_NewThickLine
method
- Updated: Removed deprecated/unused
_Thickness method
- Updated: Internal LinearEllipse method
renamed to _LinearEllipse
- Fixed: MetallicCylinder not drawing the
cylinder body with certain coordinates as the result of overly
aggressive clipping.
- Updated: Removed the deprecated/unused
Thick_line method.
- Fixed: Anti-Aliased ellipses drawing
width incorrect coordinates (only affected the Ellipse method not direct
calls to aaEllipse).
- Added: Anti-Aliasing to the Demo example
application
- Updated: The code for the demo example
to better demonstrate basic drawing.
- Added: Examples of clipping coordinates
to the Demo example
- Added: A RandCoords routine to the Demo
example that demonstrates generating coordinates within an area and
clipping the result.
- Fixed: Removed extraneous debug logging.
- Added: New RandColor method that allows
the lightness and saturation of the color being generated to be
manipulated, as well as the amount of variance in the lightness of the
color to be influenced.
- Added: Example of using the new
RandColor method to the Demo example (see the Sphere drawing example).
- Updated: Removed the local RandColor
function from the example application and moved all calls to the
Draw.RandColor method.
- Added: Anti-Aliases edges to the Sphere
method. Now supports smooth edge drawing when Anti-Aliasing is enabled
(the Draw.antiAlias property is non zero)
- Fixed: Spheres potentially drawing 1
pixel too wide for some coordinates.
- Fixed: Icons drawing 1 pixels offset
from the correct location.
- Fixed: Icons clipping the icon width by
1 pixel too many when the entire icon was not on the canvas and hence
required clipping.
- Fixed: Icons drawing incorrectly when
clipped as a result of the source icon scanline not be adjusted for each
row of pixels in the icon, resulting in the next scanline beginning at
the clipping position rather than the start of the next scanline in the
icon (which resulted in a corrupted "skew" drawing of the icon).
- Updated: Verified icon clipped and
coordinate adjusted for all coordinate cases.
- Updated: Optimize icon drawing to not
process extraneous scanlines that would draw off the canvas.
- Added: New "Tests" tab to the main
example. This demonstrates some additional method calls and also tests
some of the Draw functionality.
Version 3.06 (28 June 2011)
- Fixed: A potential array index out of
bounds when using 256 color drawing in the Display method (the palette
could end up with 257 entries rather than 256).
- Fixed: Duplicate symbol compile errors
in Clarion 8 on the LibPNG functions.
Version 3.05 (6 June 2011)
- Fixed: Fix the template generating the Init call twice for reports.
- Fixed: The template not generating the call to InitDrawImage on
reports.
Version 3.03 (25 February 2011)
- DrawPaint - use only textvalue (for images as well). Deprecated
ItemQ.ImageName property. If you get compile errors, use the
ItemQ.textvalue property.
- Fix for RightReports - resizing fix. Don't resize < 0 (vertically or
horizontally)
Version 3.02 (16 August 2010)
- Fixed missing Thick_Line in the export list,
which would result in an Unresolved External error in multi-dll
applications.
Version 3.01 (10 August 2010)
- Fixed incorrect name() attribute for the
aaPolygon method.
- Removed the old
HLINE@F4DRAW from the template exports.
- Fixed release date for 3.00 in the History.
Version 3.00 (4 August 2010)
- Changed the open mode used by the Image() method
to open loaded images are read-only. This allows images to be read and
displayed from locations that do not have write access.
- Added code to load WMF and EMF files (in
progress)
- Fixed: GetDisplay() method was not always
calculating zero padding correctly.
- Improved performance of horizontal and vertical
lines that use line styles.
- Fixed lines drawing 1 pixel offset from the
correct location.
- The Arc method now allows
negative widths and heights
- Added anti-aliasing support (provides smooth
edges for objects being drawn).
- Added .antiAlias
property, when set to True, this will draw anti-aliased versions of
objects where available.
- Added aaPolyline
method
- Added aaRoundRect method
- Added aaBezier method
- Added the following internal methods
(typically the .antiAlias property would be set to True, and these
would be called automatically):
- Added aaLine method
- Added aaEllipse method
- Added aaPolygon method
- Added WuLine method
- Added aaArc method
- Added aaChord method
- Refactored code for clipping and coordinate
calculation across all line methods
- Fixed various offset isses, where shapes were
drawing offset by a single pixel.
- Fixed 45 degree lines drawing an extra pixel on
one end in some cases.
- Added Dist method for returning
the distance from one pixel coordinate to another.
- Added the Pos method to return
the pixel position when given a pixel coordinate and a distance.
- Added a ConstrainCoords method
that provides clipping and coordinate transformation.
- Corrected Polygon outlines, which could drawn 1
pixel short.
- Added anti-aliasing support to the standard
methods when the .antiAlias property is set to
True.
- Added a new AntiAlias example showing
anti-aliases object drawing.
- New thick line drawing algorithm provides improved
accuracy and initial anti-aliasing support (the algorithm for
anti-aliasing thick lines will be improved in future releases).
- Fixed lines potentially missing a pixel in their
center at specific angles and lengths.
Version 2.82 (30 December 2009)
- Fixed Unresolved External on _StringHeight when
compiling in multi DLL mode in Clarion 7.1.
Version 2.81 (21 December 2009)
- Corrected external name for _StringHeight method,
detected by linker in C71.
- Corrected indentation and quotes for Draw-Paint,
Multi-Proj, Embedded cursors support.
Version 2.80 (29 October 2009)
- Fixed: diReadImage was not displaying images that were loaded from
BLOBs as a result of a regression in 2.78 when image caching was added.
- DrawHeader:
- New: ChangeIcon() method allows the icon to be changed at
runtime.
- New: .resizePercentage property allows the resize width of the
bar to be adjusted. By default this is 100, which creates a bar
twice as wide as the current width of the window, allowing the
window size to be increased without having to redraw the bar
frequently. Setting this to 0 always draws the bar the same width as
the window, and values in between allow a balance between
performance and appearance. We don't recommend values above 100,
although there is no limit on the value.
- Improved: Support for 16x16 icons on smaller header bars.
- New: Support for Mike Hanson's resizing template.
Version 2.79 (16 September 2009)
- Fixed: DrawHeader: Template barheight now defaults to 5 in the
template settings
- Fixed: DrawHeader: If the barheight field is blank, then no code is
generated to override the barheight and the object's default height is
used.
- Updated: DrawPaint class to provide additional functionality for
RightReports
Version 2.78 (27 August 2009)
- Fixed: Exports for Multi-DLL applications. Fixes "unresolved
external" errors.
- Added: diImageFromCache method to load an image cached by the call
to diReadImage.
- Added: Enhanced functionality to diReadImage to support caching of
images. Images are cached by default, unless the cache parameter is
passed as 0.
- Added: draw:CacheBufferType data type to hold cached images.
- Improved: Clipping support for redrawing a specific area of the
canvas (dramatically improves performance with animation and other
frequent updates, where only a small area has changed):
- clipRectX long
- clipRectY long
- clipRectW long
- clipRectH long
- clipRect long
- Added: Cache group to store use to cached images for rapid redrawing
and reuse. Uses the draw:CacheBufferType group type to store each cached
image. The maximum number of cached images is determined by the
draw:MAXCACHE equate, which is 1000 by default.
Version 2.77 (14 July 2009)
- Fixed: The Polygon method was ignoring the numVertices parameter for
line only polygons.
- Fixed: The Polygon method not supporting thick line widths for
borders.
- Fixed: Thick line drawing was not always drawing the line widths
correctly.
Version 2.76 (15 May 2009)
- Added: diReadImage now supports loading images directly from BLOBs.
- Added: Updated documentation, dynamic syntax highlight for code
blocks, begun the documentation of the DrawImage methods.
Version 2.75 (6 May 2009)
- Fixed: DrawHeader template was not setting the bottom bar width.
- Fixed: DrawHeader template was ignoring the bottom bar shading if
set to color:none
- Added: a DrawHeader.blurBar property that when set allows the bottom
bar to be faded into the background along it's top edge. This was the
default behaviour with previous version, however the new default is to
draw the bar normally without any fading or shading into the background
along its top edge.
- Added embeds to the DrawHeader initialisation for the Legacy
template change, to allow the settings to be overridden (this
functionality already exists in the ABC template chain).
- Added: New Documentation for DrawImage
- Added: New "HowTo Guides" document (currently a place
holder for
- Added: New menu navigation system for the documentation
- Fixed numerous small errors in the documentation, expanded the
documentation throughout.
- Added: Support for EasyResizeAndSplit with the Draw Headings
template.
Version 2.74 (03 December 2008)
- Added Inited property. Is set in the init method, and kill is only
completed if the inited property is set (reset in kill method).
Version 2.73 (01 December 2008)
- Fixed: DrawPaint disposal and cleanup, fixes the RightReports editor
leaking memory when closed.
- Added: Small Clarion 7 template update.
Version 2.72 (10 November 2008)
- Clarion 7 compatible install.
Version 2.71 (13 October 2008)
- Fixed: Potential GPF in the Draw.Init() method because of invalid
handling of an API return value. This was causing SendTo to GPF when
using certain types of icons under Windows XP (Windows Vista was not
affected).
Version 2.70 (12 September 2008)
- Added: DrawPaint:The user can now
resize and object using any edge of the bounding box.
- Added: New resizing cursors for the above.
- Added: Additional bounds check in LoadIcon
for icons that had invalid header information, that could potentially
cause a GPF.
- Fixed: Error in LoadIcon where the allocated buffer was one byte
smaller than it should have been, causing a potential buffer overflow
with paletted (8 bit) icons where the AND mask of the icon had been
padded onto a DWORD boundary.
Version 2.69 (30 August 2008)
- Fixed: Draw of layers with alpha transparency, where the layer was smaller
than the canvas (baseLayer) and was position away from the origin. Layers
with alpha blending were drawing with the y-coordinate inverted. This same
issue also affected any layer copy done using CopyLayer() where the layer
being copied was using alpha blending.
Version 2.69 (28 August 2008)
- Fixed: Template error that was not exporting GetMonitorInfo and
GetWidowInfo in Multi DLL applications, resulting in an Unresolved External
compile error.
- Added: DrawHeader: Both normal a delayed (late) init splits the
Initialisation code into three sections, with an embed between each:
- Init Draw and DrawImage
- Add template settings code (if the defaults are overrriden)
- Call Display to render the control
- This allows the generated code to be easily overridden on a source
level, or for additional code to be called before or after each stage of
the initialisation
Version 2.68 (22 August 2008)
- Added: Draw.SetDisplayArea().
Limit the area redrawn when calling Display, and provides rapid refreshes
when just a small area has been modified.
- Added: Draw.ResetDisplayArea().
Reset the area being displayed to the default (display the entire image).
- Added: Draw.MonitorFromRect().
Returns a handle to a monitor (display) when passed a rectangular area (for
example if passed the coordinates of a window it would return which monitor
that window is on).
- Added: Draw.GetMonitorInfo().
Returns the information about a particular monitor, including the pixel
size, size of the work area (the area not obscured by the taskbar) etc. The
result is stored in the passed
draw_MONITORINFO group.
- Completed: Draw.GetWindowInfo().
The prototype has changed. This method now returns the information for the
current window. The information is stored in a
draw_WINDOWINFO group.
- Added: In the template. The ability to suppress the export of the draw
object from a data dll.
- Added: Picture display functionality to DrawPaint.
Version 2.67 (02 July 2008)
- Fixed: A GPF in the Draw icon loading where if the icon was loaded from a
resource using WinEvent to get the handle, and the size was specified, and
the icon contained only a 4 bit (16 colour) icon, and was completely
transparent (had no coloured pixels). This resolves an issue in SendTo.
Version 2.66 (03 June 2008)
- Changed: DrawHeader: The control is now populated with the width set to
Full rather than a specific value.
- Fixed: DrawHeader: For a number of the prompts color:black was being
ignored as if it was color:none
- Added: DrawHeader: The Local DrawHeader class override is blank by
default, and unless it it filled in the global setting is used. If the
global setting is blank then the default DrawHeader class is used. This
allows the local setting to be overridden but still use a base class that is
specified globally.
Version 2.65 (03 June 2008)
- Fixed: DrawHeader, the code was not being generated correctly if a
variable was used for the Heading Text and Icon fields in the template.
- Fixed: DrawHeader, if the DrawHeader base class was overridden in the
global settings then the custom based class setting would be ignored and the
default class would be used.
- Added: Draw.Captcha() method, creates a "CAPTHCA" from a string, and
optionally saves the PNG to disk with the file name specified. A CAPTCHA is
a challenge-response mechanism that is intended to differentiate between a
human and a computer. The current implementation is very simple, but will be
expanded.
- Added: Draw.EnumProcessModules() method, which populates and array with
the handles to all of the loaded modules for the current process.
- Added: DrawHeader can now use icons from any module, regardless of which
DLL the icon is actually in.
- Fixed: DrawHeader template not populating the code for the x and y
position of the text and icon.
- Changed: The EnumFont date types did not have the draw: namespace
prepended.
- Changed: Merged two LOGFONT data declarations.
- Added: Module enumeration with the first instance of Draw that
initialised. The handles to all loaded modules are retrieved and can then be
used to load resources from.
- Changed: External function and API prototypes have been moved to the
DrawAPI.clw file.
- Added: SetDisplayArea() method that allows a specific region to be
updated without the entire contents of each layer being composited together
for a display [BETA].
- Added: ResetDisplayArea() method. Clears the SetDisplayArea setting and
allows the entire image to be refreshed when calling Display()
- Fixed: Drawheader: Incorrectly named properties of the class in template
generated code (iconPostionX, iconPositionY and barColor).
- Added: DrawHeader: Bar shading support to the template so that the bar
drawn at the bottom of the header can be shaded between two colours.
Version 2.64 (23 May 2008)
- Fixed: Old Draw Window Headings not being displayed properly because the
old procedure is no longer used (the global option to use the old draw
header template should be enabled until migration to the new template is
complete. See the DrawHeader
documentation).
- Fixed: Function called as a Procedure warning on compile.
- Fixed: Template generating the call to Init() twice which could result
in the GDI device contexts not being created when procedures with Draw
objects where rapidly opened and closed.
- Added: Logging and error checking code to the GDI initialisation, as
well as font rendering.
- Fixed: Copylayer() inverted source and destination calculations. This
could result in the copied section y coordinate being inversed, or the
copied blocks being inverted.
- Added: Entirely new DrawHeader template
- Added: All DrawHeader settabtings exposed on the global template
- Added: DrawHeader template ability to use a different base class
- Added: DrawHeader local template to allow the global settings to be
overridden
- Added: DrawHeader backward compatibility, and an option to use the old
template by ticking the box on the global extension.
- Added: Documented all properties and methods in the DrawPaint Class, see
the DrawPaint documentation.
- New Methods:
- AddItem(),
AlignBottom(),
AlignLeft(),
AlignRight(),
AlignTop(),
CalcStringDims(),
Construct(),
CopyItems(),
DeleteItem(),
Destruct(),
DrawHighlightBox(),
DrawHighlights(),
DrawItems(),
FindParent(),
HideHighlight(),
Init(),
InResizeCorner(),
ItemClicked(),
Kill(),
MakeSameHeight(),
MakeSameSize(),
MakeSameWidth(),
MoveItems(),
PasteItems(),
RedrawHighlightBox(),
Reset(),
ResizeItem(),
SaveHighlightPos(),
SetCanvasSize(),
SetCursor(),
SetGrid(),
SortItems(),
SpreadHorizontally(),
SpreadVertically(),
TakeClickEvent(),
TakeDragEvent(),
TakeDropEvent(),
TakeEvent(),
TakeResizeEvent(),
WithItem().
-
New Properties:
- CanMoveNow, canvasColor, CopyItemQueue,
gridColor,
gridEnabled,
gridStyle,
gridWidth, hDrawFactor,
HighLight,
ItemQueue,
LockParents,
Moving, Resizing, vDrawFactor,
ZoomFactor,
_control,
_DeltaX,
_DeltaY, _highlighted,
_HighlightItems,
_HighlightQueue, _items, _MultiClickCount,
_nextId,
_StartMouseX, _StartMouseY.
- Added: Documented the new DrawHeader class
- Added: Drawheader backward compatibility, the template now allows either
the new or the old DrawHeader to use, and the setting can be set globally
and overridden locally. Migrating to the new template should be transparent
in most cases, except those where custom code has been added to the imported
DrawHeading procedure. This code can now be moved to a custom DrawHeader
class that inherits from the DrawHeader class, or the template can be used
to modify the settings globally, with local overrides available. Both the
old approach and new class based approach can be used in the same
application by selecting the desired option for the particular control, and
setting which should be the default on the global extension.
- Fixed: History documentation links were not working for entries that
were created before the History was split into a separate document
- Added: Documentation for the new DrawHeader class and templates,
migration information, descriptions of the template settings.
- New Methods:
- New Properties:
- displayText, textX,
textY, blurSize,
autoShadow, shadowOffsetX,
shadowOffsetY, shadowColor,
iconName, bgColor,
bgColorEnd, shadeType,
shadeDirection,
highlightPos,
highlightIntensity,
iconHandle, iconX,
iconY, iconSize,
barStartColor, barEndColor,
barHeight.
Version 2.63 (23 April 2008)
- Added: New DrawHeader class. This class completely replaces the old Draw
Header template/procedure:
- The local procedure is no longer required, and does not need to be
imported
- Does not create and destroy a Draw object each time the control needs to
be drawn
- Full control over the object setting using the DrawHeader object
- More properties exposed at the template level (global template settings
coming soon)
- Fast, intelligent built in resizing. Add the SV resizing extension and
the control will handle all resizing. No hand coded needed.
- Shade background support,
- No icon control is needed or created, loading icons from disk and
resource is handled internally and directly.
- DrawHeader is based on Draw and hence everything supported in Draw is
supported in DrawHeader - making it fully customisable.
- Automatic icon size selection based on the control size
- Full backward compatibility - existing controls continue to work and
provide upgraded functionality
- New shaded
- Automatic positioning if the height of the control changes (support for
vertical resizing)
- Automatically uses the correct icon if the height of the control
changes.
- Text is centred in the control based on the font sized used and the
height of the bottom bar (if any).
- Fixed: Multi-DLL compile error with new methods.
- Added: Lighten and Darken example code to the DrawImage example, as well
as a demonstration of the two supported modes for Greyscale conversion.
- Added: Built in icon loading from resource - WinEvent is no longer
needed for this functionality.
- Added: GetIconHandle
method to load an icon using the Windows API, which supports loading from
file or resource (this is done automatically, the correct source is
located), as well as loading any size icon and resizing icons to the
specified size if the specified size does not exist.
Version 2.62 (16 April 2008)
- Added some new fields to the ItemQueue in the DrawPaint class: Clipped, FitWidth and FitHeight.
Version 2.61 (13 February 2008)
- Added: Support for both FreeImage 3.10 and later and previous
releases. In FreeImage prior to 3.10 the topdown parameter in
FreeImage_ConvertFromRawBits and FreeImage_ConvertToRawBits was being
handled in reverse, and in 3.10 this was fixed - however this resulted
in all images loaded by the DrawImage functions being upside down when
the DLL from 3.10 or newer was used. This has now been handled
internally so that both old and new versions of the DLL are supported.
- Added: New DrawImage example that shows some of the basic DrawImage
functionality. This will be expanded, along with the DrawImage support
itself. Also a DrawPaint example will be available for future versions.
- Fixed: Unresolved Externals when compiling in Multi-DLL mode
- Major documentation cleanup and reorganisation. Documentation is now
split into logical sections, and the documents have been moved to XHTML
and all formatting is CSS based.
Version 2.60 (25 January 2008)
- Added: GreyScale() method to convert a section of the control, or any
layer, to Grayscale (256 shades of gray). Supports both linear conversion
and perceptual conversion (which used a good heuristic to preserve the
perceptual brightness that the human eye would see).
- Fixed: Image() method loading 256 colour (8bit) bitmaps incorrectly, the
wrong bytes were being assigned to the RGB components and the byte order was
shifted by one resulting in a "corrupted" image where the colours were
incorrect.
New Documentation for the DrawPaint Class (work in
progress, will be completely shortly)
New Document for DrawImage class (coming soon)- Improved integration for FreeImage
- Included FreeImage in the installer
- Complete revamp the documentation, added missing methods, split the
documentation into multiple documents and improved navigation and usability.
There is now a separate Class Reference, as well as a separate Layers
reference, FAQ, History etc.
- Added: PointInPieSlice() method - returns whether a point (x, y
coordinate) is within the specific Pie Slice shape (a segment of an
Ellipse). Typically used after drawing a pie chart using the PieSlice()
method to check whether a user clicked within one of the drawn slices, and
if so which slice was clicked in.
- Added: Additional BestFit() method that takes Longs instead of Ulong.
This polymorphic method is just a wrapper for BestFit() and included for
convenience.
Version 2.59 (06 December 2007)
- Added: New features to the DrawPaint class for RightReports.
Version 2.58 (30 October 2007)
- Fixed: 256 color bitmaps had an error in the bitmap header that set the
size to 1 bytes smaller than the actual file size, which could cause a very
small number of applications to not open the produced BMP. The only applies
to 256 color BMPs being written to disk by writing the BLOB for the image
control directly to disk.
Version 2.57 (25 October 2007)
- Added: Option in the global template to disable
resizing for the DrawHeading control template.
- Added: The docs and example for the Barcode support (PDF 417) now
reflect the fact that the barcode function returns a value that should be
checked.
Version 2.56 (25 October 2007)
- Fixed: GPF when starting threads very rapidly with
Draw controls (applies primarily to DrawHeadings). All static variables are
now threaded.
Version 2.55 (18 September 2007)
- Added: Support for resizing when using the DrawHeader
template. Please note that this has changed the DrawMakeHeadings procedure
prototype and if you are using this template you need to import the new
procedure into your application using the template utility (or by importing
the TXA file).
Important: When upgrading to this version of
Draw please ensure you update your DrawMakeHeadings procedure by running the
template utility.
Version 2.53 (23 July 2007)
- Fixed: Template issue causing a compile error in
Multi-DLL projects and projects not using DrawPaint or DrawImage.
Version 2.52 (16 July 2007)
- Added support for Clarion FreeImage (free)
- Integrated Clarion FreeImage functions
- New DrawPaint class for creating persistent objects,
allowing the user to select and manipulate the objects (picking) etc. This is an
entirely new class that provides a whole new set of functionality (Capesoft
WriteReports is an example of the type of functionality that this can provide).
Full documentation will be included in future releases of Draw, along with
example applications.
- Fixed a bug when using FreeImage support in the root DLL
and not enabling it in the application. This only applies to Multi-DLL projects
that use the FreeImage support in some apps and not others that import from an
app that has a different setting. This should not affect any current Draw users
as it only applies to a pre-release version of Draw.
Version 2.41 (29 March 2007)
- Update the Multi-DLL support in the template
- New Multi-DLL example
- Add a section to the document of using Draw (and Progress) in multi-DLL
applications.
Version 2.41 (29 March 2007)
- Update the Multi-DLL support in the template
- New Multi-DLL example
- Add a section to the document of using Draw (and Progress) in multi-DLL
applications.
Version 2.40 (14 November 2006)
- New property Draw.mirrorText allows the text to be flipped back
to the right direction when using RTL text rendering and the window order
is set to Right-To-Left.
- Fixed new font rendering:
- Coordinate system was off by 1 pixel
- ErrorTrap was being
called even though the SetTextAlign function was succeeding.
- New font rendering using the .wholeString property now supports 90 degree text
(rotation by an arbitrary angle to be added in a future release).
- Fixed problems with the new StrHeight method when used with the WholeString font
rendering.
- Automatic directional rendering of Hebrew and Arabic characters when used in
conjunction with the Window or Control RTL ordering.
- Fixed a bug when using the Draw header template with the Legacy (Clarion) template
chain and the Window Resize extension that produced compile errors
- Correct documentation regarding the 3D datatypes Point2D, Point3D, Vector3D.
Data type names had not been updated in the documentation.
- New support for MultiDLL applications, simplified to work simply by ticking the
checkbox on the global extension to support using Draw in a DLL.
- New MultiDLL support in the template to assist Draw and Progress use in Multi
DLL application
- Changed MouseX and MouseY to handle controls with scrollbars where the Draw image
is larger than the control. Returns theDraw. MouseX() and Draw.MouseY() in
pixels relative to the origin (top, left hand corner) of the Draw image,
regardless of where it is scrolled or not.
Version 2.30 (29 September 2006)
- Fixed the unhandled case of an equals sign in BufferFont, equals signs where
drawing as minus signs (a single bar instead of two). This resolved an
equals
sign being incorrectly displayed by the .Show() method.
- Template tweaks to support AnyFont for the WindowHeading control template.
- New string support for Complex Script Languages such as Arabic and Japanese,
new font rendering properties and options, Right To Left reading order.
- Automatic whole string rendering of Complex Script languages.
- Automatic setting of Right-To-Left reading order for Hebrew and Arabic.
- Support for additional character sets, see the new document for the .fontCharset
property and the new Show() docs.
- Updated Font related entries in the docs - see Show() method for more information.
- Add .useUnicode, .renderWholeStrings, .textAlignRTL and .ansiToUnicode properties
to the class (.useUnicode and .ansiToUnicode to be exposed in the next release).
- Added initial support for Unicode, ANSI to Unicode conversion (see above, to be
exposed in the next release).
- Additional documentation updated, more improved consistency, more links etc.
- New .Curve method supports smooth curve drawing between a set of points and uses the Draw
.curveSmoothness and Draw.curveTension properties to allow the drawing to
the modified. Uses Hermite curve interpolation.
- New ._ShowFull method
- New ._StringWidth and ._StringHeight methods
- Fixed a bug in the .WritePNG method that could result in the current layer being
written to a PNG rather than the entire image.
- Fixed incorrect drawing of double shaded boxes when the intensity parameter was
passed as zero.
Version 2.26 (10 July 2006)
- Changed the WriteBmp, WritePng,
WriteLayerBmp and WriteLayerPng methods
so that if the file exists it is deleted and a new file created for writing
the image to.
- Fixed the Barcode method
to handle barcodes where the number of columns in the barcode is a multiple
of 8 (this was producing barcodes where each line "wrapped" onto the following and the barcode looked skewed to the side).
- Fixed drawing of Pie Slices
where the chord of the arc that forms the outside of the slice had a width
or height of zero (these were drawing as triangles rather than with curved
arc edges).
- Uploaded missing images for the docs (HSV and RGB images).
Version 2.25 (24 November 2005)
- Fixes and improvements for all arc related methods (Arc, _ThickArc, Chord, Pieslice,
ShadeArcBand, HalfEllipse etc.)
- Template changes for using Draw in multi DLL projects (Added "Export Draw Class
from this DLL" option and "Use Draw that is exported in another DLL" option).
- Fixed StrLen method for vertical strings, fixed string first character positioning
- Fixed ShadeArcBand drawing one pixel out
- Fixed Pieslice drawing the "drop" section inverted for 3D pie slices.
- Documented PDF417 barcode functions and DLL.
- Grabscreen method now fully supports all options - it no longer grabs the entire
screen, instead it now gets the specified section of the screen and places
it at the passed coordinates.
Version 2.20 (17 November 2005)
- Added a Barcode
method which draws PDF417 compatible barcode when passed a string containing
the data for the barcode.
- Fixed drawing of
shaded boxes a single pixel wide or high, where the pen width is set to
greater than 1 (some types of boxes used the penwidth for drawing).
- Fixed StrLen
method (was returning the incorrect pixel length for strings).
- Fixed font underlining (also now
faster and uses no extra memory for underlined styles).
- Added support for loading
icons from resources as well as disk for the LoadIcon
method (Requires a handle to the icon resource, it is recommended that WinEvent be used to obtain the handle by calling the WinEvent function ds_GetHIcon()).
- Added support for all icon color
formats for loading icons from resource.
- LoadIcon
supports loading all icon formats from disk with the exception of 4 bit and
24 bit icons from disk (all icon formats for icon resource are supported.
NOTE: Loading icons from resource requires a handle to the icon resource.
Therefore WinEvent is recommended for loading icons from resources.).
- Fixed thick line clipping when the line ran along the
edge of the drawing area.
- Improved thick line clipping to work on a per pixel
basis.
- Fix problems on reports in Clarion 6.2, where setting prop:pixels and then
restoring the value changes the value of prop:thous.
- Fixed very small pie slices.
- Added automatic bit depth detection for loading icons
from resources.
- Corrected circles (Ellipse, _ThickEllipse, LinearEllipse, ShadeEllipse,
HalfEllipse and Sphere) drawing 1 pixels left and up (many thanks to Brian
Wigal for reporting this bug!).
- Corrected spelling and typographical errors in documentation.
- New HSV/RGB conversion methods - HsvToRgb, RgbToHsv,
LightenColor, DarkenColor,
Saturate and Desaturate.
- Add Min and Max methods -each take up to 10 parameters are return the minimum or
maximum values thereof.
Version 2.15 (08 September 2005)
- Changed the HalfEllipse
method to draw both half Ellipses and Circles (only circles were supported).
- Change the way the DrawStore.tmp
file is created. This is a dummy file used by Draw. Each instance of Draw
opens this file in Share mode, the file is never read or written to. The file
is now created in the system temp directory, and the full path is used for
the file name, this avoids problems when the system{prop:datapath} is set,
and the file cannot be located when the file name is relative.
- Added an optional parameter to
Polygon and ShadePolygon
to allow a number of vertices to be specified, as well as the default of using
all entries in the array for the vertices.
- Added support for shading to the
HalfEllipse method, currently it supports linear
shading, future versions will support other shading types.
- More updates to the docs, added
more detail for methods such as Polygon and ShadePolygon,
added new parameter lists and examples, as well as new style (parameters and
example in tables), generally improved consistency, detail and layout.
- Fixed bug in the GetImagePixel
method that returned the wrong color for the last row of pixels in the image.
- Added a PointInPolygon
method that returns whether a coordinate passed is inside a defined polygon
or not. This can be used to determine whether a user clicked in any area in
the image control that can be defined by a polygon, or whether a user clicked
on a particular polygon in the Draw control.
- Added SetFontMode
to allow the font rendering mode to be set (anti-aliased, cleartype, non anti-aliased
etc.).
- Added ImageFromBuffer
- writes from a buffer that contains RGB data to a layer, allows the position
of the image to be specified, along with the ability to clip the image and
tile it both horizontally and vertically. Tiling in either direction can be
specified independently.
- Added a BestFit
method that returns the best proportional scaling when passed an existing
width and height and the dimension that must be fit within.
- Added a ClarionToRGB
method that converts a standard Clarion BGR color to an RGB color.
- Added a GetLastError
function (not a member of the draw class, so it can be called anywhere in
an app without a Draw object). This returns the last Windows API error code.
This code can be passed to the Draw FormatMessage
method, which produces a Clarion string containing the error message.
- Added a ToClipboard function that copies the
Draw image to the clipboard. This function copies the visible contents of
the control to the clipboard (so hidden layers etc. are ignored). The image
is copied to the clipboard as a bitmap.
- When resizing and retaining the data, certain sizes could cause a GPF. This
GPF was in the ResizeLayer method when copying
the data from the old layer to the new layer, where the new layer was significantly
smaller than the old one and the zero padding changed.
- Added support 256 color icons to the LoadIcon()
method, fixed all issues with paletted icon transparency. The next release
will add support for all other icon formats (1,2 and 4 bit paletted icons,
as well as 16 and 24 bit icons). Currently both 8 bit (256 color) and 32 bit
icons are supported. Windows XP style 32 bit support the full 8 bit alpha
channel for transparency.
Version 2.14 (28 February 2005)
- Fixed
GPF in the Blank() method when blanking the canvas to a color (rather than
black or white) while the penWidth property of the class was greater than
1.
Version 2.13 (10 January 2005)
- Fixed
template error in 2.12
- Added template option to allow Draw to be easily included in a DLL in multi DLL
projects
- Added a DrawDLLMode define that the template automatically adds to the project
defines (Clarion 5 needs to have this done manually). This allows the Draw
to be compiled into a DLL and used from the DLL rather than compiling the
Draw.clw file into every app in a multi DLL project. This define supports
both Draw and Progress. See the What's New section for more information.
- Updated template to be consistent with new CapeSoft template style specification
- New AlphaCopy
method improves performance, fixes alpha errors and a possible GPF.
- Added code to automatically create alpha channels when drawing text to a layer
with an active alpha layer (still in testing)
- New DrawHeader
template which uses a single layer instead of multiple layers and supports
font anti aliasing
- Numerous updates to documentation
- Updated all example apps, totally
revamped the main example app with numerous useful features, such as drop
shadows and pie slices.
- Added HalfEllipse() method
- Fixed problems with Shaded object when a pen width and style had been specified.
Version 2.12 (05 January 2005)
- Internal release (not for public
consumption).
Version 2.11 (04 January 2005)
- Added
font anti-aliasing and rendering options (See SetFontMode).
- Added methods for enumerating all font on the system and populating a queue
(See EnumFonts)
- Added a number of new internal Draw properties and equates for fonts.
- Fixed rendering issues with some fonts that truncated some letters.
- New examples, with numerous feature additions and more useful code (such as demonstrating
drop shadows etc.).
- Added GetPixel method as an alternative name to GetImagePixel().
Version 2.10 (30 November 2004)
- Fixed
clipping issues with boxes.
- Fixed a small memory leak where a Draw could exit without releasing GDI handles.
- Documented the numerous new methods that have been added, such as shaded ellipses and spheres
- Updated Draw header template to allow all settings to be modified on the properties
page and to allow variables to be used as well as literal values
- New DrawHeader utility template for adding the DrawHeading procedure for both
ABC and legacy.
- New Demo and Example applications, example application have been cleaned up and
demonstrate the features
- DrawHeadings now allows icons in the current app to be specified, as well as icons
in the application directory. See the Dynamic Header Template section for more information.
- New functions:
Version 2.09 (21 April 2004)
- A number of internal fixes, an
improved template and a large number of new features, which will be fully
documented in the 2.10 update.
- New extension added to the template
that allows Draw to dynamically create header with drop shadowed text on windows,
simply drop the template on the window and enter text in the string (or even
leave it blank which will use the window title). See the Dynamic
Header Template section.
Version 2.08 (14 November 2003)
- Fixed GPF in Clarion 6 when writing to PNGs (threading bug).
Version 2.07 (04 November 2003)
- Interim release, fixes Duplicate label warnings with Clarion 6. Draw equates
now have the 'Draw:' namespace identifier prepended to them.
Version 2.06 (20 August 2003)
- New Cylinder() method, and an
additional cylinder method that allows new types of shading on cylinders.
- Fixed GPFs caused by accessing the 0th element of arrays.
Version 2.05 (31 July 2003)
- Only a single DrawStore.tmp file is created in the current
Windows temp directory regardless of the number of programs using Draw that
are run. (this file is always empty, and is never written to).
- Changed Windows Registry type equates to avoid duplicate
label warnings with C6 EA 5.1.
- This release is the basic version required for CapeSoft
Progress.
Version 2.04 (29 July 2003)
- Fonts: Fixed clipping, Font point sizes are now exact (previously
they were an estimate that occasionally was somewhat inaccurate), Fixed font
positioning, both vertical and horizontal. Note: You may notice that
your fonts now display smaller than they were previously, the display size
is now correct and uses the current screen resolution to calculate the exact
pixel height of fonts.
- ColorRange() Method - returns
a pair of colors on a range, given the start and end colors and the distance
between them
- Added new example app (simpler and cleaner)
- Fixed shaded boxes that were 1 pixel too small when draw
the same size as a layer.
- WriteBMP() and WritePNG()
now correctly write the display buffer to disk rather than the current layer
- Added WriteLayerPNG() and WriteLayerBMP()
to write just the current layer to disk.
- Fixed a bug in the WriteBMP() method
that produced unreadable BMP's with large images by truncating the last byte.
Version 2.03
- Another massive update of the documentation, added examples and screen shots
to all methods, added an info section with further useful information for
each method, and links to related methods. Examples are now actual useful
pieces of code that can simply be dropped in an app and compiled.
- Fixed penStyle applying to shaded objects.
- Fixed Highlight() method drawing off by a pixel
(vertical).
- Image() method documentation updated and expanded
- Image() method supports tiling an image across a layer
- Polygons draw correctly when the current pen color is color:none
- The Polygon() Method has been modified, all the workarounds
were removed and the original algorithm revised to work with all cases.
- Polygons are now faster as well as being consistent (no misdrawn pixels).
- Corrected misdrawn pixels at the end of very thin horizontal cylinders.
- ShadedLine() method shades a line between two colors
in any direction (not just vertical or horizontal).
- Added ShadeEllipse() method
- Added ColorRange() method which determines start
and end colors at two points within a color range
- Added versioning to the Draw template, templates which are dependant on
Draw (such as Progress) now check for a sufficiently new version of Draw.
- Fixed problem with True Type fonts not displaying when ClearType was enabled
under WindowsXP
- Changed layer display order, so that the first layer in the display order
list is the bottom layer, which means that each new layer created is created
on the top of the layer "stack".
- Fixed layers smaller than the the image control being draw from the bottom
left hand corner rather than the top left hand corner.
Version 2.02
- Fixed a bug with with layer copying, which incorrectly positioned layers
that were smaller than the baseLayer.
Version 2.01
- Added the call to UnLoadLib() for zlib in the Kill()
method.
- Corrected an error in CopyLayer() that resulted
in the last scanline being skipped.
- Corrected clipping for the HighLight() method (off
by 1 pixel)
- Corrected small bug in the BufferFont() internal method. The bug did not
affect any functionality.
Version 2.00 (Gold)
- Draw has gone gold!
- Added Layers, layer transparency, layer alpha channels,
Hidden layers and layer drawing methods. See the section on Layers
for more information.
- Added the GetWindowsColors() method to retrieve
the current colors for the Windows interface.
- Added a layer data type and a layer array to store
layers.
- Major revamp of the documentation, neatened and cleaned up existing sections,
added a large number of new sections and clarified some of the more obscure
sections.
- Added a layerOrder array to store the layer order independently of the layer
storage order.
- Added the following methods for manipulating layers:
Draw.AddAlpha | Add an alpha channel to a layer |
Draw.AlphaCopy | Copy a block of pixels from one layer to another using
alpha transparency. |
Draw.CopyLayer | Copy a block of pixels from one layer to another. |
Draw.HideLayer | Set a layer to hidden. |
Draw.IndexTransparency | Set the index transparency of the layer. |
Draw.InitLayer | Initialise a new layer |
Draw.MoveLayer | Change a layer's display order. |
Draw.ResizeLayer | Resize a specific layer. |
Draw.SetMode | Set the display mode. |
Draw.Showlayer | Set a layer to be shown when Display() is called. |
Draw.SwapLayers | Swap two slayer's display order. |
Draw.ToAlpha | Copy one RGB channel from one layer to another. |
Draw.WithLayer | Activate a layer for drawing to. |
- A number of bug fixes and large number of improvements have gone into this
release.
- Cleanup up and corrected the template and template documentation.
- Added new examples, cleaned up old examples.
- Modified Init() and Kill() to allow the object to be dynamically created
and Init() and Kill() called multiple times to re-initialise the object.
- Added a destructor to the class.
- Added a large number of tweaks and improvements, including insuring that
old Draw programs continue to work flawlessly even though they now use layers.
- All example apps have been redone and a number of new examples added - see
the examples section.
- Both libpng.dll and zlib.dll are correctly loaded at runtime, if the files
are missing Draw handles the error.
Version 1.0 Beta 11a
- Added LoadIcon method to allow Windows icons (.ICO
files) to be loaded (currently only supports WindowsXP 32 icons)
- Changed the Show method, if the font color was less
than zero, the text would simply not be drawn, now the font color is set to
black if it is less than zero.
- Added a HighLight method that allows a color to
be XOR'd to turn a highlight effect on and off over an area.
Version 1.0 Beta 11
- Added Methods for 3D calculations (All method can be used for 2D calculations):
- PNGs produced by Draw are now compatible with all compliant PNG decoders.
- Draw now loads any DLLs at runtime (relevant for writing PNGs).
- Major revamp of documentation.
- The Image() method now supports a transparency color
for BMP's.
- New data types for 3D calculations:
Version 1.0 Beta 10
- A huge number of fixes and improvements since the last public release (Beta
7) too many to list individually.
- Fixed all polygon drawing issues, the polygon method is now robust and a
little faster too.
- A whole pile of changes to the font handling, mostly bug fixes but some
optimization issues too.
- Added Draw.fontZoom property to allow the fonts to be globally resized for
high resolution reports and such.
- The Arc() method has been tweaked and improved, and a few rounding issues
tidied up.
- 256 colour drawing has been implemented. This should be particularly useful
if the image needs to be sent across a network, or if the 24 bit version is
bloating a report excessively. See the Init256() method
for details on using 256 colour Draw images.
- Resizing supports 256 colour bitmaps, and zero padding is now correctly
calculated.
- Lots of code cleanup work has been done, so Draw should be cleaner and more
consistent internally.
- Added a SwapBuffers() method that allows any bitmap buffer to be written
to the image control.
Version 1.0 Beta 7
- Added global extension to allow PNG support to be disabled - with no PNG
support it is not necessary to ship the zlib.dll file.
- Documented all the features of the Blank() method.
- Added patterned fills and the Draw Pattern Maker - pattern.exe, which allows
you to create your own patterned fills with a graphical interface.
- Added the SetFill() method to allow patterned fills
to be used.
- Fixed rounding error with MouseY() method.
- The Image() method did not support all the documented
features. This has now been corrected.
- The Image() method now uses the top left hand corner
as the origin, the same as all the other Draw methods
- Fixed incorrect drawing of 45 degree lines that were more than 1 pixel thick
- Alphabetised class methods in documentation and added new table for easier
access.
- Fixed SetFontColor() method that was swapping
R and G color components (Clarion colors treated as RGB instead of BGR)
- Numerous fixes to the Arc() method, particularly with
thick arcs.
- Fixed vertical font clipping.
- Character font clipping implemented. Clips at the character level, so a
character drawing off the edge of the control will only draw the section within
the control and won't wrap. Previously the character was either clipped or
not.
- SetPenStyle() handles incorrect style options
by setting the style to the default.
- Blurry fonts when black font was drawn on white background fixed.
- Fixed vertical text not printing is the font color was < 0
- Added a fontStyle property to the class, see the Show()
method for more details.
- Text had a slight vertical alignment error, this has been corrected.
Version 1.0 Beta 6
- Beta 5 was an incremental release and the documentation was not changed.
- Fixed issues with 45 degree lines (pixel popping).
- Optimised 45 Degree lines.
- Fixed boundary and clipping issues.
- Fixed an error in the line algorithm that sometimes drew lines 1 pixel too
short.
- Fixed the Blank method, when clearing to colors other
than black or white it would not clear the bottom row of pixels.
- Fixed Polygon drawing and filling.
- Horizontal Doubled shaded cylinders erroneously treated Clarion colors as
RGB instead of BGR.
- Fixed the Show method, text now draws in the correct
position.
- Fixed the StrLen method, which returned the number
of bytes taken up by the individual color components rather than the pixel
length of the string.
- Changed the WriteBMP method so that it is not necessary
to have called Display at least once before writing
to a BMP file.
Version 1.0 beta 4
- Changed the coordinate system to be more consistent across all draw methods,
(1,1) is the top left corner (width, height) is the bottom right.
- Full thick line support for chords and arcs.
- Dramatically improved clipping.
- Full support for thick lines with pen styles (Clarion does not support this).
- Added Resize() method to allow the image buffer to
be resized dynamically.
- Added StrLen() method to return the number of pixels
any string will take up.
- Added GetDisplay() method to allow the data in
the control to be copied back to the Draw buffer.
- Added GetDevicePixel() method to get the color
of any pixel on the screen.
- Added GetImagePixel() method to get the color
of any pixel in the Draw control.
- Added ShadeLine() method which allows horizontal
and vertical lines to be shaded from one color to another.
- Added SetPenWidth() method to allow the penwidth
member data to be set.
- Changed Image() method to allow the Draw buffer to
be resized dynamically.
- Added ResizeControl() method to allow the control
to be resized dynamically.
Version 1.0 beta 3
Version 1.0 beta 2
- Full Support for thick lines
- Full support for pen styles (added SetPenstyle()
method)
- Supports thick lined circles and ellipses (Clarion doesn't)
- Does not support filled chords
- Fixed bug which drew vertical lines in the incorrect colour
- Fixed GPF (General Protection Fault) on close with ABC
- Blank() method now clears to any colour
- GrabScreen() Method added to get a screen capture
- Resolved numerous small bugs and increased some methods speed
- All shaded cylinders and boxes now draw correctly in all directions
- Corrected cylinder lengths (cylinders would draw slightly too long)
- Updated demo apps for ABC and legacy.
Version 1.0 beta 1: Released
- does not currently support thick lines (except vertical and horizontal)
- does not support filled chords
- does not support pen styles