Dot.Blog

C#, XAML, Xamarin, UWP/Android/iOS

Silverlight 4 libère le chemin (Path n’est plus sealed)

[new:27/06/2010]Parmi toutes les choses qui ont changé et toutes les nouveautés de Silverlight 4, forcément il y en a qui passent plus inaperçues. Des petits riens qui parfois peuvent changer la vie du développeur. Ici c’est le simple mot “sealed” qui a été supprimé dans le code source de la classe Path. Un truc insignifiant. Mais riche en perspectives…

Petit mais costaud

Le changement est petit, certes. Minuscule face à l’ajout du RichTextArea et de bien autres nouveautés de Silverlight 4. Mais en supprimant “sealed” (scellé) l’équipe de SL nous permet de créer nos propres contrôles dérivant de Path sans avoir à coder tout depuis zéro, ce qui était le cas jusqu’à lors.

Par exemple, les propriétés de dépendances telles Fill, Stroke, et toute la logique d’une “shape” (forme), tout cela est disponible et exploitable, il suffit juste de fournir le nouveau dessin.

Simple et pratique

Les application Silverlight sont orientées média au sens large. Le graphisme y tient un rôle essentiel. Tout ce qui peut simplifier la création d’objets graphiques est donc un avantage.

Certes je ne vais pas vous dire que fabriquer ses propres formes est une activité ultra essentielle et extrêmement fréquente. Mais il y a beaucoup d’applications qui nécessitent des symboles par exemple. Disposer d’un peu plus que du Rectangle et de l’Ellipse c’est tout de même plus confortable !

D’ailleurs Silverlight 4 est fourni avec plusieurs nouvelles formes comme la flèche, des polygones, etc.

Ecrivez vos propres formes

Ecrire ses propres formes fait ainsi partie du travail de mise en place d’une interface visuelle. Aujourd’hui ce travail est simplifié par la possibilité d’écrire des classes héritant de Path. On ne va pas en faire des tonnes non plus, mais si on n’en parle pas, je suis certain que peu de gens se rendront compte que Path n’est plus sealed !

Pour terminer voici un exemple, extrait du code source d’ailleurs des nouvelles formes proposées avec Silverlight 4. Le triangle est une figure magique, parfaite même (pour les anciens Grecs) et chargée de symbolisme. C’est donc un bon exemple :-)

   1: public class Triangle : Path
   2:    {
   3:        public Triangle()
   4:        {
   5:            CreatePathData(0,0);
   6:        }
   7:  
   8:        private double lastWidth = 0;
   9:        private double lastHeight = 0;
  10:        private PathFigure figure;
  11:  
  12:        private void AddPoint(double x, double y)
  13:        {
  14:            LineSegment segment = new LineSegment();
  15:            segment.Point = new Point(x + 0.5 * StrokeThickness, 
  16:                y + 0.5 * StrokeThickness);
  17:            figure.Segments.Add(segment);
  18:        }
  19:  
  20:        private void CreatePathData(double width, double height)
  21:        {
  22:            // in order to fit in our layout slot we need to reduce the size of the stroke
  23:            height -= this.StrokeThickness;
  24:            width -= this.StrokeThickness;
  25:  
  26:            // needed to avoid a layout loop
  27:            if (lastWidth == width && lastHeight == height) return;
  28:            lastWidth = width;
  29:            lastHeight = height;
  30:  
  31:            var geometry = new PathGeometry();
  32:            figure = new PathFigure();
  33:            figure.StartPoint = new Point(0 + 0.5 * StrokeThickness, height + 0.5 * StrokeThickness);
  34:            AddPoint(width, height);
  35:            AddPoint(width / 2, 0);
  36:            AddPoint(0, height);
  37:            figure.IsClosed = true;
  38:            geometry.Figures.Add(figure);
  39:            this.Data = geometry;
  40:        }
  41:        
  42:        protected override Size MeasureOverride(Size availableSize)
  43:        {
  44:            return availableSize;
  45:        }
  46:  
  47:        protected override Size ArrangeOverride(Size finalSize)
  48:        {
  49:            CreatePathData(finalSize.Width, finalSize.Height);
  50:            return finalSize;
  51:        }
  52:    }
  53:  

Le principe est simple : sous-classez Path, ajoutez la logique que vous voulez pour le rendering de votre forme, et fournissez des surcharges pour les méthodes MeasureOverride et ArrangeOverride. C’est tout.

De la tête à Toto aux montres molles de Dali, le choix vous appartient !

Conclusion

Savoir donner de l’importance à l’insignifiant est souvent la clé des idées géniales… L’absence d’un petit mot dans le source de Silverlight 4 ouvre des voies nouvelles. Cela méritait bien un billet !

Stay Tuned !

blog comments powered by Disqus