All Projects → dotnet → Graphicscontrols

dotnet / Graphicscontrols

Licence: mit
Experimental GraphicsControls - Build drawn controls (Cupertino, Fluent and Material)

Projects that are alternatives of or similar to Graphicscontrols

Xf Material Library
A Xamarin Forms library for implementing Material Design
Stars: ✭ 537 (+260.4%)
Mutual labels:  xamarin, material, xamarin-forms
Htmllabelplugin
Use this Xamarin.Forms plugin to display HTML content into a label.
Stars: ✭ 119 (-20.13%)
Mutual labels:  xamarin, xamarin-forms
Xdtoxf
Adobe XD Plugin to export assets to Xamarin.Forms XAML Styles and Resources
Stars: ✭ 118 (-20.81%)
Mutual labels:  xamarin, xamarin-forms
Xamarin Forms Carouselview
A Xamarin.Forms custom control recipe that mirrors the functionality of the CarouselPage - except the "pages" are simply Content Views.
Stars: ✭ 147 (-1.34%)
Mutual labels:  xamarin, xamarin-forms
Aivisualprovision
Connect(); 2018 - AI Visual Provision Sample App
Stars: ✭ 116 (-22.15%)
Mutual labels:  xamarin, xamarin-forms
Awesome Fabulous
A hand-curated list of awesome resources when using Fabulous 📱
Stars: ✭ 117 (-21.48%)
Mutual labels:  xamarin, xamarin-forms
Simpleauth
The Simplest way to Authenticate and make Rest API calls in .Net
Stars: ✭ 148 (-0.67%)
Mutual labels:  xamarin, xamarin-forms
Latestversionplugin
LatestVersion Plugin for Xamarin and Windows apps
Stars: ✭ 99 (-33.56%)
Mutual labels:  xamarin, xamarin-forms
Arcgis Toolkit Dotnet
Toolkit for ArcGIS Runtime SDK for .NET
Stars: ✭ 125 (-16.11%)
Mutual labels:  xamarin, xamarin-forms
Xamarin.forms.breadcrumb
This is a breadcrumb navigation control that is complete automatic and uses the Navigation stack and page titles to generate the breadcrumbs.
Stars: ✭ 130 (-12.75%)
Mutual labels:  xamarin, xamarin-forms
Xamarin Docs
Xamarin Documentation - public content repo
Stars: ✭ 136 (-8.72%)
Mutual labels:  xamarin, xamarin-forms
Xaml Code Experiences
A collection of the experiences I have collected during days of Xamarin and Wpf, while following the MVVM design pattern.
Stars: ✭ 114 (-23.49%)
Mutual labels:  xamarin, xamarin-forms
Dayvsnight
DayVsNight - A Xamarin.Forms UI Challenge
Stars: ✭ 112 (-24.83%)
Mutual labels:  xamarin, xamarin-forms
Xamarin Forms Perf Playground
Xamarin.Forms Performance Playground (Layouts, Bindings, XAMLC, etc)
Stars: ✭ 119 (-20.13%)
Mutual labels:  xamarin, xamarin-forms
Customnavigationbarsample
Navigation Bar Customization in Xamarin Forms
Stars: ✭ 104 (-30.2%)
Mutual labels:  xamarin, xamarin-forms
Crossplatformdisktest
Windows, macOS and Android storage (HDD, SSD, RAM) speed testing/performance benchmarking app
Stars: ✭ 123 (-17.45%)
Mutual labels:  xamarin, xamarin-forms
Plugin.audiorecorder
Audio Recorder plugin for Xamarin and Windows
Stars: ✭ 140 (-6.04%)
Mutual labels:  xamarin, xamarin-forms
Art Plant Mall
Xamarin.Forms goodlooking UI sample.
Stars: ✭ 96 (-35.57%)
Mutual labels:  xamarin, xamarin-forms
Xamarin Plugins
Cross-platform Plugins for Xamarin, Xamarin.Forms and Windows
Stars: ✭ 97 (-34.9%)
Mutual labels:  xamarin, xamarin-forms
Plugin.localnotification
The local notification plugin provides a way to show local notifications from Xamarin Forms apps .
Stars: ✭ 124 (-16.78%)
Mutual labels:  xamarin, xamarin-forms

