3.5 KiB
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. Note that they're not separated like this 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.