| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" | |
| "http://www.w3.org/TR/html4/loose.dtd"> | |
| <html> | |
| <head> | |
| <meta http-equiv="Content-Type" | |
| content="text/html; charset=us-ascii"> | |
| <title>DRL Java 2D*</title> | |
| <link href="../harmony.css" | |
| rel="stylesheet" | |
| type="text/css"> | |
| </head> | |
| <body> | |
| <h1 align="center"><a name="top"></a>DRL Java 2D*</h1> | |
| <p class="TOCHeading"><a href="#Revision_History">Revision | |
| History</a></p> | |
| <p class="TOCHeading"><a href= | |
| "#Disclaimer_and_Legal">Disclaimer and Legal | |
| Information</a></p> | |
| <p class="TOCHeading"><a href="#About_This_Document">About This | |
| Document</a></p> | |
| <p class="TOC"><a href="#Purpose">Purpose</a></p> | |
| <p class="TOC"><a href="#Intended_Audience">Intended | |
| Audience</a></p> | |
| <p class="TOC"><a href= | |
| "#Documentation_Conventions">Documentation Conventions</a></p> | |
| <p class="TOCHeading"><a href= | |
| "#Introduction_to_Java_2D*">Introduction to Java 2D*</a></p> | |
| <p class="TOCHeading"><a href="#Java_2D*_in_DRL">Java 2D* in | |
| DRL</a></p> | |
| <p class="TOC"><a href="#About">About</a></p> | |
| <p class="TOC"><a href="#Architecture_Overview">Architecture | |
| Overview</a></p> | |
| <p class="TOC"><a href="#Class_Relationship">Class | |
| Relationship</a></p> | |
| <p class="TOC"><a href= | |
| "#CommonGraphics2D_Class_Internals">CommonGraphics2D Class | |
| Internals</a></p> | |
| <p class="TOC"><a href= | |
| "#Platform_Specifics_in_DRL_Java_2D*_Graphics">Platform | |
| Specifics in DRL Java 2D* Graphics</a></p> | |
| <p class="TOC"><a href="#Java_2D*_Portability">Java 2D* | |
| Portability</a></p> | |
| <p class="TOCHeading"><a href="#References">References</a></p> | |
| <h1><a name="Revision_History"></a>Revision History</h1> | |
| <table border="0" | |
| cellpadding="0" | |
| width="100%"> | |
| <tr> | |
| <td width="24%" | |
| class="TableHeading">Version</td> | |
| <td width="49%" | |
| class="TableHeading">Version Information</td> | |
| <td class="TableHeading">Date</td> | |
| </tr> | |
| <tr> | |
| <td width="24%" | |
| class="TableCell">Initial version</td> | |
| <td width="49%" | |
| class="TableCell">Alexey Petrenko, Svetlana | |
| Konovalova: document created.</td> | |
| <td class="TableCell">May 18, 2006</td> | |
| </tr> | |
| </table> | |
| <h1><a name="Disclaimer_and_Legal"></a>Disclaimer and Legal | |
| Information</h1> | |
| <p>Copyright 2005-2006 The Apache Software Foundation or its | |
| licensors, as applicable.</p> | |
| <p>Licensed under the Apache License, Version 2.0 (the | |
| License); you may not use this file except in compliance with | |
| the License. You may obtain a copy of the License at | |
| <a href="http://www.apache.org/licenses/LICENSE-2.0"> | |
| http://www.apache.org/licenses/LICENSE-2.0</a>.</p> | |
| <p>Unless required by applicable law or agreed to in writing, | |
| software distributed under the License is distributed on an AS | |
| IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either | |
| express or implied. See the License for the specific language | |
| governing permissions and limitations under the License.</p> | |
| <p>Portions, Copyright (C) 1991-2005 Unicode, Inc. The | |
| following applies to Unicode </p> | |
| <p>COPYRIGHT AND PERMISSION | |
| NOTICE.</p> | |
| <p>Copyright (C) 1991-2005 Unicode, Inc. All rights reserved. | |
| Distributed under the Terms of Use in <a href= | |
| "http://www.unicode.org/copyright.html">http://www.unicode.org/copyright.html</a>. | |
| Permission is hereby granted, free of charge, to any person | |
| obtaining a copy of the Unicode data files and any associated | |
| documentation (the "Data Files") or Unicode software and any | |
| associated documentation (the "Software") to deal in the Data | |
| Files or Software without restriction, including without | |
| limitation the rights to use, copy, modify, merge, publish, | |
| distribute, and/or sell copies of the Data Files or Software, | |
| and to permit persons to whom the Data Files or Software are | |
| furnished to do so, provided that (a) the above copyright | |
| notice(s) and this permission notice appear with all copies of | |
| the Data Files or Software, (b) both the above copyright | |
| notice(s) and this permission notice appear in associated | |
| documentation, and (c) there is clear notice in each modified | |
| Data File or in the Software as well as in the documentation | |
| associated with the Data File(s) or Software that the data or | |
| software has been modified.</p> | |
| <p>THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT | |
| WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT | |
| LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A | |
| PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. | |
| IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN | |
| THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR | |
| CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM | |
| LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, | |
| NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |
| CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR | |
| SOFTWARE.</p> | |
| <p>Except as contained in this notice, the name of a copyright | |
| holder shall not be used in advertising or otherwise to promote | |
| the sale, use or other dealings in these Data Files or Software | |
| without prior written authorization of the copyright | |
| holder.</p> | |
| <p>Additional Terms From the Database:</p> | |
| <p>Copyright (C) 1995-1999 Unicode, Inc. All Rights | |
| reserved.</p> | |
| <p>Disclaimer:</p> | |
| <p>The Unicode Character Database is provided as is by Unicode, Inc. No claims | |
| are made as to fitness for any particular purpose. No | |
| warranties of any kind are expressed or implied. The recipient | |
| agrees to determine applicability of information provided. If | |
| this file has been purchased on magnetic or optical media from | |
| Unicode, Inc., the sole remedy for any claim will be exchange | |
| of defective media within 90 days of receipt. This disclaimer | |
| is applicable for all other data files accompanying the Unicode | |
| Character Database, some of which have been compiled by the | |
| Unicode Consortium, and some of which have been supplied by | |
| other sources.</p> | |
| <p>Limitations on Rights to Redistribute This | |
| Data:</p> | |
| <p>Recipient is granted the right to make copies in any form | |
| for internal distribution and to freely use the information | |
| supplied in the creation of products supporting the UnicodeTM | |
| Standard. The files in the Unicode Character Database can be | |
| redistributed to third parties or other organizations (whether | |
| for profit or not) as long as this notice and the disclaimer | |
| notice are retained. Information can be extracted from these | |
| files and used in documentation or programs, as long as there | |
| is an accompanying notice indicating the source.</p> | |
| <h1><a name="About_This_Document"></a>About This Document</h1> | |
| <h2><a name="Purpose"></a>Purpose</h2> | |
| <p>This document introduces the Java 2D<a href="#*">*</a> | |
| [<a href="#Java%202D*Tech">1</a>] implementation, supplied as | |
| part of the DRL (Dynamic Runtime Layer) initiative, and gives | |
| details on its design.</p> | |
| <h2><a name="Intended_Audience"></a>Intended Audience</h2> | |
| <p>The target audience for the document includes a wide | |
| community of engineers interested in using Java 2D<a href= | |
| "#*">*</a> and in further work with the product to contribute | |
| to its development. The document assumes that readers are | |
| familiar with the Java 2D<a href="#*">*</a> technology and the | |
| Java<a href="#*">*</a> programming language.</p> | |
| <h2><a name="Documentation_Conventions"></a>Documentation | |
| Conventions</h2> | |
| <p>This document uses the <a href="../conventions.html" | |
| target="_blank">unified conventions</a> for the DRL | |
| documentation kit.</p> | |
| <p class="backtotop"><a href="#top">Back to Top</a></p> | |
| <h1><a name="Introduction_to_Java_2D*"></a>Introduction to Java | |
| 2D<a href="#*">*</a></h1> | |
| <p>The Java 2D<a href="#*">*</a> implementation is the | |
| collection of classes for a high-performance two-dimensional | |
| (2D) graphics and image processing. The package includes line | |
| and shape drawing, text and image rendering.</p> | |
| <p class="backtotop"><a href="#top">Back to Top</a></p> | |
| <h1><a name="Java_2D*_in_DRL"></a> Java 2D<a href="#*">*</a> in | |
| DRL</h1> | |
| <h2><a name="About"></a>About</h2> | |
| <p>DRL Java 2D<a href="#*">*</a> is a fast and easily portable | |
| implementation of the Java 2D<a href="#*">*</a> technology, | |
| consisting of a number of classes for advanced graphics and | |
| image processing.</p> | |
| <p class="backtotop"><a href="#top">Back to Top</a></p> | |
| <h2><a name="Architecture_Overview"></a>Architecture | |
| Overview</h2> | |
| <p>DRL Java 2D<a href="#*">*</a> supports the | |
| Windows<a href="#*">*</a> and Linux<a href="#*">*</a> | |
| operating systems for the IA-32 architecture. The | |
| Windows<a href="#*">*</a> version mostly uses the GDI+ | |
| (Graphics Device Interface plus) library, but can also use | |
| the GDI library for better performance. For example, Java | |
| 2D<a href="#*">*</a> can use GDI instead of GDI+ to speed up | |
| image processing. The Linux<a href="#*">*</a> version uses | |
| Xlib and xft libraries.</p> | |
| <p>DRL Java 2D<a href="#*">*</a> has portability in its design, | |
| so that you can easily port it to other operating systems and | |
| hardware architectures. For details and how to port Java | |
| 2D<a href="#*">*</a> on other platforms see <a href= | |
| "#Java_2D*_Portability">Java 2D* Portability</a>.</p> | |
| <p class="backtotop"><a href="#top">Back to Top</a></p> | |
| <h2><a name="Class_Relationship"></a>Class Relationship</h2> | |
| <p>Figure 1 below shows the Java 2D<a href="#*">*</a> | |
| structure, demonstrating the inheritance relationship of the | |
| <code>Graphics2D</code> classes:</p> | |
| <p align="center"><img src="images/Hierarchy.gif"></p> | |
| <p class="special">Figure 1: Inheritance Relationship of the | |
| <code>Graphics2D</code> Classes</p> | |
| <ul> | |
| <li>The abstract classes <code>java.awt.Graphics</code> and | |
| <code>java.awt.Graphics2D</code> define the public | |
| interface for all <code>Graphics2D</code> | |
| implementations.</li> | |
| <li>The classes | |
| <code>org.apache.harmony.awt.gl.windows.WinGDIPGraphics2D</code> | |
| and | |
| <code>org.apache.harmony.awt.gl.linux.XGraphics2D</code> | |
| are the Windows<a href="#*">*</a> and Linux<a href= | |
| "#*">*</a> versions respectively of the | |
| <code>org.apache.harmony.awt.gl.CommonGraphics2D</code> | |
| class, which implements the abstract methods of the | |
| <code>Graphics2D</code> class.</li> | |
| <li>The | |
| <code>org.apache.harmony.awt.gl.image.BufferedImageGraphics2D</code> | |
| class deals with drawing on buffered images.</li> | |
| </ul> | |
| <p>For more information on the classes see <a href= | |
| "#Platform_Specifics_in_DRL_Java_2D*_Graphics">Platform | |
| Specifics in DRL Java 2D* Graphics</a>.</p> | |
| <p class="backtotop"><a href="#top">Back to Top</a></p> | |
| <h2><a name= | |
| "CommonGraphics2D_Class_Internals"></a><code>CommonGraphics2D</code> | |
| Class Internals</h2> | |
| <p>The section specifies the <code>CommonGraphics2D</code> | |
| class internal areas and gives description on their tools.</p> | |
| <h3><a name="Rasterizers"></a>Line and Shape Rasterizers</h3> | |
| <p>The <code>CommonGraphics2D</code> class splits all shapes | |
| into a set of rectangles to unify the drawing process for | |
| different operating systems and architectures. For this purpose | |
| Java 2D<a href="#*">*</a> uses the | |
| <code>JavaShapeRasterizer</code> and the | |
| <code>JavaLineRasterizer</code> classes from the | |
| <code>org.apache.harmony.awt.gl.render</code> package. The | |
| <code>JavaShapeRasterizer</code> class splits an object | |
| implementing a Shape interface into a set of rectangles and | |
| produces a MultiRectArea object. The | |
| <code>JavaLineRasterizer</code> class makes line drawing more | |
| accurate and processes lines with strokes, which are instances | |
| of the BasicStroke class.</p> | |
| <p>To port the shape drawing to another platform you just need | |
| to override rectangle-drawing methods. However, if your | |
| operating system has functions to draw particular shapes, you | |
| can optimize your subclass of the <code>CommonGraphics2D</code> | |
| class by using this functionality in overridden methods.</p> | |
| <h3><a name="Blitters"></a>Blitters</h3> | |
| <p>Blitter classes draw images on the display or buffered | |
| images. All blitters inherit the | |
| <code>org.apache.harmony.awt.gl.render.Blitter</code> | |
| interface.</p> | |
| <p>Blitters are divided into:</p> | |
| <ul> | |
| <li><i>Native blitters</i> for simple types of images, | |
| which the underlying native library can draw.</li> | |
| <li><i>Java<a href="#*">*</a> blitters</i> for those types | |
| of images, which the underlying native library cannot | |
| handle.</li> | |
| </ul> | |
| <p>DRL Java 2D<a href="#*">*</a> also uses blitters to fill the | |
| shapes and the user-defined subclasses of the | |
| <code>java.awt.Paint</code> class with paints, which the system | |
| does not support.</p> | |
| <h3><a name="Text_Renderers"></a>Text Renderers</h3> | |
| <p>Text renderers draw strings and glyph vectors. All text | |
| renderers are subclasses of the | |
| <code>org.apache.harmony.awt.gl.TextRenderer</code> class.</p> | |
| <p>Java 2D<a href="#*">*</a> does not have its own font | |
| rendering engine and uses native libraries instead: the GDI | |
| library on the Windows<a href="#*">*</a> OS and the Xft, | |
| FontConfig and FreeType libraries on the Linux<a href= | |
| "#*">*</a> OS. The <code>java.awt.font.NumericShaper</code> class uses data | |
| from the Unicode | |
| Character Database [<a href="#Unicode Character Database">2</a>] for retrieving character properties.</p> | |
| <p class="backtotop"><a href="#top">Back to Top</a></p> | |
| <h2><a name= | |
| "Platform_Specifics_in_DRL_Java_2D*_Graphics"></a>Platform | |
| Specifics in DRL Java 2D<a href="#*">*</a> Graphics</h2> | |
| <p>The Windows<a href="#*">*</a> implementation - the | |
| <code>WinGDIPGraphics2D</code> class - for the most part is | |
| based on the GDI+ library, which has the routines for drawing | |
| all types of shapes filling them with a solid color brush and a | |
| linear gradient brush, but it does not support an acyclic | |
| gradient brush. The Java 2D<a href="#*">*</a> package doesn't | |
| use the native library texture paint option, resorting to | |
| <a href="#Blitters">Blitters</a> instead. However, the major | |
| part of the shape drawing and filling routines is native in | |
| this class.</p> | |
| <p>As for the Linux<a href="#*">*</a> implementation - the | |
| <code>XGraphics2D</code> class - the Xlib library has no | |
| methods to draw and fill free-form shapes. So, the | |
| corresponding <code>XGraphics2D</code> methods use <a href= | |
| "#Rasterizers">Rasterizers</a>, inherited from the | |
| <code>CommonGraphics2D</code> class.</p> | |
| <p class="backtotop"><a href="#top">Back to Top</a></p> | |
| <h2><a name="Java_2D*_Portability"></a>Java 2D<a href= | |
| "#*">*</a> Portability</h2> | |
| <p>The actions to port the DRL Java 2D<a href="#*">*</a> | |
| package to another architecture or operating system, or to use | |
| it with another library depend on the particular platform. The | |
| main steps are the following:</p> | |
| <ul> | |
| <li> | |
| Create a new subclass of | |
| <code>org.apache.harmony.awt.gl.CommonGraphics2D</code>. | |
| <dl> | |
| <dt>Example</dt> | |
| </dl> | |
| <pre> | |
| org.apache.harmony.awt.gl.windows.<SomeLib>Graphics2D | |
| org.apache.harmony.awt.gl.<SomeOS>.<SomeLib>Graphics2D | |
| </pre> | |
| </li> | |
| <li>Implement abstract methods of the super class in your | |
| custom class.</li> | |
| <li>Create platform-specific <a href= | |
| "#Blitters">Blitters</a> and <a href="#Text_Renderers">Text | |
| Renderers</a>.</li> | |
| </ul> | |
| <p class="backtotop"><a href="#top">Back to Top</a></p> | |
| <h2><a name="References"></a> References</h2> | |
| <p>[<a name="Java 2D*Tech"></a>1] Java 2D* Technology | |
| <a href="http://java.sun.com/j2se/1.5.0/docs/guide/2d/index.html" | |
| title= | |
| "http://java.sun.com/j2se/1.5.0/docs/guide/2d/index.html">http://java.sun.com/j2se/1.5.0/docs/guide/2d/index.html</a></p> | |
| <p>[<a name="Unicode Character Database"></a>2] Unicode Character Database | |
| <a href="http://www.unicode.org/ucd/" | |
| title= | |
| "http://www.unicode.org/ucd/">http://www.unicode.org/ucd/</a></p> | |
| <p class="backtotop"><a href="#top">Back to Top</a></p> | |
| <p><a name="*">*</a> Other brands and names are the property of | |
| their respective owners.</p> | |
| </body> | |
| </html> |