Experimental GraphicsControls

Xamarin.Forms allows you to define the user interface once for multiple platforms. It offers an abstraction layer that is converted on each platform into native controls.

While the native controls proposal is great as it offers the native experience (appearance, performance, etc). it has certain adjacent limitations like customization possibilities etc.

What if you could choose at any time between using the native control or a drawn control with the native look and feel?

GraphicsControls is a library that offers the controls available in Xamarin.Forms Visual allowing to choose between Cupertino, Fluent and Material but, instead of creating native controls, are drawn controls. This project is a .NET experiment related to Xamarin / .NET MAUI with different tests to validate the interest and feasibility of drawn controls but is not covered by Microsoft support.

There is currently support for:

  • iOS using CoreGraphics
  • macOS using CoreGraphics
  • Android using Android Graphics
  • Tizen using SkiaSharp

Soon, support will be added to:

  • Linux using SkiaSharp
  • UWP using Win2D
  • WPF using SharpDX

NOTE: Are you interested in having more information? You have a detailed video!.

System.Graphics

This project is using System.Graphics. System.Graphics is a cross-platform graphics library for iOS, Android, Windows, macOS and Linux completely in C#. With this library you can use a common API to target multiple abstractions allowing you to share your drawing code between platforms, or mix and match graphics implentations within a singular application.

What controls are available?

Currently there are the following controls:

  • ActivityIndicator (Cupertino, Fluent, Material)
  • BoxView
  • Button (Cupertino, Fluent, Material)
  • CheckBox (Cupertino, Fluent, Material)
  • Editor (Cupertino, Fluent, Material)
  • Entry (Cupertino, Fluent, Material)
  • Frame
  • ProgressBar (Cupertino, Fluent, Material)
  • RadioButton (Cupertino, Fluent, Material)
  • Slider (Cupertino, Fluent, Material)
  • Stepper (Cupertino, Fluent, Material)
  • Switch (Cupertino, Fluent, Material)

Work in progress:

  • DatePicker (Cupertino, Fluent, Material)
  • TimePicker (Cupertino, Fluent, Material)

The controls have the same properties and events as those existing in Xamarin.Forms.

Features

The main features are:

Drawn controls

The controls are drawn getting a pixel perfect option to adjust in the same way on all the platforms.

Easy to extend

Do you want to extend a drawn control? Create your own control class, inherit from the drawn control and override the Draw method.

public class CustomControl : GraphicsView
{
    public override void Draw(ICanvas canvas, RectangleF dirtyRect)
    {
        base.Draw(canvas, dirtyRect);
    }
}

On the other hand, if you want to modify how a specific layer of an existing control is drawn, you just have to overwrite the method that draws the layer.

public class CustomSlider : Slider
{
    protected override void DrawSliderThumb(ICanvas canvas, RectangleF dirtyRect)
    {
        base.DrawSliderThumb(canvas, dirtyRect);
    }
}

Also can add new layers, delete existing layers or reorganize the priority when drawing the layers.

Dark Theme support

All controls, in the different visual modes (Cupertino, Fluent and Material) supports both light and dark theme.

RTL support (Work in progress)

All controls support RTL.

Mobile & Desktop support

Accesibility support

Building an accessible application ensures that the application is usable by people who approach the user interface with a range of needs and experiences. GraphicsControls will allow to set AutomationProperties, which in turn set native accessibility values.

(Work in progress)

Performance

Some native controls are complex. For example, Entry using Visual Material is made up of different elements. When using it, each of the different elements must be instantiated (the text box, the placeholder text, etc.). Using the drawn control, create an instance of a Canvas and draw the content. The time required to instantiate etc is shorter.

Goals

  • Have pixel-perfect drawn controls working on all the Xamarin.Forms supported platforms.
  • High performance and customization options controls.
  • In the short term, the goal is to have the controls for Xamarin.Forms, in the future they could reach Comet, .NET MAUI, etc.

Contributing

As an experimental project, there are several active areas of development and we're looking for your feedback to help set the direction for this project. Please check it out and let us know any feedback you have on the project by logging issues in this repo.

Thank you!

Copyright and license

Code released under the MIT license.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].