Browse Source
Hopefully this might help people understand how stuff fits together a bit...pull/16/head
1 changed files with 101 additions and 0 deletions
@ -0,0 +1,101 @@ |
|||
# Perspex Architecture |
|||
|
|||
At the highest level, perspex is split up into a "core" and two "subsystems. |
|||
|
|||
* The core is a set of Portable Class Libraries that can run anywhere. |
|||
* The Windowing subsystem is responsible for creating windows, handling input and scheduling timers. |
|||
* The Rendering subsystem is responsible for drawing. |
|||
|
|||
There are currently two Windowing and two Rendering subsystems: |
|||
|
|||
## Windowing Subsystems |
|||
|
|||
* Perspex.Win32 uses the Win32 API (this also works on 64-bit windows). |
|||
* Perspex.Gtk uses the GTK2 toolkit and can be run on both Windows and *nix. |
|||
|
|||
## Rendering Subsystems |
|||
|
|||
* Perspex.Direct2D1 uses Microsoft's Direct2D1 API. |
|||
* Perspex.Cairo uses Cairo for rendering and Pango for text layout. |
|||
|
|||
## Core |
|||
|
|||
The Perspex core is split up into several assemblies. These assemblies are not separate because |
|||
you will want to use them separately - they are separate to maintain separation of concerns and a |
|||
layered architecture. It is fully possible that they will be ILMerged into a single assembly for |
|||
distribution. |
|||
|
|||
The assemblies are as follows, from lowest to highest level: |
|||
|
|||
### Perspex.Base |
|||
|
|||
The main classes in this assembly are `PerspexObject` and `PerspexProperty`. |
|||
|
|||
These are Perspex's versions of XAML's `DependencyObject` and `DepenendencyProperty`. It also |
|||
defines a `PerspexDispatcher` which is - surprise - our version of XAML's `Dispatcher`. |
|||
|
|||
### Perspex.Animation |
|||
|
|||
The main class in the assembly is `Animatable`. |
|||
|
|||
Allows PerspexProperties to be animated and provides various utilities related to animation. |
|||
|
|||
### Perspex.SceneGraph |
|||
|
|||
The main class in this assembly is `Visual` and its interface `IVisual`. |
|||
|
|||
Defines the "Visual" layer which is a 2D scene graph, with each node being a `IVisual`/`Visual`. |
|||
Also defines primitives such as `Point`/`Rect`/`Matrix`, plus `Geometry`, `Bitmap`, `Brush` and |
|||
whatever else you might need in order to draw to the screen. |
|||
|
|||
### Perspex.Styling |
|||
|
|||
The main interface in this assembly is `IStyleable`. |
|||
|
|||
Defines a CSS-like system for styling controls. |
|||
|
|||
### Perspex.Layout |
|||
|
|||
The main class in this assembly is `Layoutable`. |
|||
|
|||
Defines a XAML-like layout system using `Measure` and `Arrange`. Also defines `LayoutManager` which |
|||
carries out the actual layout. |
|||
|
|||
### Perspex.Interactivity |
|||
|
|||
The main class in this assembly is `Interactive`. |
|||
|
|||
Defines a system of routed events similar to those found in XAML. |
|||
|
|||
### Perspex.Input |
|||
|
|||
The main class in this assembly is `InputElement`. |
|||
|
|||
Handles input from various devices such as `MouseDevice` and `KeyboardDevice`, together with |
|||
`FocusManager` for tracking input focus. Input is sent from the windowing subsystem to |
|||
`InputManager` in the form of "Raw" events which are then translated into routed events for the |
|||
controls. |
|||
|
|||
### Perspex.Controls |
|||
|
|||
There are many important classes in this assembly, but the root of them is `Control`. |
|||
|
|||
Finally defines the actual controls. The `Control` class is analogous to WPF's `FrameworkElement` |
|||
whereas the `TemplatedControl` class is our version of WPF's `Control`. This is also where you'll |
|||
find all of the basic controls you'd expect. |
|||
|
|||
### Perspex.Themes.Default |
|||
|
|||
Defines a default theme using a set of styles and control templates. |
|||
|
|||
### Perspex.Application |
|||
|
|||
The main class in this assembly is `Application`. |
|||
|
|||
This ties everything together, setting up the service locator, defining the default theme etc. |
|||
|
|||
### Perspex.Diagnostics |
|||
|
|||
Adds utilities for debugging perspex applications, such as `DevTools` which provides a Snoop/WPF |
|||
Inspector/Browser DevTools window for inspecting the state of the application. |
|||
|
|||
Loading…
Reference in new issue