PixelFarm/src at master · PaintLab/PixelFarm

This folder contains a Main project solution file(MiniDev.sln)

DepCtrls: contains Dependency-Controled sub projects

PixelFarm : contains PixelFarm sub projects

Tests : contains test projects

Tools : contains 'BuildMergeProject' tool that we use it to built the 'autogen' projects

x_merge_projects : contains original 'autogen' project outline

*x_autogen_ **: contain projects that are auto-generated by our tool 'BuildMergeProject'


How projects are arranged?

I separate the main projects into many sub solution folders =>

Because it is easy to do dependency analysis.


main01

solution explorer view

0.1 DevTests : contains tests and examples

0.2_Dev_DepControlUnits: contains projects that are designed to depend on each other in multiple aspects, I use these projects to control the 'dependency' of each class. This is quite complex but essential for me to check and analyze

0.9 WebDocuments: contains modules that are needed by PaintLab.Svg, we shared the source with HtmlRender project.

1.0_Supportive Modules: modules that support platform's functionality.

1.1_MiniOpenTK: contains custom version of OpenTK

2.0_Shapes: about shapes, geometry, tesselation

2.1_Core: contains drawing core, how to render an individual pixel to a bitmap's memory.

2.2_Production: merge all functions of 2.0 and 2.1 to a single dll here=> PixelFarm.Drawing. with PixelFarm.Drawing alone, we can create an in-memory bitmap canvas and draw anything to it. This is a pure software-renderer.

3.0_Typography: the PixelFarm.Drawing alone dose not have text-drawing function directly. drawing a text span is a complex part, I separate this part to another repo 'Typography'. PixelFarm provide a 'text-printer' interface, we implement that text-printer inside PixelFarm.Typography.


4.0_Specific_Drawing: specific platform drawing, as describe above, PixelFarm.Drawing contains only Software Rendering part. the code for platform-specific-drawing functions is here.

the module GdiPlus, GLES implement PixelFarm.Drawing's Painter,Drawboard and add platform specific drawing function to it.

Painter's user can choose to use platform-specific or pure software-renderer.

for examples, GLES module use GLES painter by default, but if user want to draw a some fine graphics object (eg. font glyphs) they can draw it to software-base surface and copy to GLES surface

5.0_PaintLab_Platform: contains RenderTree and other graphics support module (Color,PaintFx)
RenderTree contains essential functions for UI implementation (eg. HitTest, event-tree, graphics update cycle implementation)

5.1_Your_Implementation: as it name, this part provide 'example' for PaintLab's RenderTree. it demonstrate how to create a low level UIElement, binding UI interaction etc, you can reimlement this all by your own.

5.2_Specific_Implementation: module for merge 'Your-Implementation' to a specific Platform

6.0_Tools: contains 'BuildMergeProject' tool that we use it to built the 'autogen' projects