changeset 26:fa34113bf4be

Path
author Frank Benoit <benoit@tionex.de>
date Sun, 27 Jan 2008 23:29:42 +0100
parents d6fa61ac6912
children 39834037712c
files dwt/graphics/Path.d dwt/graphics/Pattern.d dwt/internal/gdip/Gdip.d
diffstat 3 files changed, 45 insertions(+), 38 deletions(-) [+]
line wrap: on
line diff
--- a/dwt/graphics/Path.d	Sun Jan 27 23:17:22 2008 +0100
+++ b/dwt/graphics/Path.d	Sun Jan 27 23:29:42 2008 +0100
@@ -7,26 +7,29 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ * Port to the D programming language:
+ *     Frank Benoit <benoit@tionex.de>
  *******************************************************************************/
 module dwt.graphics.Path;
 
 import dwt.internal.gdip.Gdip;
 
-//PORTING_TYPE
-class Path{
-    Gdip.GraphicsPath* handle;
-    bool isDisposed();
-}
-
-/++
 import dwt.DWT;
 import dwt.DWTError;
 import dwt.DWTException;
 import dwt.internal.gdip.Gdip;
-import dwt.internal.gdip.PointF;
-import dwt.internal.gdip.RectF;
 import dwt.internal.win32.OS;
 
+import dwt.graphics.Resource;
+import dwt.graphics.Device;
+import dwt.graphics.Font;
+import dwt.graphics.GC;
+import dwt.graphics.GCData;
+import dwt.graphics.PathData;
+
+import dwt.dwthelper.System;
+import tango.text.convert.Format;
+
 /**
  * Instances of this class represent paths through the two-dimensional
  * coordinate system. Paths do not have to be continuous, and can be
@@ -44,7 +47,7 @@
  *
  * @since 3.1
  */
