diff options
Diffstat (limited to 'doc/krita/developers-scripting.docbook')
-rw-r--r-- | doc/krita/developers-scripting.docbook | 534 |
1 files changed, 534 insertions, 0 deletions
diff --git a/doc/krita/developers-scripting.docbook b/doc/krita/developers-scripting.docbook new file mode 100644 index 00000000..b4ee3a53 --- /dev/null +++ b/doc/krita/developers-scripting.docbook @@ -0,0 +1,534 @@ +<sect1 id="developers-scripting"> +<title>Scripting</title> + +<para> +In &krita;, you can write scripts in Ruby or Python (the availability of the +interpreters might depend on what your distributions or the administrator of +your machine did install). Here you will find a description of the scripting +API. +</para><para> +Some examples are distributed with &krita;, and you might find them in +<filename>/usr/share/apps/krita/scripts</filename> (or +<filename>/opt/kde/share/apps/krita/scripts</filename>). +</para> + +<sect2 id="developers-scripting-variables"> +<title>Variables in the <classname>Krosskritacore</classname> module</title> + +<itemizedlist> +<listitem><para><varname>KritaDocument</varname> returns a +<classname>Document</classname> object</para></listitem> +<listitem><para><varname>KritaScript</varname> returns a +<classname>ScriptProgress</classname> object</para></listitem> +</itemizedlist> + +<para> +You can retrieve an object using the <function>get</function> function of the +<classname>Krosskritacore</classname> module, in Ruby you will have to write something like that: +<programlisting> +doc = Krosskritacore::get("KritaDocument") +script = Krosskritacore::get("KritaScript") +</programlisting> +</para> + +</sect2> + +<sect2 id="developers-scripting-functions"> +<title>Functions in the <classname>Krosskritacore</classname> module</title> + +<itemizedlist> +<listitem><para>Function: <function>getBrush</function></para><para> +This function returns a <classname>Brush</classname> taken from the list of +&krita; resources. It takes one argument: the name of the brush. +For example (in Ruby): +<programlisting> +Krosskritacore::getBrush("Circle (05)") +</programlisting></para></listitem> + +<listitem><para>Function: <function>getFilter</function></para><para> +This function returns a <classname>Filter</classname> taken from the list of +&krita; resources. It takes one argument: the name of the filter. +For example (in Ruby): +<programlisting> +Krosskritacore::getFilter("invert") +</programlisting></para></listitem> + +<listitem><para>Function: <function>getPattern</function></para><para> +This function returns a <classname>Pattern</classname> taken from the list of +&krita; resources. It takes one argument: the name of the pattern. +For example (in Ruby): +<programlisting> +Krosskritacore::getPattern("Bricks") +</programlisting></para></listitem> + +<listitem><para>Function: <function>loadBrush</function></para><para> +This function loads a <classname>Brush</classname> and then returns it. +It takes one argument: the filename of the brush.</para></listitem> + +<listitem><para>Function: <function>loadPattern</function></para><para> +This function loads a <classname>Pattern</classname> and then returns it. +It takes one argument: the filename of the pattern.</para></listitem> + +<listitem><para>Function: <function>newCircleBrush</function></para><para> +This function returns a <classname>Brush</classname> with a circular shape. It +takes at least two arguments: width and height. It can take two other +arguments: width of the shading, and height of the shading. If the shading +is not specified, no shading will be used. +For example (in Ruby): +<programlisting> +Krosskritacore::newCircleBrush(10,20) # create a plain circle +Krosskritacore::newCircleBrush(10,20,5,10) # create a gradient +</programlisting></para></listitem> + +<listitem><para>Function: <function>newHSVColor</function></para><para> +This function returns a new <classname>Color</classname> with the given HSV +triplet. It takes three arguments: hue component (0 to 255), saturation +component (0 to 255), value component (0 to 255). + +For example (in Ruby): +<programlisting> +Krosskritacore::newHSVColor(255,125,0) +</programlisting></para></listitem> + +<listitem><para>Function: <function>newImage</function></para><para> +This function returns a new <classname>Image</classname>. It takes four arguments: +width, height, colorspace id, name of the image. And in return you get an +<classname>Image</classname> object. +For example (in Ruby): +<programlisting> +Krosskritacore::newImage(10,20, "RGBA", "kikoo") +</programlisting></para></listitem> + +<listitem><para>Function: <function>newRectBrush</function></para><para> +This function returns a <classname>Brush</classname> with a rectangular shape. +It takes at least two arguments: width and height. It can take two other +arguments: width of the shading and height of the shading. If the shading is +not specified, no shading will be used. +For example (in Ruby): +<programlisting> + Krosskritacore::newRectBrush(10,20) # create a plain rectangle + Krosskritacore::newRectBrush(10,20,5,10) # create a gradient +</programlisting></para></listitem> + +<listitem><para>Function: <function>newRGBColor</function></para><para> +This function returns a new <classname>Color</classname> with the given RGB +triplet. It takes three arguments: red component (0 to 255), blue component (0 to +255), green component (0 to 255). +For example (in Ruby): +<programlisting> +Krosskritacore::newRGBColor(255,0,0) # create a red color +Krosskritacore::newRGBColor(255,255,255) # create a white color +</programlisting></para></listitem> +</itemizedlist> +</sect2> + +<sect2 id="developers-scripting-objects"> +<title>Descriptions and function lists for various objects in +<classname>Krosskritacore</classname></title> + +<itemizedlist> +<listitem><para>Object: PaintLayer</para> + +<itemizedlist> +<listitem><para>Function: <function>beginPainting</function></para></listitem> + +<listitem><para>Function: <function>convertToColorspace</function></para><para> +Convert the image to a colorspace. This function takes one argument: the name +of the destination colorspace. +For example (in Ruby): +<programlisting> +image.convertToColorspace("CMYK") +</programlisting></para></listitem> + +<listitem><para>Function: <function>createHistogram</function></para><para> +This function creates a Histogram for this layer. It takes two arguments: +the type of the histogram ("RGB8HISTO"), and 0 if the histogram is linear, or +1 if it is logarithmic.</para></listitem> + +<listitem><para>Function: <function>createHLineIterator</function></para><para> +Create an iterator over a layer, it will iterate on a row. This function takes three arguments: +<varname>x</varname> (start in the row), <varname>y</varname> (vertical +position of the row), width of the row.</para></listitem> + +<listitem><para>Function: <function>createPainter</function></para><para> +This function creates a <classname>Painter</classname> which will allow you to +paint on the layer. </para></listitem> + +<listitem><para>Function: <function>createRectIterator</function></para><para> +Create an iterator over a layer, it will iterate on a rectangular area. This +function takes four arguments: <varname>x</varname>, <varname>y</varname>, +width of the rectangle, height of the rectangle.</para></listitem> + +<listitem><para>Function: <function>createVLineIterator</function></para><para> +Create an iterator over a layer, it will iterate on a column. This function +takes three arguments: <varname>x</varname> (horizontal position of the +column), <varname>y</varname> (start in the column), height of the column.</para></listitem> + +<listitem><para>Function: <function>endPainting</function></para><para> +This function closes the current undo entry and adds it to the history.</para></listitem> + +<listitem><para>Function: <function>fastWaveletTransformation</function></para><para> +Returns the fast wavelet transformation of the layer.</para></listitem> + +<listitem><para>Function: <function>fastWaveletUntransformation</function></para><para> +Untransforms a fast wavelet into this layer. It takes one argument: a wavelet +object. +For example (in Ruby): +<programlisting> +wavelet = layer.fastWaveletTransformation() +layer.fastWaveletUntransformation(wavelet) +</programlisting></para></listitem> + +<listitem><para>Function: <function>getHeight</function></para><para> +Return the height of the layer.</para></listitem> + +<listitem><para>Function: <function>getWidth</function></para><para> +Return the width of the layer.</para></listitem> +</itemizedlist> +</listitem> + +<listitem><para>Object: <classname>Filter</classname></para> +<itemizedlist> + +<listitem><para>Function: <function>getFilterConfiguration</function></para><para> +This function returns the <classname>FilterConfiguration</classname> +associated with this filter.</para></listitem> + +<listitem><para>Function: <function>process</function></para><para> +This function will apply the filter. It takes at least one argument: the +source layer. You can also use these four aguments: <varname>x</varname>, +<varname>y</varname>, <varname>width</varname>, <varname>height</varname>. +(<varname>x</varname>,<varname>y</varname>,<varname>width</varname>,<varname>height</varname>) +defines the rectangular area on which the filter +will be computed. If the rectangle is not defined, then the filter will be +applied on the entire source layer. +For example (in Ruby) +<programlisting> +doc = Krosskritacore::get("KritaDocument") +image = doc.getImage() +layer = image.getActivePaintLayer() +width = layer.getWidth() +height = layer.getHeight() +filter = Krosskritacore::getFilter("invert") +filter.process(layer, layer) +filter.process(layer, layer, 10, 10, 20, 20 ) +</programlisting></para></listitem> +</itemizedlist></listitem> + +<listitem><para>Object: <classname>FilterConfiguration</classname></para> +<itemizedlist> + +<listitem><para>Function: <function>getProperty</function></para><para> +This function returns the value of a parameter of the associated +<classname>Filter</classname>. It takes one argument: the name of the +parameter.</para></listitem> + +<listitem><para>Function: <function>setProperty</function></para><para> +This function defines a parameter of the associated +<classname>Filter</classname>. It takes two arguments: the name of the +parameter and the value, whose type depends on the +<classname>Filter</classname>.</para></listitem> +</itemizedlist> +</listitem> + +<listitem><para>Object: <classname>Histogram</classname></para> + +<para>This class allows you to access the histogram of a +<classname>PaintLayer</classname>. +Example (in Ruby): +<programlisting> + doc = krosskritacore::get("KritaDocument") + image = doc.getImage() + layer = image.getActiveLayer() + histo = layer.createHistogram("RGB8HISTO",0) + min = layer.getMin() * 255 + max = layer.getMax() * 255 + for i in min..max + print layer.getValue(i) + print "\n" + end +</programlisting> +</para> + +<itemizedlist> +<listitem><para>Function: <function>getChannel</function></para><para> +Return the selected channel.</para></listitem> + +<listitem><para>Function: <function>getCount</function></para><para> +This function returns the number of pixels used by the histogram.</para></listitem> + +<listitem><para>Function: <function>getHighest</function></para><para> +This function returns the highest value of the histogram.</para></listitem> + +<listitem><para>Function: <function>getLowest</function></para><para> +This function returns the lowest value of the histogram.</para></listitem> + +<listitem><para>Function: <function>getMax</function></para><para> +This function returns the maximum bound of the histogram (values at greater +position than the maximum are null). The value is in the range 0.0 – 1.0.</para></listitem> + +<listitem><para>Function: <function>getMean</function></para><para> +This function returns the mean of the histogram.</para></listitem> + +<listitem><para>Function: <function>getMin</function></para><para> +This function returns the minimum bound of the histogram (values at smaller +position than the minimum are null). The value is in the range 0.0 – 1.0.</para></listitem> + +<listitem><para>Function: <function>getNumberOfBins</function></para><para> +Return the number of bins of this histogram. </para></listitem> + +<listitem><para>Function: <function>getTotal</function></para><para> +This function returns the sum of all values of the histogram.</para></listitem> + +<listitem><para>Function: <function>getValue</function></para><para> +Return the value of a bin of the histogram. This function takes one argument: +index, in the range [0..255].</para></listitem> + +<listitem><para>Function: <function>setChannel</function></para><para> +Select the channel of the layer on which to get the result of the histogram. +This function takes one argument: the channel number.</para></listitem> +</itemizedlist> +</listitem> + +<listitem><para>Object: <classname>ScriptProgress</classname></para> +<para><classname>ScriptProgress</classname> is used to manage the progress bar +of the status bar in &krita;. +For example (in Ruby): +<programlisting> +script = Krosskritacore::get("KritaScript") +script.setProgressTotalSteps(1000) +script.setProgressStage("progressive", 0) +for i in 1..900 + script.incProgress() +end +script.setProgressStage("brutal", 1000) +</programlisting></para> + +<itemizedlist> +<listitem><para>Function: <function>incProgress</function></para><para> +This function increments the progress by one step.</para></listitem> + +<listitem><para>Function: <function>setProgress</function></para><para> +This function sets the value of the progress. It takes one argument: +the value of the progress.</para></listitem> + +<listitem><para>Function: <function>setProgressStage</function></para><para> +This function sets the value of the progress and displays the text.</para></listitem> + +<listitem><para>Function: <function>setProgressTotalSteps</function></para><para> +This function set the number of steps that the script will require. It takes +one argument: the maximum value of the progress</para></listitem> +</itemizedlist> +</listitem> + +<listitem><para>Object: <classname>Wavelet</classname></para><para> +This object holds the coefficients of a wavelet transformation of a +<classname>PaintLayer</classname>.</para> +<itemizedlist> + +<listitem><para>Function: <function>getDepth</function></para><para> +Returns the depth of the layer.</para></listitem> + +<listitem><para>Function: <function>getNCoeff</function></para><para> +Returns the value of the Nth coefficient. The function takes one argument: the +index of the coefficient.</para></listitem> + +<listitem><para>Function: <function>getNumCoeffs</function></para><para> +Returns the number of coefficients in this wavelet (= size * size * depth).</para></listitem> + +<listitem><para>Function: <function>getSize</function></para><para> +Returns the size of the wavelet (size = width = height).</para></listitem> + +<listitem><para>Function: <function>getXYCoeff</function></para><para> +Returns the value of a coefficient. The function takes two arguments: +<varname>x</varname> and <varname>y</varname>.</para></listitem> + +<listitem><para>Function: <function>setNCoeff</function></para><para> +Set the value of the Nth coefficient. The function takes two arguments: the +index of the coefficient and the new value of the coefficient.</para></listitem> + +<listitem><para>Function: <function>setXYCoeff</function></para><para> +Set the value of a coefficient. The function takes three arguments: +<varname>x</varname>, <varname>y</varname>, and the new value of the +coefficient.</para></listitem> +</itemizedlist> +</listitem> + +<listitem><para>Object: <classname>Painter</classname></para> +<itemizedlist> + +<listitem><para>Function: <function>convolve</function></para><para> +This function applies a convolution kernel to an image. It takes at least three arguments: +a list of kernels (all lists need to have the same size), +factor, and offset. +</para><para> +The value of a pixel will be given by the following function: K * P / factor + offset, +where K is the kernel and P is the neighbourhood. +</para><para> +It can take the following optional arguments: <varname>borderOp</varname> +(control how to convolve the pixels on the border of an image: 0 = use the +default color, 1 = use the pixel on the opposite side of the image, 2 = use +the border pixel, 3 = avoid border pixels), <varname>channel</varname> (1 for +color, 2 for alpha, 3 for both), <varname>x</varname>, <varname>y</varname>, +<varname>width</varname>, <varname>height</varname>.</para></listitem> + +<listitem><para>Function: <function>setFillThreshold</function></para><para> +Sets the fill threshold. It takes one argument: the threshold.</para></listitem> + +<listitem><para>Function: <function>fillColor</function></para><para> +Starts filling with a color. It takes two arguments: <varname>x</varname> and +<varname>y</varname>.</para></listitem> + +<listitem><para>Function: <function>fillPattern</function></para><para> +Starts filling with a pattern. It takes two arguments: <varname>x</varname> +and <varname>y</varname>.</para></listitem> + +<listitem><para>Function: <function>paintPolyline</function></para><para> +This function will paint a polyline. It takes two arguments: a list of x +positions, and a list of y positions.</para></listitem> + +<listitem><para>Function: <function>paintLine</function></para><para> +This function will paint a line. It takes five arguments: +<varname>x1</varname>, <varname>y1</varname>, <varname>x2</varname>, +<varname>y2</varname>, and <varname>pressure</varname>. +</para></listitem> + +<listitem><para>Function: <function>paintBezierCurve</function></para><para> +This function will paint a Bezier curve. It takes ten arguments: +<varname>x1</varname>, <varname>y1</varname>, <varname>p1</varname>, +<varname>cx1</varname>, <varname>cy1</varname>, <varname>cx2</varname>, +<varname>cx2</varname>, <varname>x2</varname>, <varname>y2</varname>, +<varname>p2</varname>, where (<varname>x1</varname>,<varname>y1</varname>) is +the start position, <varname>p1</varname> is the pressure at the start, +(<varname>x2</varname>,<varname>y2</varname>) is the end position, +<varname>p2</varname> is the pressure at the end. +(<varname>cx1</varname>,<varname>cy1</varname>) and +(<varname>cx2</varname>,<varname>cy2</varname>) are the positions of the +control points.</para></listitem> + +<listitem><para>Function: <function>paintEllipse</function></para><para> +This function will paint an ellipse. It takes five arguments: +<varname>x1</varname>, <varname>y1</varname>, <varname>x2</varname>, +<varname>y2</varname>, <varname>pressure</varname>, where +(<varname>x1</varname>,<varname>y1</varname>) and +(<varname>x2</varname>,<varname>y2</varname>) are the positions of the two +centers.</para></listitem> + +<listitem><para>Function: <function>paintPolygon</function></para><para> +This function will paint a polygon. It takes two arguments: a list of x +positions and a list of y positions.</para></listitem> + +<listitem><para>Function: <function>paintRect</function></para><para> +This function will paint a rectangle. It takes five arguments: +<varname>x</varname>, <varname>y</varname>, <varname>width</varname> +<varname>height</varname>, <varname>pressure</varname>.</para></listitem> + +<listitem><para>Function: <function>paintAt</function></para><para> +This function will paint at a given position. +It takes three arguments: <varname>x</varname>, <varname>y</varname>, +<varname>pressure</varname>.</para></listitem> + +<listitem><para>Function: <function>setPaintColor</function></para><para> +This function sets the paint color (also called foreground color). It takes +one argument: a <classname>Color</classname>.</para></listitem> + +<listitem><para>Function: <function>setBackgroundColor</function></para><para> +This function sets the background color. It takes one argument: a +<classname>Color</classname>.</para></listitem> + +<listitem><para>Function: <function>setPattern</function></para><para> +This function sets the pattern used for filling. It takes one argument: a +<classname>Pattern</classname> object.</para></listitem> + +<listitem><para>Function: <function>setBrush</function></para><para> +This function sets the brush used for painting. It takes one argument: a +<classname>Brush</classname> object.</para></listitem> + +<listitem><para>Function: <function>setPaintOp</function></para><para> +This function defines the paint operation. It takes one argument: the name of +the paint operation.</para></listitem> + +<listitem><para>Function: <function>setDuplicateOffset</function></para><para> +This function defines the duplicate offset. It takes two arguments: the +horizontal offset and the vertical offset.</para></listitem> + +<listitem><para>Function: <function>setOpacity</function></para><para> +This function set the opacity of the painting. It takes one argument: the +opacity, in the range 0 to 255.</para></listitem> + +<listitem><para>Function: <function>setStrokeStyle</function></para><para> +This function sets the style of the stroke. It takes one argument: 0 for none, +or 1 for brush.</para></listitem> + +<listitem><para>Function: <function>setFillStyle</function></para><para> +This function sets the fill style of the <classname>Painter</classname>. +It takes one argument: 0 for none, 1 for fill with foreground color, 2 for +fill with background color, 3 for fill with pattern.</para></listitem> +</itemizedlist> +</listitem> + +<listitem><para>Object: <classname>Iterator</classname></para><para> +This object allows you to change pixel values one by one. +The name of some functions depends on the colorspace, for instance, if the +colorspace of the layer is RGB, you will have <function>setR</function>, +<function>setG</function> and <function>setB</function>, and for +CMYK: <function>setC</function>, <function>setM</function>, +<function>setY</function> and <function>setK</function>. In the documentation +below we will assume that the colorspace is called ABC, with three channels: +A, B and C.</para> + +<itemizedlist> +<listitem><para>Functions: <function>setA</function>, +<function>setB</function>, <function>setC</function></para><para> +Those functions take one argument: the new value of one of the channels of +this pixel.</para></listitem> + +<listitem><para>Function: <function>setABC</function></para><para> +Set the value of all channels. This function takes one argument: an array with +the new values for all channels.</para></listitem> + +<listitem><para>Functions: <function>getA</function>, +<function>getB</function>, <function>getC</function></para><para> +Return the value of one of the channels of this pixel.</para></listitem> + +<listitem><para>Function: <function>getABC</function></para><para> +Return an array with the values of all channels.</para></listitem> + +<listitem><para>Function: <function>darken</function></para><para> +Darken a pixel. This function takes at least one argument: +<varname>shade</varname> (amount used to darken all color channels). This +function can take the following optional argument: +<varname>compensation</varname> (to limit the darkening).</para></listitem> + +<listitem><para>Function: <function>invertColor</function></para><para> +Invert the color of a pixel.</para></listitem> + +<listitem><para>Function: <function>next</function></para><para> +Increment the position, go to the next pixel.</para></listitem> + +<listitem><para>Function: <function>isDone</function></para><para> +Return true if the iterator is at the end (no more pixels are +available).</para></listitem> +</itemizedlist> +</listitem> +</itemizedlist> + +</sect2> + +<sect2 id="developers-scripting-resources"> +<title>Resources</title> + +<para> +Here are hints or partial lists of resources for &krita;. +</para><para> +For <classname>Brush</classname> and <classname>Pattern</classname>: You can get +the name and the associated brush or pattern from the selector in &krita;'s +toolbar. +</para><para> +A list of ids for colorspaces in &krita;: LABA, RGBA, RGBA16, RGBAF32, +RGBAF16HALF, LMSAF32, GRAYA, GRAYA16, CMYK, CMYKA16. +</para> +</sect2> + +</sect1> + |