Skip to content

Winster332/Quantum

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Quantum

Quantum - designed to work with HTML and CSS, and web components, without using a server. You can build the design of your application on HTML and CSS, and run it as a normal application. Features: Quantum allows computations in C# and the native JavaScript. Drawing graphics occurs by Skiasharp/OpenL. This allows you to increase the speed of drawing elements. This is not Electron, and not a new browser. This technology allows you to use HTML/CSS rate for your needs. WebAPI repeats API browsers, and you should not feel a significant difference in C# and JS using Quantum.

The API Documentation is available on the web to browse.

This is an experimental version. She is unstable. Some components are redesigned to the specifics of the .NET platform. The project is not optimized. Optimization is currently highlighted.


GitHub Logo

Why precisely Quantum?

Because the technologies of VPF, VF, Android, they do not simultaneously provide flexibility and cross-platform. For a quantum you do not have to learn something new. If you know the basics of CTML, that will be enough.

Supports elements

Group Element Support
HTML DOM HTMLElement Yes
HTML html Yes
HTML body Yes
HTML HTMLFormElement Yes
HTML HTMLCanvasElement Yes
HTML HTMLAnchorElement Yes
HTML HTMLAudioElement No
HTML HTMLBRElement No
HTML HTMLButtonElement Yes
HTML HTMLDivElement Yes
HTML HTMLImageElement No
HTML HTMLInputElement Yes
HTML HTMLHeadElement Yes

How it works

Stage 1. Loading

At stage 1, the document loading html. Loading styles and scripts is based on the html file, or separately, by means of a bindig. DOM is built tree.

                              +---------+
                              |   DOM   |
                              +---------+
                                   ▲                    +---------+
                                   |                    | Reflow  |
+---------+    +---------+    +---------+               +---------+   
|  HTML   |---►| Parser  |---►| Content |---+                ▲
+---------+    +---------+    +---------+   |                |
                                   |        ▼                ▼        
     +-----------------------------+   +---------+    +-------------+    +----------+
     |                                 | Binder  |---►| Frame tree  |---►| Painting |
     |                                 +---------+    +-------------+    +----------+
     ▼                                      ▲
+----+----+    +---------+    +---------+   |
|  CSS    |---►| Parser  |---►|  Rules  |---+
+---------+    +---------+    +---------+ 

Stage 2. Painting

For rendering, OpenGL and SkiaSharp are used. They allow you to draw elements through GPU if possible. The collected data from stage 1 is accumulated and transferred to stage 2. Built render tree. Transforms styles for SkiaSharp. Build lineup. The tree with the elements of the arrangement is transmitted to OpenGL where the final output to the screen takes place.

            +--------------+
            |  Skia paint  |---+
            +--------------+   |
                   ▲           ▼
+--------------+   |     +------------+    +----------+
|   Painting   |---+     | Transform  |---►| Display  |
+--------------+   |     +------------+    +----------+
                   ▼           ▲
            +--------------+   |
            | Сomposition  |---+
            +--------------+

Audio cross-platform

For cross-platform audio playback, a special module is used that uses AFPlay/AFInfo for MacOS, NAudio for Windows, and must be implemented for Android and Linux.

Local storage

LocalStorage is a repository, analogous to the fact that in browsers, with the ability to expand and store data in a database. Allows to integrate. By default, serializes data to hml and stores directives in the root.

Language

You can choose the language you want to use.

Other

+--------+   +--------+    +--------+           +--------+   +--------+   +--------+
|  HTML  |   |  CSS   |    |  DOM   |           | Window |   | Window |   | Window | 
+--------+   +--------+    +--------+---+       +--------+   +--------+   +--------+<--+
|Document|   | Sheet  |    | Window |   |       | OpenGL |   |  Skia  |   | Events |   |
| Parser |   | Parser |    |  Init  |   |       |  Init  |   |  Init  |   |  Init  |   |
+---+----+   +---+----+    +--------+   |       +----+---+   +----+---+   +---+----+   |
    :            :             ^        |            :            :           :        |
    |            |             |        |            |            |           |        |
    +------------+-------------+        |<-----------+------------+-----------+        |
                                        |            |            |           |        |
                                        |            :            :           :        |
+--------+  +---------+    +--------+   |       +----+---+   +----+---+   +---+----+   |
|        |  |         |    |        |   |       | Script |   | Window |   |  HTML  |   |
| Render |<-| Compose |<---| Styles |<--+       +--------+   +--------+   +--------+<--+
|        |  |         |    |        |           |  HTML  |   | Inputs |   | Events |
+--------+  +---------+    +--------+           +--------+   +--------+   +--------+

Links

MDN
OpenTK
SkiaSharp
NAudio

About

Quantum - designed to work with HTML and CSS, and web components, without using a server

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published