-public class Path extends Resource {
+public class Path : Resource {
 
     /**
      * the OS resource for the Path
@@ -56,9 +59,9 @@
      * platforms and should never be accessed from application code.
      * </p>
      */
-    public int handle;
+    public Gdip.GraphicsPath* handle;
 
-    PointF currentPoint = new PointF(), startPoint = new PointF();
+    Gdip.PointF currentPoint, startPoint;
 
 /**
  * Constructs a new empty Path.
@@ -82,13 +85,13 @@
  *
  * @see #dispose()
  */
-public Path (Device device) {
+public this (Device device) {
     if (device is null) device = Device.getDevice();
     if (device is null) DWT.error(DWT.ERROR_NULL_ARGUMENT);
     this.device = device;
     device.checkGDIP();
     handle = Gdip.GraphicsPath_new(Gdip.FillModeAlternate);
-    if (handle is 0) DWT.error(DWT.ERROR_NO_HANDLES);
+    if (handle is null) DWT.error(DWT.ERROR_NO_HANDLES);
     if (device.tracking) device.new_Object(this);
 }
 
@@ -135,10 +138,10 @@
     if (width is height) {
         Gdip.GraphicsPath_AddArc(handle, x, y, width, height, -startAngle, -arcAngle);
     } else {
-        int path = Gdip.GraphicsPath_new(Gdip.FillModeAlternate);
-        if (path is 0) DWT.error(DWT.ERROR_NO_HANDLES);
-        int matrix = Gdip.Matrix_new(width, 0, 0, height, x, y);
-        if (matrix is 0) DWT.error(DWT.ERROR_NO_HANDLES);
+        auto path = Gdip.GraphicsPath_new(Gdip.FillModeAlternate);
+        if (path is null) DWT.error(DWT.ERROR_NO_HANDLES);
+        auto matrix = Gdip.Matrix_new(width, 0, 0, height, x, y);
+        if (matrix is null) DWT.error(DWT.ERROR_NO_HANDLES);
         Gdip.GraphicsPath_AddArc(path, 0, 0, 1, 1, -startAngle, -arcAngle);
         Gdip.GraphicsPath_Transform(path, matrix);
         Gdip.GraphicsPath_AddPath(handle, path, true);
@@ -185,12 +188,12 @@
  */
 public void addRectangle(float x, float y, float width, float height) {
     if (isDisposed()) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED);
-    RectF rect = new RectF();
+    Gdip.RectF rect;
     rect.X = x;
     rect.Y = y;
     rect.Width = width;
     rect.Height = height;
-    Gdip.GraphicsPath_AddRectangle(handle, rect);
+    Gdip.GraphicsPath_AddRectangle(handle, &rect);
     currentPoint.X = x;
     currentPoint.Y = y;
 }
@@ -212,23 +215,23 @@
  *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
  * </ul>
  */
-public void addString(String string, float x, float y, Font font) {
+public void addString(char[] string, float x, float y, Font font) {
     if (isDisposed()) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED);
     if (font is null) DWT.error(DWT.ERROR_NULL_ARGUMENT);
     if (font.isDisposed()) DWT.error(DWT.ERROR_INVALID_ARGUMENT);
-    int length = string.length();
-    char[] buffer = new char[length];
-    string.getChars(0, length, buffer, 0);
-    int hDC = device.internal_new_GC(null);
-    int gdipFont = GC.createGdipFont(hDC, font.handle);
-    PointF point = new PointF();
+    wchar[] wstr = StrToWCHARs( string );
+    wchar* buffer = wstr.ptr;
+    int length = wstr.length;
+    auto hDC = device.internal_new_GC(null);
+    auto gdipFont = GC.createGdipFont(hDC, font.handle);
+    Gdip.PointF point;
     point.X = x - (Gdip.Font_GetSize(gdipFont) / 6);
     point.Y = y;
-    int family = Gdip.FontFamily_new();
+    auto family = Gdip.FontFamily_new();
     Gdip.Font_GetFamily(gdipFont, family);
     int style = Gdip.Font_GetStyle(gdipFont);
     float size = Gdip.Font_GetSize(gdipFont);
-    Gdip.GraphicsPath_AddString(handle, buffer, length, family, style, size, point, 0);
+    Gdip.GraphicsPath_AddString(handle, buffer, length, family, style, size, point, null);
     Gdip.GraphicsPath_GetLastPoint(handle, currentPoint);
     Gdip.FontFamily_delete(family);
     Gdip.Font_delete(gdipFont);
@@ -323,10 +326,10 @@
  * they allocate.
  */
 public void dispose() {
-    if (handle is 0) return;
+    if (handle is null) return;
     if (device.isDisposed()) return;
     Gdip.GraphicsPath_delete(handle);
-    handle = 0;
+    handle = null;
     if (device.tracking) device.dispose_Object(this);
     device = null;
 }
@@ -350,8 +353,8 @@
     if (isDisposed()) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED);
     if (bounds is null) DWT.error(DWT.ERROR_NULL_ARGUMENT);
     if (bounds.length < 4) DWT.error(DWT.ERROR_INVALID_ARGUMENT);
-    RectF rect = new RectF();
-    Gdip.GraphicsPath_GetBounds(handle, rect, 0, 0);
+    Gdip.RectF rect;
+    Gdip.GraphicsPath_GetBounds(handle, rect, null, null);
     bounds[0] = rect.X;
     bounds[1] = rect.Y;
     bounds[2] = rect.Width;
@@ -397,7 +400,7 @@
     byte[] gdipTypes = new byte[count];
     float[] points = new float[count * 2];
     Gdip.GraphicsPath_GetPathTypes(handle, gdipTypes, count);
-    Gdip.GraphicsPath_GetPathPoints(handle, points, count);
+    Gdip.GraphicsPath_GetPathPoints(handle, points.ptr, count);
     byte[] types = new byte[count * 2];
     int index = 0, typesIndex = 0;
     while (index < count) {
@@ -465,7 +468,7 @@
  * @return <code>true</code> when the Path is disposed, and <code>false</code> otherwise
  */
 public bool isDisposed() {
-    return handle is 0;
+    return handle is null;
 }
 
 /**
@@ -515,10 +518,9 @@
  *
  * @return a string representation of the receiver
  */
-public String toString() {
+public char[] toString() {
     if (isDisposed()) return "Path {*DISPOSED*}";
-    return "Path {" + handle + "}";
+    return Format( "Path {{{}}", handle );
 }
 
 }
-++/
\ No newline at end of file
--- a/dwt/graphics/Pattern.d	Sun Jan 27 23:17:22 2008 +0100
+++ b/dwt/graphics/Pattern.d	Sun Jan 27 23:29:42 2008 +0100
@@ -7,6 +7,8 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ * Port to the D programming language:
+ *     Frank Benoit <benoit@tionex.de>
  *******************************************************************************/
 module dwt.graphics.Pattern;
 
--- a/dwt/internal/gdip/Gdip.d	Sun Jan 27 23:17:22 2008 +0100
+++ b/dwt/internal/gdip/Gdip.d	Sun Jan 27 23:29:42 2008 +0100
@@ -393,6 +393,9 @@
         int StringFormat_SetFormatFlags(StringFormat* format, int flags);
         int StringFormat_SetTabStops(StringFormat* format, float firstTabOffset, int count, float* tabStops);
 
+        FontFamily* FontFamily_new();
+        void FontFamily_delete(FontFamily* family);
+        int FontFamily_GetFamilyName(FontFamily* family, wchar* name, wchar language);
     }