diff --git a/reference_manual/filters/edge_detection.rst b/reference_manual/filters/edge_detection.rst --- a/reference_manual/filters/edge_detection.rst +++ b/reference_manual/filters/edge_detection.rst @@ -17,7 +17,7 @@ Edge detection filters focus on finding sharp contrast or border between colors in an image to create edges or lines. -Since 4.0 there's only two edge detection filters. +Since 4.0 there are only two edge detection filters. Edge Detection -------------- diff --git a/reference_manual/preferences/performance_settings.rst b/reference_manual/preferences/performance_settings.rst --- a/reference_manual/preferences/performance_settings.rst +++ b/reference_manual/preferences/performance_settings.rst @@ -15,7 +15,7 @@ Performance Settings ==================== -:program:`Krita`, as a painting program, juggles a lot of data around, like the brushes you use, the colours you picked, but primarily, each pixel in your image. Due to this, how :program:`Krita` organises where it stores all the data can really speed up :program:`Krita` while painting, just like having an organised artist's workplace can really speed up the painting process in real life. +:program:`Krita`, as a painting program, juggles a lot of data around, like the brushes you use, the colors you picked, but primarily, each pixel in your image. Due to this, how :program:`Krita` organizes where it stores all the data can really speed up :program:`Krita` while painting, just like having an organized artist's workplace can really speed up the painting process in real life. These preferences allow you to configure :program:`Krita's` organisation, but all do require you to restart :program:`Krita`, so it can do this organisation properly. @@ -29,7 +29,7 @@ Memory Limit This is the maximum space :program:`Krita` will reserve on your RAM on startup. It's both available in percentages and Bytes, so you can specify precisely. :program:`Krita` will not take up more space than this, making it safe for you to run an internet browser or music on the background. Internal Pool - A feature for advanced computer users. This allows :program:`Krita` to organise the area it takes up on the virtual working desk before putting its data on there. Like how a painter has a standard spot for their canvas, :program:`Krita` also benefits from giving certain data it uses its place (a memory pool), so that it can find them easily, and it doesn't get lost amongst the other data (memory fragmentation). It will then also not have to spent time finding a spot for this data. + A feature for advanced computer users. This allows :program:`Krita` to organize the area it takes up on the virtual working desk before putting its data on there. Like how a painter has a standard spot for their canvas, :program:`Krita` also benefits from giving certain data it uses its place (a memory pool), so that it can find them easily, and it doesn't get lost among the other data (memory fragmentation). It will then also not have to spent time finding a spot for this data. Increasing this of course means there's more space for this type of data, but like how filling up your working desk with only one big canvas will make it difficult to find room for your paints and brushes, having a large internal pool will result in :program:`Krita` not knowing where to put the other non-specific data. @@ -67,13 +67,13 @@ ~~~~~ Limit frames per second while painting. This makes the canvas update less often, which means Krita can spend more time calculating other things. Some people find fewer updates unnerving to watch however, hence this is configurable. -Debuglogging of OpenGL framerate +Debug logging of OpenGL framerate Will show the canvas framerate on the canvas when active. Debug logging for brush rendering speed. Will show numbers indicating how fast the last brush stroke was on canvas. -Disable vector optimisations (For AMD CPUs) - Vector optimisations are a special way of asking the CPU to do maths, these have names such as SIMD and AVX. These optimisations can make Krita a lt faster when painting, except when you have a AMD CPU under windows. There seems to be something strange going on there, so just deactivate them then. -Enable Progress Reporting +Disable vector optimizations (for AMD CPUs) + Vector optimizations are a special way of asking the CPU to do maths, these have names such as SIMD and AVX. These optimizations can make Krita a lot faster when painting, except when you have a AMD CPU under windows. There seems to be something strange going on there, so just deactivate them then. +Enable progress reporting This allows you to toggle the progress reporter, which is a little feedback progress bar that shows up in the status bar when you let Krita do heavy operations, such as heavy filters or big strokes. The red icon next to the bar will allow you to cancel your operation. This is on by default, but as progress reporting itself can take up some time, you can switch it off here. Performance logging This enables performance logging, which is then saved to the ``Log`` folder in your ``working directory``. Your working directory is where the auto save is saved at as well. diff --git a/reference_manual/tools/colorize_mask.rst b/reference_manual/tools/colorize_mask.rst --- a/reference_manual/tools/colorize_mask.rst +++ b/reference_manual/tools/colorize_mask.rst @@ -17,26 +17,26 @@ |toolcolorizemask| -A tool for quickly coloring lineart, the Colorize Mask Editing tool can be found next to the gradient tool on your toolbox. +A tool for quickly coloring line art, the Colorize Mask Editing tool can be found next to the gradient tool on your toolbox. -This feature is technically already in 3.1, but disabled by default because we had not optimised the filling algorithm for production use yet. To enable it, find your krita configuration file, open it in notepad, and add "disableColorizeMaskFeature=false" to the top. Then restart Krita. Its official incarnation is in 4.0. +This feature is technically already in 3.1, but disabled by default because we had not optimized the filling algorithm for production use yet. To enable it, find your krita configuration file, open it in notepad, and add "disableColorizeMaskFeature=false" to the top. Then restart Krita. Its official incarnation is in 4.0. Usage ----- This tool works in conjunction with the colorize mask, and the usage is as follows: -For this example, we'll be using the ghost lady also used to explain masks on the basic concepts page. +For this example, we'll be using the ghost lady also used to explain masks on :ref:`the basic concepts page `. .. image:: /images/en/Krita_4_0_colorize_mask_usage_01.png :width: 800 :align: center This image has the line art for the lady separated from the background, and what's more, the background is made up of two layers: one main and one for the details. -First, select the colorize mask editing tool while having the lineart layer selected. |mouseleft| the canvas will add a colorize mask to the layer. -You can also |mouseright| the line art layer, and then :menuselection:`Add --> Colorize Mask`. The line art will suddenly become really weird, this is the prefiltering which are filters through which we put the lineart to make the algorithm easier to use. The tool options overview below shows which options control that. +First, select the colorize mask editing tool while having the line art layer selected. |mouseleft| the canvas will add a colorize mask to the layer. +You can also |mouseright| the line art layer, and then :menuselection:`Add --> Colorize Mask`. The line art will suddenly become really weird, this is the prefiltering which are filters through which we put the line art to make the algorithm easier to use. The tool options overview below shows which options control that. .. image:: /images/en/Krita_4_0_colorize_mask_usage_02.png :width: 800 @@ -74,7 +74,7 @@ If you want to edit the strokes again, re-enable :guilabel:`Edit Key Strokes`. -Now, the colorize mask, being a mask, can also be added to a group of line art layers. It will then use the composition of the whole group as the line art. This is perfect for our background which has two separate line art layers. It also means that the colorize mask will be disabled when added to a group with pass-through enabled, because those have no final composition. You can recognise a disabled colorize mask because its name is stricken through. +Now, the colorize mask, being a mask, can also be added to a group of line art layers. It will then use the composition of the whole group as the line art. This is perfect for our background which has two separate line art layers. It also means that the colorize mask will be disabled when added to a group with pass-through enabled, because those have no final composition. You can recognize a disabled colorize mask because its name is stricken through. To add a colorize mask to a group, select the group and |mouseleft| the canvas with the Colorize Mask editing tool, or |mouseright| the layer to :menuselection:`Add --> Colorize Mask`. @@ -116,7 +116,7 @@ Update Run the colorize mask algorithm. The progress bar for updates on a colorize mask shows only in the layer docker. Edit key strokes - Put the mask into edit mode. In edit mode, it will also show the 'pre-filtering' on the line-art, which is for example a blur filter for gap closing. + Put the mask into edit mode. In edit mode, it will also show the 'prefiltering' on the line art, which is for example a blur filter for gap closing. Show output Show the output of the colorize mask. If :guilabel:`Edit key strokes` is active, this will be shown semi-transparently, so it will be easy to recognise the difference between the strokes and the output. diff --git a/user_manual/python_scripting/krita_python_plugin_howto.rst b/user_manual/python_scripting/krita_python_plugin_howto.rst --- a/user_manual/python_scripting/krita_python_plugin_howto.rst +++ b/user_manual/python_scripting/krita_python_plugin_howto.rst @@ -27,7 +27,7 @@ Getting Krita to recognize your plugin -------------------------------------- -A script in Krita has two components - the script directory (holding your script's Python files) and a ".desktop" file that Krita uses to load and register your script. For Krita to load your script both of these must put be in the pykrita subdirectory of your Krita resources folder (on Linux ~/.local/share/krita/pykrita). To find your resources folder start Krita and click the :menuselection:`Settings --> Manage Resources menu item`. This will open a dialog box. Click the :guilabel:`Open Resources Folder` button. This should open a file manager on your system at your Krita resources folder. See the `API `_ docs under "Auto starting scripts". If there is no pykrita subfolder in the Krita resources directory use your file manager to create one. +A script in Krita has two components - the script directory (holding your script's Python files) and a ".desktop" file that Krita uses to load and register your script. For Krita to load your script both of these must put be in the pykrita subdirectory of your Krita resources folder (on Linux ~/.local/share/krita/pykrita). To find your resources folder start Krita and click the :menuselection:`Settings --> Manage Resources` menu item. This will open a dialog box. Click the :guilabel:`Open Resources Folder` button. This should open a file manager on your system at your Krita resources folder. See the `API `_ docs under "Auto starting scripts". If there is no pykrita subfolder in the Krita resources directory use your file manager to create one. Scripts are identified by a file that ends in a .desktop extension that contain information about the script itself. @@ -140,7 +140,7 @@ if you now restart Krita, you will have an action called "My Script". It still doesn't do anything, because we haven't connected it to a script. -So, lets make a simple export document script. Add the following to the extension class, make sure it is above where you add the extension to Krita: +So, let's make a simple export document script. Add the following to the extension class, make sure it is above where you add the extension to Krita: .. code:: python @@ -172,14 +172,14 @@ action.triggered.connect(self.exportDocument) -This is an example of a `signal/slot connection `_, which QT applications like Krita use a lot. We'll go over how to make our own signals and slots a bit later. +This is an example of a `signal/slot connection `_, which Qt applications like Krita use a lot. We'll go over how to make our own signals and slots a bit later. Restart Krita and your new action ought to now export the document. Creating configurable keyboard shortcuts ---------------------------------------- -Now, your new action doesn't show up in :menuselection:`Settings --> configure Krita --> Keyboard Shortcuts`. +Now, your new action doesn't show up in :menuselection:`Settings --> Configure Krita --> Keyboard Shortcuts`. Krita, for various reasons, only adds actions to the shortcuts menu when they are present in an .action file. The action file to get our action to be added to shortcuts should look like this: @@ -215,21 +215,21 @@ text The text that it will show in the shortcut editor. whatsThis - The text it will show when a QT application specifically calls for 'what is this', which is a help action. + The text it will show when a Qt application specifically calls for 'what is this', which is a help action. toolTip The tool tip, this will show up on hover-over. iconText The text it will show when displayed in a toolbar. So for example, "Resize Image to New Size" could be shortened to "Resize Image" to save space, so we'd put that in here. activationFlags This determines when an action is disabled or not. activationConditions - No clue + This determines activation conditions (e.g. activate only when selection is editable). See `the code `_ for examples. shortcut Default shortcut. isCheckable Whether it is a checkbox or not. statusTip - No Clue. + The status tip that is displayed on a status bar. Save this file as "myplugin.action" where myplugin is the name of your plugin. The action file should be saved, not in the pykrita resources folder, but rather in a resources folder named "actions". (So, share/pykrita is where the python plugins and desktop files go, and share/actions is where the action files go) Restart Krita. The shortcut should now show up in the shortcut action list. @@ -263,11 +263,11 @@ DockWidgetFactoryBase.DockRight The location. These can be DockTornOff, DockTop, DockBottom, DockRight, DockLeft, or DockMinimized MyDocker - Replace this with the class name of the docker your wanna add. + Replace this with the class name of the docker you want to add. -So, if we add our export document function we created in the extension section to this docker code, how do we allow the user to activate it? First, we'll need to do some QT GUI coding: Let's add a button! +So, if we add our export document function we created in the extension section to this docker code, how do we allow the user to activate it? First, we'll need to do some Qt GUI coding: Let's add a button! -Krita standardly uses pyQT, but their documentation is pretty bad, mostly because the regular QT documentation is really good, and you'll often find that the pyQT documentation of a class, say, `QWidget `_ is like a weird copy of the regular `QT documentation `_ for that class. +By default, Krita uses PyQt, but its documentation is pretty bad, mostly because the regular Qt documentation is really good, and you'll often find that the PyQT documentation of a class, say, `QWidget `_ is like a weird copy of the regular `Qt documentation `_ for that class. Anyway, what we need to do first is that we need to create a QWidget, it's not very complicated, under setWindowTitle, add: @@ -301,21 +301,21 @@ Restart Krita and the button should now be laid out nicely. -PyQT Signals and Slots +PyQt Signals and Slots ---------------------- -We've already been using pyqt signals and slots already, but there are times where you want to create your own signals and slots. -`As pyQt's documentation is pretty difficult to understand `_, and the way how signals and slots are created is very different from C++ qt, we're explaining it here: +We've already been using PyQt signals and slots already, but there are times where you want to create your own signals and slots. +`As pyQt's documentation is pretty difficult to understand `_, and the way how signals and slots are created is very different from C++ Qt, we're explaining it here: -All python functions you make in pyQt can be understood as slots, meaning that they can be connected to signals like Action.triggered or QPushButton.clicked. However, QCheckBox has a signal for toggled, which sends a boolean. How do we get our function to accept that boolean? +All python functions you make in PyQt can be understood as slots, meaning that they can be connected to signals like Action.triggered or QPushButton.clicked. However, QCheckBox has a signal for toggled, which sends a boolean. How do we get our function to accept that boolean? First, make sure you have the right import for making custom slots: ``from PyQt5.QtCore import pyqtSlot`` (If there's from ``PyQt5.QtCore import *`` already in the list of imports, then you won't have to do this, of course) -Then, you need to add a pyQt slot definition before your function: +Then, you need to add a PyQt slot definition before your function: .. code:: python @@ -327,7 +327,7 @@ print("The checkbox is"+enabledString) -Then, when you ave created your checkbox, you can do something like myCheckbox.toggled.connect(self.myFunction) +Then, when you have created your checkbox, you can do something like myCheckbox.toggled.connect(self.myFunction) Similarly, to make your own PyQt signals, you do the following: