Another Graphics Library

Developing commercial software ,which is released to the public, can be a difficult and expensive process. There are many approaches to licensing. What you want to do depends upon your wallet and paranoia.

The least expensive approach is to find a license you like, from a commercial product, and modify it. While inexpensive, you do not will not be sure if it provides the copyright and liability protection you seek, since it has not had a legal review.

At the other end, you hire a lawyer in your country to develop a tailored license.

You also have to consider ,that if you don’t have the resources to prosecute violators in court ,a license can be meaningless.

I’ve posted a couple of the demo screenshots on the wiki.
[url]GHI Electronics – Where Hardware Meets Software

Looks good! KFTC!

Thank you, Architect! :slight_smile:
Text on the pictures got some blurring for some reason after posting. ???

Looking good! The text actually looks clear after you click through it about 3 times and finally end up on a screen that is just the image.

Added new screenshots for the Image class.
For sorry, I can’t place all combinations of image properties on a screen :slight_smile:

Added screenshots for the Level class.

Added screenshots for the Slider class.
Added wiki content.

Hi Gothic Maestro, any progress on this?

Hi gothic Maestro,

I Climb on the bandwagon, and to be sure to undestand what is you target point, I have read all the post from the beginning.

On Embedded systems, or perhaps only in my case :-[ , the main thing I need is stability. Embedded Interfaces are not developed to be used continuesly, but for simple actions (Activate an I/O, control I/O value and so on), so that a couple of milliseconds wont be a lake for anyone… If I really need something more powerfull, I will use a Windows HMI and the network link to communicate with… Tell me all if I’m wrong !

However, you’re implementation is really nice and interesting :slight_smile:

It will be intersting for me to test on my Chipworkx til you’ll post a last demo code, and feedback about performane on that kind of SOC.

Hi guys!
Sorry for a long silence. I just paused the development of the library for a while because of lack of time.
I’m now working on possibility of hosting a small Silverlight website with WCF services on Cobra.
But I really do wish to complete this gui library later. The main work remained is to fill it with a variety of different controls, as for today it yet consists of the ones declared on wiki. Also I’d like to play a bit more with rendering to make it faster if possible.
So please don’t think I gave up with it :slight_smile:

Hi all.

It’s time to be back with my library. A couple of years passed, and during this time the library was used and proved itself as a reliable graphics engine at the large commercial website http://www.ppmroadmap.com implementing the projects management system. Library was ported to javascript and is using rendering to the html5’ canvas instead of a bitmap, but there’s actually no matter. Library was used to implement the fully interactive and rich-featured Gantt chart for interactive projects management and is being used by thousands of customers including those famous ones like http://www.ppmroadmap.com/buzz/customers. A short video is available here Visualize Your Portfolio from Roadmap on Vimeo.

Recently I’ve ported it back to NetMF and it’s in the testing stage now. It now supports displays connected to the integrated LCD controller via R, G, B, T sockets as well as serial (SPI) displays connected via S sockets. It can be used to output separate graphic content to several displays simultaneously.

It’s a pity that Gus deleted all the documentation from wiki as I’m not really excited to write it back from the scratch (Gus, thank you :wink: ).

I’ll try to give any further updates.

Here you can see a very quick and simple demo taken on the spi 2.2" TFT display.

5 Likes

Looks great! When can we try it?

Thanks Architect.

I have to test it with large displays (3.2" +) as well and check the touch pipe. For a moment the touch pipe was optimized for PC mouse and tablet finger gestures. So it needs a certain time to be adapted to netmf.

I’ll get a gadgeteer’ 3.2" display with touch screen in a couple of days from my european dealer and continue testing. Then I’ll post some sort of video presentation of main features.

Also there are not so many controls in the library (about 20) and I have to develop a reasonable pack (all standard controls at least). But anyway I think it’s not a reason to postpone a first version to get started with.

Please stay tuned with further updates :slight_smile:

1 Like

I’ve got my TE35 display module :slight_smile:
And now you can watch and compare right the same test on the new display.

1 Like

@ Gothic Maestro - Welcome back!
Looks real good!
Is it a plain NETMF library or a Gadgeteer library?
Will it run on an EMX (Cobra 1) board?

@ jasdev - Thank you!

And now one more test: the same scenario on TE35 and spi 2.2" TFT displays simultaneously!

The library is platform independent. You can use it under plain NETMF as well as under Gadgeteer.
As you can see in demo I use it with Raptor under Gadgeteer platform, but actually the only assemblies that it imports are:

Microsoft.SPOT.Graphics
Microsoft.SPOT.Native
Microsoft.SPOT.TinyCore
Microsoft.SPOT.Touch
mscorlib

Actually at the first step you initialize and configure your display (spi or integrated LCD controller) in a regular way. It’s all up to you, the library doesn’t care. In my case it is like this:


// spi display:
DisplayS22 displaySPI = new DisplayS22(11); // gadgeteer display module on socket 11

// LCD controller:
Configuration.LCD.Configurations lcdConfig = new Configuration.LCD.Configurations();
lcdConfig.Width = 320;
lcdConfig.Height = 240;
.......................................
Configuration.LCD.Set(lcdConfig);

At the second step the library enters the game:


// for LCD controller:
GraphicsManager gmLCD = new GraphicsManager(320, 240); // 320x240 screen
Desktop desktopLCD = gmLCD.Desktop;

// for spi display you have additionaly to handle the render event:
GraphicsManager gmSPI = new GraphicsManager(240, 320); // 240x320 screen
gmSPI.OnRender += delegate(Bitmap bitmap, Rect dirtyArea)
{
    displaySPI.SimpleGraphics.DisplayImage(bitmap, (uint)dirtyArea.X, (uint)dirtyArea.Y, (uint)dirtyArea.X, (uint)dirtyArea.Y, (uint)dirtyArea.Width, (uint)dirtyArea.Height);
};
Desktop desktopSPI = gmSPI.Desktop;

That’s it!

Then you use those desktopLCD and desktopSPI for constructing the individual controls trees. Just like this (“desktop” variable is either of them):


desktop.SuspendLayout();

ImageBrush brush = new ImageBrush(GetBitmap(Resources.BinaryResources.reWalls, Bitmap.BitmapImageType.Jpeg));
brush.Stretch = Stretch.Fill;
desktop.Background = brush;

ImageBrush bar = new ImageBrush(GetBitmap(Resources.BinaryResources.Bar, Bitmap.BitmapImageType.Bmp));

int statusbarHeight = 24;
Panel statusbar = new Panel(0, desktop.Height - statusbarHeight, desktop.Width, statusbarHeight);
statusbar.Background = bar;
desktop.Children.Add(statusbar);

// ................... and so on.............

desktop.ResumeLayout();

@ jasdev

I’ll try to run it on my Cobra1 with 7" TFT display.