Warning, /graphics/krita/libs/libkis/Mainpage.dox is written in an unsupported language. File is not indexed.
0001 /*
0002 * Copyright (C) 2016 Boudewijn Rempt <boud@valdyas.org>
0003 *
0004 * This program is free software; you can redistribute it and/or modify
0005 * it under the terms of the GNU General Public License as published by
0006 * the Free Software Foundation; either version 2 of the License, or
0007 * (at your option) any later version.
0008 *
0009 * This program is distributed in the hope that it will be useful,
0010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0012 * GNU General Public License for more details.
0013 *
0014 * You should have received a copy of the GNU General Public License
0015 * along with this program; if not, write to the Free Software
0016 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
0017 */
0018
0019 /**
0020 \mainpage libkis: Krita Scripting and Plugin Wrapper Library
0021
0022 Libkis is a QObject-based wrapper around Krita's internal libraries.
0023 The wrapper can be used from C++ plugins that do not need the
0024 advanced and volatile internal libraries of Krita, or can be bound
0025 to scripting languages like Python or Javascript.
0026
0027 All classes are based on QObject, so QMetaObject introspection can
0028 be used to discover properties, slots and signals and automatically
0029 expose all functionality to the client.
0030
0031 Note that all objects that are created are wrapper objects that are
0032 owned by the scripting environment or the plugin.
0033
0034
0035 Using the functionality in this library, either through a scripting
0036 environment like Python or Javascript, or directly from C++, you can,
0037 among other things achieve the following functionality:
0038
0039 <ul>
0040 <li>Open, save, export, rename files.
0041 <li>Access the layers and masks in a file
0042 <li>Read and write pixel data
0043 <li>Add menu items, toolbar items and docker palettes
0044 </ul>
0045
0046 The reference implementation of scripting in Krita is implemented
0047 in Python 3. All examples in the documentation for scripting will be
0048 provided using Python, although the api documentation is generated
0049 from C++ header files and shows c++ syntax for arguments.
0050
0051 Autostarting Scripts
0052 ====================
0053
0054 Autostarting scripts or script-based plugins are scripts that Krita
0055 loads on startup. You can add autostarting scripts to Krita by placing
0056 them in the pykrita folder in the resources folder: go to settings/
0057 manage resources and press the Open Resources Folder to open your
0058 local resources folder.
0059
0060 Scripts are identified by a file that ends in a `.desktop` extension
0061 that contain information about the script itself. For example:
0062
0063 @code
0064 [Desktop Entry]
0065 Type=Service
0066 ServiceTypes=Krita/PythonPlugin
0067 X-KDE-Library=hello
0068 X-Python-2-Compatible=false
0069 Name=Hello World
0070 Comment=Basic plugin to test PyKrita
0071 @endcode
0072
0073 The Python code itself should be placed in the pykrita/hello folder.
0074 Your Python plugin needs to be a module, so needs to have a `__init__.py`
0075 file:
0076
0077 @code
0078 # let's make a module
0079 from .hello import *
0080 @endcode
0081
0082 Krita is a Qt-based application. In principle, you can use any Python
0083 binding to Qt as long as it's using exactly the same version of Qt
0084 that Krita uses. In our examples we will be using [PyQt](https://www.riverbankcomputing.com/software/pyqt/intro).
0085
0086 The easiest access to the Krita api is by simply importing the "krita"
0087 module. This automatically adds two built-ins: Scripter and Application.
0088
0089 This is an alias for Krita.instance(), which is the first place from
0090 which to access the running Krita instance.
0091
0092 @code
0093 from PyQt5.QtGui import *
0094 from PyQt5.QtWidgets import *
0095 from krita import *
0096
0097 def hello():
0098 QMessageBox.information(QWidget(), "Test", "Hello World")
0099
0100 class HelloExtension(Extension):
0101
0102 def __init__(self, parent):
0103 super().__init__(parent)
0104
0105 def setup(self):
0106 pass
0107
0108 def createActions(self, window):
0109 action = window.createAction("Hello")
0110 action.triggered.connect(hello)
0111
0112 Krita.instance().addExtension(HelloExtension(Krita.instance()))
0113 @endcode
0114
0115
0116 The Krita Object Model
0117 ======================
0118
0119 The starting point is the @see Krita class, which provides a singleton
0120 object for easy reference. From the Krita class, a hierarchy is provided
0121 where you can access windows, lviews, documents, nodes and channels.
0122
0123 You can access the Krita class as
0124
0125 * Krita.instance()
0126 * Application
0127 * Scripter
0128
0129 For ease of use.
0130
0131 The Document class is provided to allow access to the images Krita has
0132 loaded. *Note*: internally, Krita distinguishes between images and documents.
0133
0134 A document contains an image and knows the filename of the image, the image
0135 itself only knows about the layers and masks it contains. The generic
0136 name for layers and masks is *node*.
0137
0138 A Node can be a group layer, a file layer, a vector layer, a filter layer,
0139 a generator layer, a clone layer, a paint layer or a transform mask, a selection
0140 mask, a transparency mask or a colorize mask. You can change some properties
0141 of Nodes, but not all of them.
0142
0143 The Window class is provided to allow access to the windows and views Krita
0144 has open. A given Document can be shown in more than one View, and in more than
0145 one Window. You can open and close windows and views.
0146
0147 */
0148
0149 // DOXYGEN_SET_PROJECT_NAME = Krita
0150 // DOXYGEN_SET_IGNORE_PREFIX = Kis Ko K