GSoC/2019/StatusReports/Albertoefg: Difference between revisions

From KDE Community Wiki
< GSoC‎ | 2019‎ | StatusReports
No edit summary
No edit summary
Line 11: Line 11:
* Load AVB
* Load AVB
* Parse SVG
* Parse SVG
* Render SVG as images  
* Render brush tips as images  
* Write a helper parasite class
* Write a parasite class to hold the index
* Write a VectorAnimatedBrush class
* Write a VectorShapeObject class
* Write a helper class to populate the VectorAnimatedBrush class  
* Change brush tip with every dab
* Change brush tip with every dab
* Save AVB
* Save as AVB


=== Project related links ===
=== Project related links ===
Line 27: Line 30:
* '''TODO''': Add screenshots.
* '''TODO''': Add screenshots.
* '''Related blog post''':  [https://albertoefg.info/blog/2019/06/2019-06-09-my_first_two_weeks.html My first two weeks on Google Summer of Code]  
* '''Related blog post''':  [https://albertoefg.info/blog/2019/06/2019-06-09-my_first_two_weeks.html My first two weeks on Google Summer of Code]  
==== Commits and Differentials ====
==== Commits and Differentials ====
* [https://phabricator.kde.org/T10930 Phabricator T10930]
* [https://phabricator.kde.org/T10930 Phabricator T10930]
Line 35: Line 37:


=== Load AVB ===
=== Load AVB ===
* '''Goal''': The Animated Vector Brush file should be loaded and call the proper Class, in this case ''kis_vectoranimated_brush''
* '''Goal''': The Animated Vector Brush file should be loaded and call the proper Class, in this case ''KisVectorAnimatedBrush''
* '''Status''': The implementation is done, the loading of the AVB by the user is using the +import tab.  
* '''Status''': The implementation is done, the loading of the AVB by the user is using the +import tab.  
* '''Related blog post''': [https://albertoefg.info/blog/2019/06/2019-06-09-my_first_two_weeks.html#org54db47c My first two weeks on Google Summer of Code]  
* '''Related blog post''': [https://albertoefg.info/blog/2019/06/2019-06-09-my_first_two_weeks.html#org54db47c My first two weeks on Google Summer of Code]  
Line 52: Line 54:
** [https://invent.kde.org/albertofl/krita/commit/cffe647e8064117fb7ab70c9147ec0ad67c48120 cffe647e: Set brushTipImage from the KoShapePainter]  
** [https://invent.kde.org/albertofl/krita/commit/cffe647e8064117fb7ab70c9147ec0ad67c48120 cffe647e: Set brushTipImage from the KoShapePainter]  


=== Render brush tips as images. ===
=== Render brush tips as images ===
* '''Goal''': The KoShapes should be transformed to QImage as necessary, so Krita can use them to set ''brushTipImage'', paint dabs or change the size of the brush tip.
* '''Goal''': The KoShapes should be transformed to QImage as necessary, so Krita can use them to set ''brushTipImage'', paint dabs or change the size of the brush tip.
* '''Status''': Done.
* '''Status''': Done.
Line 62: Line 64:
** [https://invent.kde.org/albertofl/krita/commit/b024e4fb08ce78d438a0f9b081ad1a1dc3d0c548 b024e4fb: Render QImages only once]  
** [https://invent.kde.org/albertofl/krita/commit/b024e4fb08ce78d438a0f9b081ad1a1dc3d0c548 b024e4fb: Render QImages only once]  


 
=== Write a parasite class to hold the index ===
=== Write a helper parasite class ===
* '''Goal''': Write a parasite class that will aid ''KisVectorAnimatedBrush'' class, holding the values of the Index and related data.
* '''Goal''': Write a class that will aid the ''kis_vectoranimatedbrush'' class, holding the values of the Index and related data.
* '''Status''': In Progress. Although the majority of the class works now, there is a need for comments and cleaning. It can also be extended to add more functionality like different types of sequences: tilt, velocity, etc.
* '''Status''': In Progress. Although the majority of the class works now, there is a need for comments and cleaning.
* Related blog post: [https://albertoefg.info/blog/2019/07/implementing_a_derivated_class_of_kis_brushes_pipe.html Implementing a derivated class of kis_brushes_pipe]  
* Related blog post: [https://albertoefg.info/blog/2019/07/implementing_a_derivated_class_of_kis_brushes_pipe.html Implementing a derivated class of kis_brushes_pipe]  
==== Commits and Differentials ====
==== Commits and Differentials ====
Line 72: Line 73:
** [https://invent.kde.org/albertofl/krita/commit/4d3fbd9b40260b21f138e6df30495fe0c6b3c4f3 4d3fbd9b: Fix the segmentation fault]  
** [https://invent.kde.org/albertofl/krita/commit/4d3fbd9b40260b21f138e6df30495fe0c6b3c4f3 4d3fbd9b: Fix the segmentation fault]  


=== Write a KisVectorAnimatedBrush class ===
* '''Goal''': Write a the class ''KisVectorAnimatedBrush'' that will inherit from ''KisBrushesPipe'' to work as a brush pipe of VectorShapeObject brushes, it will also have a Private struct to hold a KisVectorHelperPipe object.
* '''Status''': In Progress. The class is mostly done, however it can be extended to get more functionality.
* '''Related blog post''': To be written
==== Commits and Differentials ====
* [https://phabricator.kde.org/T10930 Phabricator T10930]
** [https://invent.kde.org/albertofl/krita/commit/ddee5b98b3aacf2cbed764f3c650167243e17a29 ddee5b98: Load Vector Animated Brush]
** [https://invent.kde.org/albertofl/krita/commit/058756d2f898127d4751bbda1b40a758e7233e3e 058756d2: Intitalize Private struct to hold KisVectorHelperPipe object]
=== Write a VectorShapeObject class ===
* '''Goal''': Write a class that will work as a single brush that will hold a single KoShape and a single QImage, a series of objects of this class will populate the VectorAnimatedBrush class, using the KisVectorHelperPipe class.
* '''Status''': Done.
* '''Related blog post''': To be written
==== Commits and Differentials ====
* [https://phabricator.kde.org/T10930 Phabricator T10930]
** [https://invent.kde.org/albertofl/krita/commit/eae68aa720867cc0c94a54caca7abf2b474a2d67 eae68aa7: Add KisVectorHelperPipe Class]
=== Write a Helper Pipe class to populate the KisVectorAnimatedBrush ===
* '''Goal''': Write a helper class for ''KisVectorAnimatedBrush'' that will aid holding a parasite object of the class written earlier, and populate the pipe brush with VectorShapeObject brushes.
* '''Status''': In Progress. As of right now the images are being changed with every dab but it could be done in a faster way, not using ''prepareForSeqNo'' or limiting the amount of times it runs.
* '''Related blog post''': To be written
==== Commits and Differentials ====
* [https://phabricator.kde.org/T10930 Phabricator T10930]
** [https://invent.kde.org/albertofl/krita/commit/eae68aa720867cc0c94a54caca7abf2b474a2d67 eae68aa7: Add KisVectorHelperPipe Class]


=== Change brush tip with every dab. ===
=== Change brush tip with every dab ===
* '''Goal''': Change the ''brushTipimage'' with every dab
* '''Goal''': Change the ''brushTipimage'' with every dab
* '''Status''': In Progress. As of right now the images are being changed with every dab but it could be done in a faster way, not using ''prepareForSeqNo'' or limiting the amount of times it runs.
* '''Status''': In Progress. As of right now the images are being changed with every dab but it could be done in a faster way, not using ''prepareForSeqNo'' or limiting the amount of times it runs.
Line 81: Line 106:
** [https://invent.kde.org/albertofl/krita/commit/2ed1c1d5acd7e5098a85f4948893ff52cfd52ac9 2ed1c1d5: Fix iteration of shapesToimages]  
** [https://invent.kde.org/albertofl/krita/commit/2ed1c1d5acd7e5098a85f4948893ff52cfd52ac9 2ed1c1d5: Fix iteration of shapesToimages]  


** Save as AVB.
=== Save as AVB ===
- TODO
- TODO

Revision as of 23:34, 22 August 2019

Krita: Animated Vector Brush

Summary

  • Project Name: Animated Vector Brush for Krita
  • Proposal: Google Docs Proposal
  • Abstract: This projects aims to implement an Animated Vector Brush for Krita, which uses SVG as a source file for the brush tips. The purpose of an animated brush is to change the brush tips automatically with every dab on the canvas. This allows for a quick way to paint different images, create random and fun designs, and explore new ways to paint that are not easy in physical world. In the other hand, using SVG as a source makes it easy to share the brush tips as they are saved as plain text, as opposed to raster image brushes.

Project Goals

  • Write documentation for end users as per the Krita Contribution Guide.
  • Define the structure of the SVG file containing the source tips for the Animated Vector Brush
  • Load AVB
  • Parse SVG
  • Render brush tips as images
  • Write a parasite class to hold the index
  • Write a VectorAnimatedBrush class
  • Write a VectorShapeObject class
  • Write a helper class to populate the VectorAnimatedBrush class
  • Change brush tip with every dab
  • Save as AVB

Project related links

Implementations Status

Write documentation

  • Goal: The documentation should be written for end users as per the Krita Contribution Guide, it should also be sufficient for the users to understand and use the brush.
  • Status: The documentation is mostly done, it is only necessary to add the proper screenshots and update in case of changes.
  • TODO: Add screenshots.
  • Related blog post: My first two weeks on Google Summer of Code

Commits and Differentials

Load AVB

  • Goal: The Animated Vector Brush file should be loaded and call the proper Class, in this case KisVectorAnimatedBrush
  • Status: The implementation is done, the loading of the AVB by the user is using the +import tab.
  • Related blog post: My first two weeks on Google Summer of Code

Commits and Differentials

Parse SVG

  • Goal: The SVG should be parsed and transformed to KoShape as necessary, so Krita can use them to set brushTipImage, paint dabs or change the size of the brush tip.
  • Status: Done.
  • Related blog post: Basic functionality almost ready

Commits and Differentials

Render brush tips as images

  • Goal: The KoShapes should be transformed to QImage as necessary, so Krita can use them to set brushTipImage, paint dabs or change the size of the brush tip.
  • Status: Done.
  • Related blog post: Basic functionality almost ready

Commits and Differentials

Write a parasite class to hold the index

  • Goal: Write a parasite class that will aid KisVectorAnimatedBrush class, holding the values of the Index and related data.
  • Status: In Progress. Although the majority of the class works now, there is a need for comments and cleaning. It can also be extended to add more functionality like different types of sequences: tilt, velocity, etc.
  • Related blog post: Implementing a derivated class of kis_brushes_pipe

Commits and Differentials

Write a KisVectorAnimatedBrush class

  • Goal: Write a the class KisVectorAnimatedBrush that will inherit from KisBrushesPipe to work as a brush pipe of VectorShapeObject brushes, it will also have a Private struct to hold a KisVectorHelperPipe object.
  • Status: In Progress. The class is mostly done, however it can be extended to get more functionality.
  • Related blog post: To be written

Commits and Differentials

Write a VectorShapeObject class

  • Goal: Write a class that will work as a single brush that will hold a single KoShape and a single QImage, a series of objects of this class will populate the VectorAnimatedBrush class, using the KisVectorHelperPipe class.
  • Status: Done.
  • Related blog post: To be written

Commits and Differentials

Write a Helper Pipe class to populate the KisVectorAnimatedBrush

  • Goal: Write a helper class for KisVectorAnimatedBrush that will aid holding a parasite object of the class written earlier, and populate the pipe brush with VectorShapeObject brushes.
  • Status: In Progress. As of right now the images are being changed with every dab but it could be done in a faster way, not using prepareForSeqNo or limiting the amount of times it runs.
  • Related blog post: To be written

Commits and Differentials

Change brush tip with every dab

  • Goal: Change the brushTipimage with every dab
  • Status: In Progress. As of right now the images are being changed with every dab but it could be done in a faster way, not using prepareForSeqNo or limiting the amount of times it runs.
  • Related blog post: To be written

Commits and Differentials

Save as AVB

- TODO