Skip to main content

Getting 3d effect from draw 2d

Last three months have been like a roller-coaster to say the least, to learn lot new things, mastering the existing and come up renovating yourself. The time we developed FID 1.2 which is open source and available for free download.

The key feature shipped with FID1.2 is EIP Editor (to know about FID and EIP editor go to FUSE Team blogs) and i got a chance to work on it to enhance the look and feel of the editor.

The task was to make the shadowed figures of shapes likes Rectangle, circle, diamond etc using draw2d API. And since designing and development was proceeding hand-to-hand, their were lot of changes in colors and sizes so effectively we needed to design a system or framework which reflect requirement changes in no time. Following are some frequent requirement changes:
  1. Change the gradient colors (which includes start color and end color)
  2. New shapes diamonds, rounded rectangle etc.
  3. Change in sizes of the figures both width, height, insets etc.
Clearly you can't just keep on changing the java code for these changes, so something with combination of java along with properties files is the solution.

The next thing is how to use properties files keeping in mind the enhancements, changes, and also to make it so trivial that anybody (even designers) can change and check.

Designing should be based on figure type, size and color, clearly number of combination will keep on increasing based on the above three parameters. The option of maintaining single cumbersome property file was ruled out because of risk involved in modifying it and time in identifying the right place to do it.

We created property files based on color and sizes e.g. bluefigure, grayfigure, greenfigure property files these files contain the information about the gradiant, shadow color combinations etc. Size properties contains the sizes according to figure type e.g. if you have figure of type A then the A.properties will contain all the size related properties.

The parameter we missed out in property file is shape that we covered in java utility class via having method like getBlueRectangle(Properties propertiedOfA) this method will create and return you the figure which is blue in color and having rectangle shape and sizes are taken from A.properties file which is passed as an argument.

The final output looks like this:

Also we added the custom decorators like error markers, breakpoint markers etc. which can be seen in the pic above

Some points to remember:

  1. Do not set background color inside paint method
  2. Always cache your color and font objects else destroy them when not in use

Comments

Popular posts from this blog

Interview at Progress Software

I have given a lot of interviews before however, this one was special. Let me start from the beginning. I got a call from Progress Software and was scheduled for the first telephonic discussion. Next day, I got a call from HR and she asked me questions on Java and a few basic puzzles.  After clearing the previous round, I got scheduled for the second telephonic interview. This interview covered Java, design-related problems and algorithms. After a week, I got a call from the HR for the onsite interviews in Hyderabad. This is the first time I googled about Progress Software. I said yes for the onsite interviews. Journey to onsite started not as planned after my flight got delayed. Because of fog-related delay in Delhi, I reached the PSI (Progress Software India) office couple of hours late.  HR introduced me to the first interviewer. The interviewer explained the first round. It was a coding round (I am not a big fan of coding rounds), the problem was ...

java.net.SocketException: Connection reset

I am able to fix the problem via setting the following params on the HTTPClient class... client.getParams().setParameter("http.socket.timeout", new Integer(0)); client.getParams().setParameter("http.connection.stalecheck", new Boolean(true)); java.net.SocketException: Connection reset at java.net.SocketInputStream.read(Unknown Source) at java.io.BufferedInputStream.fill(Unknown Source) at java.io.BufferedInputStream.read(Unknown Source) at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:77) at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:105) at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1115) at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1832) at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1590) at org.apache.commons.httpclient.HttpMethodBase.execute(...

CXF-RS: Java Code Generation from xml/xsd

Cleaner approach is to use xjc like this: Continue to dirty approach below if u need to: When working with CXF-RS services often we start with XML message that will be served. After that we go through endless iteration of generating the right Java POJO's for the XML. The library like apache XMLBeans generate the Java code but the code generated is not what a developer would write and generally tedious to modify and understand. I have come across a work around for generating Java classes from XSD (xml) which is very close to what a developer with decent experience will write.  Follow the steps given below to explore the solution: 1. Generate the wsdl from from xsd as given in at this link  ( http://cxf.apache.org/docs/xsd-to-wsdl.html ). 2. The Java classes can be generated from wsdl from maven plugin entry below find complete details here   http://cxf.apache.org/docs/maven-cxf-codegen-plugin-wsdl-to-java.html org.apache.cxf cxf-codegen-plugin ...