Skip to content

Commit

Permalink
Update README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
jamiehighfield authored May 19, 2022
1 parent c248e5e commit 1f6275c
Showing 1 changed file with 13 additions and 10 deletions.
23 changes: 13 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
## Legal Notice

Please note that this project is under active development and as such, **_no licenses are currently being granted_** for use in any personal, academic or commercial projects. Upon completion of active development in the coming months, the project will be licensed under the GNU General Public License (version 3), with additional commercial licensing available as required.
Please note that this project is under active development and as such, **_no licenses are currently being granted_** for use in any personal, academic or commercial projects. Upon completion of active development in the coming months, the project will be licensed under the MIT license, without any additional commercial licensing available.

---

Expand All @@ -10,21 +10,24 @@ BetterControls is a set of **enhanced** .NET 6 implementations of various native

![Build Passing](https://img.shields.io/badge/build-passing-brightgreen)

The library implements the vast majority of the [Remote Framebuffer Protocol (RFB)](https://tools.ietf.org/html/rfc6143) specification, including well-known and custom encoding algorithms, such as variations of **Tiled Run-Length Encoding (TRLE)**, as well as standard authentication mechanisms. Much of the implementation is easily extensible using specific documented interface implementations; or you can simply use the standard implementation, depending on your individual requirements. Whilst the library is build using cross-platform technology, the current implementations only caters for Windows®. This is due to the complex mechanisms that are needed to efficiently access the framebuffer, and how this and other features are vastly different between platforms.

## Packages

SharpVNC is available as a binary from NuGet [https://www.nuget.org/packages/BetterControls/](https://www.nuget.org/packages/BetterControls/). etter Controls must be consumed in a project via NuGet - that is, you can't reference the compiled library directly. This is a limitation relating to the .NET 6 Windows Forms designer.
Better Controls will be available as a binary from NuGet [https://www.nuget.org/packages/BetterControls/](https://www.nuget.org/packages/BetterControls/). The library must be consumed in a project via NuGet - that is, you can't reference the compiled library directly. This is a limitation relating to the .NET 6 Windows Forms designer.

## Project

The core logic for both the client and server for SharpVNC Core can be found in the `SharpVNC.Core` project. Any other logic that is specific to a given platform can be found in the `SharpVNC.Core.X` projects, such as `SharpVNC.Core.Windows` for Windows® specific logic. Core logic includes the base implementation of the Remote Framebuffer Protocol (RGB), as well as the necessary abstractions in order to apply the protocol in practise for a given platform. The platform specific projects can then be used against the abstractions to apply operating system specific functionality.

The SharpVNC packages make use of a number of external libraries, including SharpDX (a managed wrapper around DirectX) and LZ4. `ILRepack` package is used (similar to `ILMerge`) to merge the external assemblies in and make its members private. All such uses of external libraries are correctly licensed, and the licenses for which can be found in the `licensing` folder. This is to hepl alleviate any issues surrounding package conflict.
Better Controls supports the following controls and functionality:

- **Toolbar** - this is a wrapper of the native Windows API toolbar, that existed in the early days of Windows. Despite .NET 5+ dropping support for the built-in wrapper, the native toolbar is still used throughout Windows and commercial applications. This wrapper brings the toolbar back to .NET 6, along with more comprehensive suppor for the underlying API, as well as some performance improvements and designer support.
- **Menu bar** - this is an extension of the native toolbar that creates drop-down menus that look and behaves like a native Windows API menu bar, but with added benefits such as being height adjustable and being able to be placed in a Rebar control. This has full accessbility and hot-tracking support, just as you would get with a traditional menu bar. This was implemented using [guidance from Microsoft](https://docs.microsoft.com/en-us/windows/win32/controls/cc-faq-iemenubar).
![image](https://user-images.githubusercontent.com/9104853/169084083-4aef1622-b763-409a-9dfe-92a422b09fac.png)
- **Menu** - this is a wrapper of the native Windows API menu, that existed in the early days of Windows. Despite .NET 5+ dropping support for the built-in wrapper, the native toolbar is still used throughout Windows and commercial applications. This wrapper brings the toolbar back to .NET 6, along with more comprehensive suppor for the underlying API, such as the ability to add images, as well as some performance improvements and designer support.
- **Rebar** - this is a wrapper of the Windows API rebar control. This was never provided in .NET, but is used throughout Windows and commercial applications. It is a native version of a .NET tool strip container, and allows toolbars and other controls to be moved around inside a set container.
- **Split Button** - this extends the .NET button wrapper and adds support for a native drop-down.
- **Combo Box** - this extends the .NET combo box using various owner-draw techniques to provide a more comprehensive combo box with added features such as images and height adjustable items.
- **Form** - this is a small extension of the .NET form with some small additional features, such as disabling the close button. It is also necessary for some of the above controls to work.

*Better Menu Bar, a toolbar that exhibits the required behavior for a menu bar. This was implemented using [guidance from Microsoft](https://docs.microsoft.com/en-us/windows/win32/controls/cc-faq-iemenubar).*
The core logic for all controls (except designer support) can be found in the `BetterControls` project. Because Microsoft Visual Studio still runs using the .NET Framework runtime, this has made design-time support for .NET Core and .NET 5+ controls increasingly convoluted, especially where a custom UI is needed. This project makes use of a pre-release designer framework for .NET 6, that uses a client-server pattern. The server (a .NET 6 project) proxies objects to the client (a .NET Framework project), where those proxied objects can be consumed in any custom UI. These can be found in `BetterControls.Designer.Client` and `BetterControls.Designer.Server`.

### License

Expand All @@ -34,13 +37,13 @@ This library makes small references to the .NET Framework Reference Source, that

## Getting Started

Better Controls must be consumed in a project via NuGet - that is, you can't reference the compiled library directly. This is a limitation relating to the .NET 6 Windows Forms designer.
Better Controls must be consumed in a project via NuGet - that is, you can't reference the compiled library directly. This is a limitation relating to the .NET 6 Windows Forms designer. **This project will not currently compile from sources, due to being incomplete. The available sources are here for reference only.**

Once the library is installed via NuGet, all available controls will show in the toolbox. These controls can be dragged and dropped to the parent control (typically a form) in the exact same way as any other control. The controls should be configured using the Property Window, or in code, as deemed appropriate. See the Wiki for guidance on getting started with specific controls.

## Contributors & Contributing

The following have made significant contributions to SharpVNC Core:
The following have made significant contributions to Better Controls:

<a href="https://github.com/jamiehighfield/jamiehighfield/graphs/contributors">
<img src="https://contrib.rocks/image?repo=jamiehighfield/jamiehighfield" />
Expand Down

0 comments on commit 1f6275c

Please sign in to comment.