Valentin s'est attaqué aux filets, aux hachures et à GTK avec Inkscape pendant l'été 2019

Lorsque notre communauté recherche des candidat·e·s au Google Summer of Code (GSoC), nous espérons trouver des personnes curieuses du projet et du logiciel. Une partie du processus de candidature exige que les candidat·e·s réalisent une tâche simple pour le projet afin de témoigner de leurs compétences et de leur compréhension.

Au début de l'année 2019, Valentin (@vanntile) a rejoint la communauté, a pris en charge plusieurs tâches et a décrit les contours d'un projet sur lequel il voulait travailler en tant qu'étudiant au GSoC.

« J'ai courtisé l'expérience au GSoC pendant toute une année, à partir de la première fois que j'ai entendu parler de ce programme. Lorsque j'ai vu qu'Inkscape était l'une des organisations candidates, un programme que j'utilisais depuis si longtemps, j'ai décidé de devenir l'un des candidats », a dit Valentin, qui nous salue depuis Bucarest en Roumanie.

Pendant l'été, notre étudiant du GSoC, non content de seulement connaître le programme, s'est impliqué dans notre communauté en ligne. Valentin a apporté sa curiosité, sa détermination et ses compétences de développement au projet. Le développeur central Tavmjong Bah (@Tavmjong) a parrainé Valentin pendant son travail.

Valentin a proposé de travailler sur des prothèses d'émulation en JavaScript[?] pour améliorer le rendu des images dans les navigateurs pour les filets de dégradés et les fonds en hachures. Le projet est parti de là, puis la contribution de Valentin est allée jusqu'à un travail sur les filets de dégradés et les hachures pour permettre aux utilisateurs de les utiliser plus facilement et avec moins de savoir technique.

Son travail de développement sur la prothèse pour le filet de dégradé avait pour but d'améliorer la qualité du code en passant à « une syntaxe JavaScript moderne sans perte de performance [et] augmentant la performance, si possible ». La partie suivante de son travail a conduit Valentin à étudier des théories dans des livres de mathématiques (l'interpolation bilinéaire est à la fois grandiose et complexe, d'après lui) et Wikipédia pour résoudre le problème.
 

Evolution of the mesh rendering script output
Évolution de la sortie du script de rendu de filets

« Les hachures », a-t-il expliqué, « sont des serveurs de dessin spécialisés[?] qui répètent un ou plusieurs chemins-hachures à l'aide d'une formule fixe basée sur les attributs de l'élément — x, y, rotation et pas[?]. »

Valentin a travaillé sur l'amélioration de l'interface utilisateur et l'utilisabilité des hachures dans Inkscape. Cela signifie ajouter « des poignées pour modifier les hachures, qui apparaissent pour un élément avec des hachures et avec un ensemble spécifique d'outils, par exemple l'outil Nœuds. En utilisant les poignées, vous pouvez pivoter, redimensionner et translater le serveur de dessin. »

While he experienced a steep learning curve with managing the components of the user interface, in the end, "the best source of understanding complex behavior using GTK widgets[?] was actually Inkscape."

Working on "improving the actual Inkscape interface and functionality concerning paint servers", Valentin explained that "This was completely different for me, passing from a scripting language, JavaScript, to a programming one, C++, and, especially, the GTK framework to manage the interface".

Then Valentin worked on improving the support of hatches in Inkscape. "My work tried to add small UI elements available to other paint servers (i.e. patterns) to the hatches and introduce a new dialog in Inkscape with the purpose of previewing and setting the paint server." This work will serve in the development of a new tool in the program to manage, preview and set all types of paints from resource files (i.e. an SVG file that contains a list of patterns, hatches, swatches, etc.) within Inkscape and from users.

Inkscape definitely gained much through Valentin's contribution, which continues to this day. Understanding how contributing to Inkscape helped him is also part of our learning as a community.

Among the takeaways for Valentin, include code-specific experiences and learning, he learned that "patience is required when exploring solving a problem; on a decentralized project, involvement in secondary features is the duty of the independent developers, not the main team, and asking the community can be the greatest source of truth."

Finally, he said, "I appreciate everyone from the Inkscape team, whether they are in the dev, ux or the vectors teams. Thank you!"

We thank Valentin for his ongoing contribution to this project. We're excited to see what he contributes next!

Check out Valentin's full-length documentation on the work he accomplished during his GSoC in 2019.

If you're interested in becoming an Inkscape contributor, head here and consider joining our community. If you're interested in applying for GSOC 2020, head here.

Glossaire

prothèse d'émulation
du code JavaScript qui ajoute des fonctionnalités aux navigateurs web. Les fonctions ajoutées ont été décrites par le standard à un moment donné, mais les navigateurs ne les ont jamais mises en œuvre, ce qui a amené à retirer les filets de dégradés et les hachures du standard. Ainsi, Valentin a travaillé pour que les SVG avec des filets de dégradés et des hachures s'affichent correctement dans un navigateur, même si le navigateur ne connaît rien de spécifique sur les filets et les hachures.
serveur de dessin
d'après la spécification du W3C, « une méthode qui permet au fond ou au contour d'un objet d'être défini par une ressource trouvée ailleurs. Il permet à des ressources d'être réutilisées dans un document. » Les serveurs de dessin notables (adoptés ou non au moment de l'écriture de cette définition) incluent les couleurs plates, les dégradés, les filets de dégradés, les motifs et les hachures. Inkscape utilise tous ces serveurs de dessin, parfois à travers différents dialogues et outils d'interface graphique.
pas
la distance entre les répétitions des unités de hachures le long de l'axe défini par la rotation.
composant
élément d'interface graphique.