20#include <klocalizedstring.h>
22#include <kselectaction.h>
23#include <kconfiggroup.h>
27#include <QTemporaryFile>
28#include <QApplication>
30#include <QDragEnterEvent>
33#include <QPrintDialog>
37#include <QMdiSubWindow>
95 static int s_viewIFNumber = 0;
96 QString name; name.setNum(s_viewIFNumber++); name.prepend(
"view_");
108 : actionCollection(viewManager->actionCollection())
110 , canvasController(_q, viewManager->mainWindow(), viewManager->actionCollection())
111 , canvas(&viewConverter, viewManager->canvasResourceProvider()->resourceManager(), viewManager->mainWindow(), _q, document->shapeController())
112 , zoomManager(_q, &this->viewConverter, &this->canvasController)
113 , viewManager(viewManager)
115 , screenMigrationTracker(_q)
119 bool inOperation {
false};
122 QWidget *tempActiveWidget {
nullptr};
133 bool isCurrent {
false};
134 bool showFloatingMessage {
true};
137 QMdiSubWindow *subWindow {
nullptr};
139 bool softProofing {
false};
140 bool gamutCheck {
false};
156 m_permanent(permanent),
172 sb->addPermanentWidget(m_widget, m_stretch);
174 sb->addWidget(m_widget, m_stretch);
184 m_hidden = m_widget->isHidden();
185 sb->removeWidget(m_widget);
192 QWidget * m_widget = 0;
195 bool m_connected =
false;
196 bool m_hidden =
false;
204 , d(new
Private(this, document, viewManager))
211 setFocusPolicy(Qt::StrongFocus);
215 connect(
d->document, SIGNAL(statusBarMessage(QString,
int)),
217 connect(
d->document, SIGNAL(clearStatusBarMessage()),
225 d->canvasController.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
226 d->canvasController.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
227 d->canvasController.setCanvas(&
d->
canvas);
229 d->zoomManager.setup(
d->actionCollection);
231 setAcceptDrops(
true);
237 d->referenceImagesDecoration->setVisible(
true);
241 d->paintingAssistantsDecoration->setVisible(
true);
250 SIGNAL(sigUpdateMemoryStatistics()),
252 connect(document, SIGNAL(modified(
bool)),
this, SLOT(setWindowModified(
bool)));
254 setWindowModified(document->isModified());
259 if (
d->viewManager) {
260 if (
d->viewManager->filterManager()->isStrokeRunning()) {
261 d->viewManager->filterManager()->cancelDialog();
264 d->viewManager->mainWindow()->notifyChildViewDestroyed(
this);
276 d->canvasController.setCanvas(0);
286 if (!
d->isCurrent &&
d->savedFloatingMessage) {
287 d->savedFloatingMessage->removeMessage();
311 d->showFloatingMessage = show;
316 if (!
d->viewManager)
return;
318 if(
d->isCurrent &&
d->showFloatingMessage &&
d->viewManager->qtMainWindow()) {
319 if (
d->savedFloatingMessage) {
320 d->savedFloatingMessage->tryOverrideMessage(message, icon, timeout, priority, alignment);
323 d->savedFloatingMessage->setShowOverParent(
true);
324 d->savedFloatingMessage->setIcon(icon);
326 connect(&
d->floatingMessageCompressor, SIGNAL(timeout()),
d->savedFloatingMessage, SLOT(showMessage()));
327 d->floatingMessageCompressor.start();
339 d->viewManager = view;
345 if (
d->viewManager &&
d->viewManager->nodeManager()) {
346 d->viewManager->nodeManager()->nodesUpdated();
358 Qt::DirectConnection);
362 d->viewManager->updateGUI();
369 return d->viewManager;
385 (!
d->currentNode || !
d->currentNode->parent())) {
387 d->currentNode = newActiveNode;
400 d->currentNode = newActiveNode;
406 return &
d->zoomManager;
411 return &
d->canvasController;
416 if (
d->viewManager) {
417 return d->viewManager->canvasResourceProvider();
424 return d->viewManager ?
d->viewManager->inputManager() : 0;
435 return d->document->image();
443 return &
d->viewConverter;
449 <<
"Formats: " <<
event->mimeData()->formats()
450 <<
"Urls: " <<
event->mimeData()->urls()
451 <<
"Has images: " <<
event->mimeData()->hasImage();
463 dbgUI << Q_FUNC_INFO;
464 dbgUI <<
"\t Formats: " <<
event->mimeData()->formats();
465 dbgUI <<
"\t Urls: " <<
event->mimeData()->urls();
466 dbgUI <<
"\t Has images: " <<
event->mimeData()->hasImage();
476 QRect imageBounds = kisimage->
bounds();
477 boost::optional<QPoint> forcedCenter;
479 if (event->keyboardModifiers() & Qt::ShiftModifier && imageBounds.contains(imgCursorPos)) {
480 forcedCenter = imgCursorPos;
483 if (event->mimeData()->hasFormat(
"application/x-krita-node-internal-pointer")) {
487 bool copyNode =
true;
499 if (!
viewManager()->nodeManager()->activeLayer()) {
503 viewManager()->nodeManager()->activeLayer()->parent(),
508 }
else if (event->mimeData()->hasImage() || event->mimeData()->hasUrls()) {
509 const auto *data =
event->mimeData();
513 const auto callPos = QCursor::pos();
518 const QPair<bool, KisClipboard::PasteFormatBehaviour>
source =
522 dbgUI <<
"Paste event cancelled";
528 const auto url = std::find_if(
531 [&](
const QUrl &url) {
533 == KisClipboard::PASTE_FORMAT_DOWNLOAD) {
534 return !url.isLocalFile();
537 return url.isLocalFile();
543 if (url != urls.constEnd()) {
544 QScopedPointer<QTemporaryFile>
tmp(
new QTemporaryFile());
545 tmp->setAutoRemove(
true);
547 const QUrl localUrl = [&]() -> QUrl {
548 if (!url->isLocalFile()) {
551 tmp->setFileName(url->fileName());
554 warnUI <<
"Fetching" << *url <<
"failed";
557 return QUrl::fromLocalFile(
tmp->fileName());
562 if (localUrl.isLocalFile()) {
567 this->activateWindow();
585 clip->
moveTo(pos.x(), pos.y());
592 this->
image()->nextLayerName() +
" " + i18n(
"(pasted)"),
601 this->activateWindow();
617 if (data->hasUrls()) {
618 const auto &urls = data->urls();
619 const auto url = std::find_if(urls.constBegin(), urls.constEnd(), std::mem_fn(&QUrl::isLocalFile));
620 if (url != urls.constEnd()) {
621 reference->setFilename((*url).toLocalFile());
627 reference->setPosition(
633 "ToolReferenceImages");
640 for (QUrl url : data->urls()) {
641 QScopedPointer<QTemporaryFile>
tmp(
new QTemporaryFile());
642 tmp->setAutoRemove(
true);
644 if (!url.isLocalFile()) {
647 tmp->setFileName(url.fileName());
650 qWarning() <<
"Fetching" << url <<
"failed";
653 url = QUrl::fromLocalFile(
tmp->fileName());
656 if (url.isLocalFile()) {
662 this->activateWindow();
668 QFileInfo fileInfo(url.toLocalFile());
676 if (!mimes.contains(type)) {
681 QMessageBox::warning(
683 i18nc(
"@title:window",
"Krita"),
684 i18n(
"Could not open %2.\nReason: %1.",
686 url.toDisplayString()));
707 adapter.
addNode(fileLayer, parent, above);
720 INSERT_AS_REFERENCE_IMAGE) {
723 *this->viewConverter(),
730 reference->setPosition(
737 "ToolReferenceImages");
743 }
else if (event->mimeData()->hasColor() || event->mimeData()->hasFormat(
"krita/x-colorsetentry")) {
749 if (
d->viewManager->activeNode().isNull() ||
750 d->viewManager->activeNode()->inherits(
"KisShapeLayer") ||
751 d->viewManager->activeNode()->inherits(
"KisCloneLayer") ||
752 !
d->viewManager->activeDevice()) {
753 showFloatingMessage(i18n(
"You cannot drag and drop colors on the selected layer type."), QIcon());
758 if (!
d->viewManager->activeNode()->isEditable()) {
760 if (!
d->viewManager->activeNode()->visible() &&
d->viewManager->activeNode()->userLocked()) {
761 message = i18n(
"Layer is locked and invisible.");
762 }
else if (
d->viewManager->activeNode()->userLocked()) {
763 message = i18n(
"Layer is locked.");
764 }
else if(!
d->viewManager->activeNode()->visible()) {
765 message = i18n(
"Layer is invisible.");
772 if (!image()->wrapAroundModePermitted() && !image()->
bounds().contains(imgCursorPos)) {
778 kundo2_i18n(
"Flood Fill Layer"),
false, image().data()
781 KisStrokeId fillStrokeId = image()->startStroke(strategy);
787 new KisResourcesSnapshot(image(),
d->viewManager->activeNode(),
d->viewManager->canvasResourceProvider()->resourceManager());
789 if (event->mimeData()->hasColor()) {
792 QByteArray byteData =
event->mimeData()->data(
"krita/x-colorsetentry");
798 KConfigGroup configGroup = KSharedConfig::openConfig()->group(
"KritaFill/KisToolFill");
799 QString fillMode = configGroup.readEntry<QString>(
"whatToFill",
"");
800 if (fillMode.isEmpty()) {
801 if (configGroup.readEntry<
bool>(
"fillSelection",
false)) {
802 fillMode =
"fillSelection";
804 fillMode =
"fillContiguousRegion";
807 const bool useCustomBlendingOptions = configGroup.readEntry<
bool>(
"useCustomBlendingOptions",
false);
808 const qreal customOpacity =
809 qBound(0, configGroup.readEntry<
int>(
"customOpacity", 100), 100) / 100.0;
810 QString customCompositeOp = configGroup.readEntry<QString>(
"customCompositeOp",
COMPOSITE_OVER);
815 if (event->keyboardModifiers() == Qt::ShiftModifier) {
816 if (fillMode ==
"fillSimilarRegions") {
817 fillMode =
"fillSelection";
819 fillMode =
"fillSimilarRegions";
821 }
else if (event->keyboardModifiers() == Qt::AltModifier) {
822 if (fillMode ==
"fillContiguousRegion") {
823 fillMode =
"fillSelection";
825 fillMode =
"fillContiguousRegion";
829 if (fillMode ==
"fillSelection") {
836 if (useCustomBlendingOptions) {
852 const int threshold = configGroup.readEntry(
"thresholdAmount", 8);
853 const int opacitySpread = configGroup.readEntry(
"opacitySpread", 100);
854 const bool antiAlias = configGroup.readEntry(
"antiAlias",
true);
855 const int grow = configGroup.readEntry(
"growSelection", 0);
856 const bool stopGrowingAtDarkestPixel = configGroup.readEntry<
bool>(
"stopGrowingAtDarkestPixel",
false);
857 const int feather = configGroup.readEntry(
"featherAmount", 0);
858 const int closeGap = configGroup.readEntry(
"closeGapAmount", 0);
859 QString sampleLayersMode = configGroup.readEntry(
"sampleLayersMode",
"");
860 if (sampleLayersMode.isEmpty()) {
861 if (configGroup.readEntry(
"sampleMerged",
false)) {
862 sampleLayersMode =
"allLayers";
864 sampleLayersMode =
"currentLayer";
869 const QStringList colorLabelsStr = configGroup.readEntry<QString>(
"colorLabels",
"").
split(
',', Qt::SkipEmptyParts);
871 for (
const QString &colorLabelStr : colorLabelsStr) {
873 const int colorLabel = colorLabelStr.toInt(&ok);
875 colorLabels << colorLabel;
881 if (sampleLayersMode ==
"allLayers") {
882 referencePaintDevice = image()->projection();
883 }
else if (sampleLayersMode ==
"currentLayer") {
884 referencePaintDevice =
d->viewManager->activeNode()->paintDevice();
885 }
else if (sampleLayersMode ==
"colorLabeledLayers") {
891 referencePaintDevice,
902 if (sampleLayersMode ==
"colorLabeledLayers") {
910 [referenceColor, referencePaintDevice, imgCursorPos]() ->
KUndo2Command*
912 *referenceColor = referencePaintDevice->
pixel(imgCursorPos);
924 *referenceColor = referencePaintDevice->
pixel(imgCursorPos);
927 if (fillMode ==
"fillContiguousRegion") {
929 configGroup.readEntry(
"contiguousFillMode",
"") ==
"boundaryFill"
932 KoColor regionFillingBoundaryColor;
934 const QString xmlColor = configGroup.readEntry(
"contiguousFillBoundaryColor", QString());
936 if (doc.setContent(xmlColor)) {
937 QDomElement e = doc.documentElement().firstChild().toElement();
940 if (e.hasAttribute(
"space") || e.tagName().toLower() ==
"srgb") {
942 }
else if (doc.documentElement().hasAttribute(
"space") || doc.documentElement().tagName().toLower() ==
"srgb"){
943 regionFillingBoundaryColor =
KoColor::fromXML(doc.documentElement(), channelDepthID, &ok);
947 const bool useSelectionAsBoundary = configGroup.readEntry(
"useSelectionAsBoundary",
false);
948 const bool blendingOptionsAreNoOp = useCustomBlendingOptions
954 blendingOptionsAreNoOp &&
955 opacitySpread == 100 &&
956 useSelectionAsBoundary ==
false &&
957 !antiAlias && grow == 0 && feather == 0 &&
959 sampleLayersMode ==
"currentLayer";
979 if (useCustomBlendingOptions) {
1002 QRect
bounds = image()->bounds();
1016 fillMask->
pixelSelection(), referenceColor, referencePaintDevice,
1021 image()->addJob(fillStrokeId, job);
1058 image()->endStroke(fillStrokeId);
1064 dbgUI << Q_FUNC_INFO
1065 <<
"Formats: " <<
event->mimeData()->formats()
1066 <<
"Urls: " <<
event->mimeData()->urls()
1067 <<
"Has images: " <<
event->mimeData()->hasImage();
1091 return d->viewManager->mainWindow();
1102 return mw ? mw->statusBar() : 0;
1109 sb->showMessage(text, timeout);
1114 if (!sb || sb->isHidden() ||
1133 return unitActions->actions();
1140 if (viewCount > 1) {
1160 document()->waitForSavingToComplete();
1164 name = QFileInfo(
document()->path()).fileName();
1167 name = i18n(
"Untitled");
1169 int res = QMessageBox::warning(
this,
1170 i18nc(
"@title:window",
"Krita"),
1171 i18n(
"<p>The document <b>'%1'</b> has been modified.</p><p>Do you want to save it?</p>", name),
1172 QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, QMessageBox::Yes);
1175 case QMessageBox::Yes : {
1176 bool isNative = (
document()->mimeType() ==
document()->nativeFormatMimeType());
1181 case QMessageBox::No : {
1210 d->canvasController.updateScreenResolution(
this);
1213 int penWidth = qRound(
d->screenMigrationTracker.currentScreen()->devicePixelRatio());
1220 return d->screenMigrationTracker.currentScreen();
1225 this->setPalette(pal);
1226 for (
int i=0; i<this->children().size();i++) {
1227 QWidget *w = qobject_cast<QWidget*> ( this->children().at(i));
1242 QString title =
d->document->caption();
1244 if (!
d->document->isReadWrite()) {
1245 title +=
" " + i18n(
"Write Protected");
1248 if (
d->document->isRecovered()) {
1249 title +=
" " + i18n(
"Recovered");
1256 title += QString(
" (").append( KFormat().formatByteSize(qreal(fileSizeStats.
imageSize))).append(
") ");
1261 this->setWindowTitle(title);
1278 config.
setProperty(
"geometry",
d->subWindow->saveGeometry().toBase64());
1281 const KoZoomState zoomState =
d->canvasController.zoomState();
1286 d->canvasController.saveCanvasState(config);
1292 QByteArray geometry = QByteArray::fromBase64(config.
getString(
"geometry",
"").toLatin1());
1293 d->subWindow->restoreGeometry(QByteArray::fromBase64(geometry));
1296 qreal zoom = config.
getFloat(
"zoom", 1.0f);
1299 d->canvasController.restoreCanvasState(config);
1304 d->currentNode = node;
1312 return d->currentNode;
1323 node =
d->currentNode;
1325 return qobject_cast<KisLayer*>(node.
data());
1330 return dynamic_cast<KisMask*
>(
d->currentNode.data());
1349 if (
canvasBase()->
image()->colorSpace()->colorDepthId().
id().contains(
"F"))
1351 message = i18n(
"Soft Proofing doesn't work in floating point.");
1356 message = i18n(
"Soft Proofing turned on.");
1358 message = i18n(
"Soft Proofing turned off.");
1368 if (
canvasBase()->
image()->colorSpace()->colorDepthId().
id().contains(
"F"))
1370 message = i18n(
"Gamut Warnings don't work in floating point.");
1376 message = i18n(
"Gamut Warnings turned on.");
1377 if (!
d->softProofing){
1378 message +=
"\n "+i18n(
"But Soft Proofing is still off.");
1381 message = i18n(
"Gamut Warnings turned off.");
1389 return d->softProofing;
1394 return d->gamutCheck;
1406 if (
image()->locked()) {
1409 image()->blockSignals(
false);
1419 connect(&
d->screenMigrationTracker, SIGNAL(sigScreenChanged(QScreen*)),
this, SLOT(
slotMigratedToScreen(QScreen*)));
1426 d->canvasController.syncOnImageResolutionChange();
1427 d->zoomManager.syncOnImageResolutionChange();
1433 d->canvasController.syncOnImageSizeChange(oldStillPoint, newStillPoint);
1439 d->subWindow->close();
1444 const QMimeData *data =
event->mimeData();
1445 if (data->hasFormat(QStringLiteral(
"application/x-krita-node-internal-pointer"))) {
1453 return event->type() == QEvent::DragEnter
1454 ||
event->keyboardModifiers().testFlag(Qt::ControlModifier)
1457 return data->hasImage()
1459 || data->hasFormat(
"krita/x-colorsetentry")
1460 || data->hasColor();
KisMagneticGraph::vertex_descriptor source(typename KisMagneticGraph::edge_descriptor e, KisMagneticGraph g)
const KoID Integer16BitsColorDepthID("U16", ki18n("16-bit integer/channel"))
const qreal OPACITY_OPAQUE_F
const quint8 OPACITY_OPAQUE_U8
const QString COMPOSITE_OVER
void setOutDirtyRect(QSharedPointer< QRect > outDirtyRect)
void setStopGrowingAtDarkestPixel(bool stopGrowingAtDarkestPixel)
void setUseFastMode(bool useFastMode)
void setUseCustomBlendingOptions(bool useCustomBlendingOptions)
void setSeedPoint(const QPoint &seedPoint)
void setFeather(int feather)
void setCustomCompositeOp(const QString &customCompositeOp)
void setProgressHelper(QSharedPointer< ProgressHelper > progressHelper)
void setOpacitySpread(int opacitySpread)
void setAntiAlias(bool antiAlias)
void setSelectionOnly(bool selectionOnly)
void setFillThreshold(int fillThreshold)
void setRegionFillingBoundaryColor(const KoColor ®ionFillingBoundaryColor)
void setSizeMod(int sizemod)
void setCustomOpacity(qreal customOpacity)
void setRegionFillingMode(KisFillPainter::RegionFillingMode regionFillingMode)
void setCloseGap(int gap)
void setUseSelectionAsBoundary(bool useSelectionAsBoundary)
KisReferenceImagesDecorationSP referenceImagesDecoration() const
void slotScreenChanged(QScreen *screen)
bool xAxisMirrored() const
Bools indicating canvasmirroring.
KisCoordinatesConverter * coordinatesConverter
void addDecoration(KisCanvasDecorationSP deco)
KisAbstractCanvasWidget * canvasWidget
bool yAxisMirrored() const
void slotTrySwitchShapeManager()
Action dropAs(const QMimeData &data, QPoint pos)
@ INSERT_MANY_FILE_LAYERS
@ INSERT_AS_NEW_FILE_LAYER
@ INSERT_AS_REFERENCE_IMAGE
@ INSERT_AS_REFERENCE_IMAGES
static KisClipboard * instance()
QPair< bool, PasteFormatBehaviour > askUserForSource(const QMimeData *data, bool useClipboardFallback=false) const
KisPaintDeviceSP clipFromMimeData(const QMimeData *data, const QRect &imageBounds, bool showPopup, int overridePasteBehaviour=-1, KisTimeSpan *clipRange=nullptr, bool useClipboardFallback=false) const
KisPaintDeviceSP clipFromBoardContents(const QMimeData *data, const QRect &imageBounds, bool showPopup, int overridePasteBehaviour=-1, bool useClipboardFallback=false, QPair< bool, PasteFormatBehaviour > source={ false, PasteFormatBehaviour::PASTE_FORMAT_ASK}) const
bool forceShowSaveMessages(bool defaultValue=true) const
bool showCanvasMessages(bool defaultValue=false) const
bool forceShowAutosaveMessages(bool defaultValue=true) const
_Private::Traits< T >::Result widgetToImage(const T &obj) const
_Private::Traits< T >::Result imageToDocument(const T &obj) const
void setPreActivatedNode(KisNodeSP activatedNode)
The KisFileLayer class loads a particular file as a layer into the layer stack.
void setSizemod(int sizemod)
void setFillThreshold(int threshold)
void setFeather(int feather)
QVector< KisStrokeJobData * > createSimilarColorsSelectionJobs(KisPixelSelectionSP outSelection, const QSharedPointer< KoColor > referenceColor, KisPaintDeviceSP referenceDevice, const QRect &rect, KisPixelSelectionSP mask, QSharedPointer< KisProcessingVisitor::ProgressHelper > progressHelper=nullptr)
void setAntiAlias(bool antiAlias)
@ RegionFillingMode_BoundaryFill
@ RegionFillingMode_FloodFill
void setStopGrowingAtDarkestPixel(bool stopGrowingAtDarkestPixel)
void setOpacitySpread(int opacitySpread)
The KisFloatingMessage class shows the given message in a semi-transparent bubble that doesn't take f...
qint32 importImage(const QUrl &url, const QString &layerType="KisPaintLayer")
KisGroupLayerSP rootLayer() const
void requestStrokeCancellation()
KisSelectionSP globalSelection() const
QRect bounds() const override
void sigNodeAddedAsync(KisNodeSP node, KisNodeAdditionFlags flags)
static void adaptClipToImageColorSpace(KisPaintDeviceSP dev, KisImageSP image)
QString errorMessage() const
static QStringList supportedMimeTypes(Direction direction)
A container for a set of QAction objects.
KisView * newView(QObject *document, QMdiSubWindow *subWindow=0)
bool openDocument(const QString &path, OpenFlags flags)
bool saveDocument(KisDocument *document, bool saveas, bool isExporting, bool isAdvancedExporting=false)
KisViewManager * viewManager
static KisPaintDeviceSP createRefPaintDevice(KisImageSP originalImage, QString name="Merge Labeled Layers Reference Paint Device")
@ GroupSelectionPolicy_SelectIfColorLabeled
Groups will be taken into account only if they have set an explicit color label. This ignores groups ...
static KisNodeList loadNodesFastAndRecenter(const QPoint &preferredCenter, const QMimeData *data, KisImageSP image, KisShapeController *shapeController, bool ©Node)
static KisNodeList loadNodesFast(const QMimeData *data, KisImageSP image, KisShapeController *shapeController, bool ©Node)
static bool isNodeMimeDataFromSameImage(const QMimeData *data, KisImageSP image)
static QString mimeTypeForFile(const QString &file, bool checkExistingFiles=true)
Find the mimetype for the given filename. The filename must include a suffix.
void addNode(KisNodeSP node, KisNodeSP parent, KisNodeSP aboveThis, KisImageLayerAddCommand::Flags flags=KisImageLayerAddCommand::DoRedoUpdates|KisImageLayerAddCommand::DoUndoUpdates)
bool pixel(qint32 x, qint32 y, QColor *c) const
void moveTo(qint32 x, qint32 y)
static KisPart * instance()
void removeView(KisView *view)
int viewCount(KisDocument *doc) const
static KisReferenceImage * fromFile(const QString &filename, const KisCoordinatesConverter &converter, QWidget *parent)
static KisReferenceImage * fromPaintDevice(KisPaintDeviceSP src, const KisCoordinatesConverter &converter, QWidget *parent)
The KisReferenceImagesDecoration class draws the reference images on the canvas. The document stores ...
void addReferenceImage(KisReferenceImage *referenceImage)
The KisRemoteFileFetcher class can fetch a remote file and blocks until the file is downloaded.
bool fetchFile(const QUrl &remote, QIODevice *io)
fetch the image. Shows a progress dialog
The KisResourcesSnapshot class takes a snapshot of the various resources like colors and settings use...
void setFGColorOverride(const KoColor &color)
KisSelectionSP activeSelection() const
void setInitialShapeForCanvas(KisCanvas2 *canvas)
void setSupportsWrapAroundMode(bool value)
static KisSwatch fromByteArray(QByteArray &data, QString &groupName, int &originalRow, int &originalColumn)
KisMainWindow * mainWindow() const
KisImageManager * imageManager()
KisLayerSP activeLayer()
Convenience method to get at the active layer.
void blockUntilOperationsFinishedForced(KisImageSP image)
blockUntilOperationsFinished blocks the GUI of the application until execution of actions on image is...
KisSelectionManager * selectionManager()
KisImageWSP image() const
Return the image this view is displaying.
void showFloatingMessage(const QString &message, const QIcon &icon, int timeout=4500, KisFloatingMessage::Priority priority=KisFloatingMessage::Medium, int alignment=Qt::AlignCenter|Qt::TextWordWrap)
shows a floating message in the top right corner of the canvas
bool operator==(const StatusBarItem &rhs)
StatusBarItem(QWidget *widget, int stretch, bool permanent)
void ensureItemHidden(QStatusBar *sb)
void ensureItemShown(QStatusBar *sb)
QScreen * currentScreen() const
KisView(KisDocument *document, KisViewManager *viewManager, QWidget *parent=0)
KisCanvas2 * canvasBase() const
void slotGamutCheck(bool gamutCheck)
slotGamutCheck set whether or not we're gamutchecking in this view. Will be setting the same in the v...
Private(KisView *_q, KisDocument *document, KisViewManager *viewManager)
bool canvasIsMirrored() const
void slotThemeChanged(QPalette pal)
void dropEvent(QDropEvent *event) override
KisMainWindow * mainWindow() const
void syncLastActiveNodeToDocument()
void notifyCurrentStateChanged(bool isCurrent)
void restoreViewState(const KisPropertiesConfiguration &config)
void slotClearStatusText()
KisInputManager * globalInputManager() const
QList< QAction * > createChangeUnitActions(bool addPixelUnit=false)
create a list of actions that when activated will change the unit on the document.
KisCanvasController canvasController
QMdiSubWindow * subWindow
void slotScreenOrResolutionChanged()
KisCoordinatesConverter viewConverter
void setSubWindow(QMdiSubWindow *subWindow)
void sigColorSpaceChanged(const KoColorSpace *cs)
QStatusBar * statusBar() const
void dragMoveEvent(QDragMoveEvent *event) override
KisMaskSP currentMask() const
KisScreenMigrationTracker screenMigrationTracker
void dragEnterEvent(QDragEnterEvent *event) override
KisReferenceImagesDecorationSP referenceImagesDecoration
KisViewManager * viewManager
KisSignalCompressor floatingMessageCompressor
KisImageWSP image() const
void setShowFloatingMessage(bool show)
void slotContinueRemoveNode(KisNodeSP newActiveNode)
void slotSavingStatusMessage(const QString &text, int timeout, bool isAutoSaving=false)
KisView * replaceBy(KisDocument *document)
KisCanvasResourceProvider * resourceProvider() const
void slotContinueAddNode(KisNodeSP newActiveNode, KisNodeAdditionFlags flags)
void slotMigratedToScreen(QScreen *screen)
void closeEvent(QCloseEvent *event) override
QPointer< KisDocument > document
void slotLoadingFinished()
void slotImageNodeRemoved(KisNodeSP node)
void setViewManager(KisViewManager *view)
bool shouldAcceptDrag(const QDropEvent *event) const
void saveViewState(KisPropertiesConfiguration &config) const
void slotUpdateDocumentTitle()
void slotSoftProofing(bool softProofing)
slotSoftProofing set whether or not we're softproofing in this view. Will be setting the same in the ...
void slotImageResolutionChanged()
KisSelectionSP selection()
KisSynchronizedConnection< KisNodeSP > removeNodeConnection
void slotImageSizeChanged(const QPointF &oldStillPoint, const QPointF &newStillPoint)
KisLayerSP currentLayer() const
void setCurrentNode(KisNodeSP node)
KisPaintingAssistantsDecorationSP paintingAssistantsDecoration
QPointer< KisFloatingMessage > savedFloatingMessage
KisSynchronizedConnection< KisNodeSP, KisNodeAdditionFlags > addNodeConnection
KisZoomManager zoomManager
void sigProfileChanged(const KoColorProfile *profile)
void sigSizeChanged(const QPointF &oldStillPoint, const QPointF &newStillPoint)
void updateImageBoundsSnapping()
QPointer< KoCanvasResourceProvider > resourceManager
static KoColor fromXML(const QDomElement &elt, const QString &channelDepthId)
static const KoCompositeOpRegistry & instance()
KoID getKoID(const QString &compositeOpID) const
static bool qFuzzyCompare(half p1, half p2)
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
QSharedPointer< KUndo2Command > KUndo2CommandSP
KUndo2MagicString kundo2_i18n(const char *text)
QList< KoSubpath * > split(const KoPathShape &path)
QIcon loadIcon(const QString &name)
KisNodeSP nearestNodeAfterRemoval(KisNodeSP node)
The LambdaCommand struct is a shorthand for creation of AggregateCommand commands using C++ lambda fe...
virtual KisSelectionSP selection() const
Statistics fetchMemoryStatistics(KisImageSP image) const
static KisMemoryStatisticsServer * instance()
QRect selectedRect() const
QString getString(const QString &name, const QString &def=QString()) const
virtual void setProperty(const QString &name, const QVariant &value)
int getInt(const QString &name, int def=0) const
float getFloat(const QString &name, float def=0.0) const
KisPixelSelectionSP projection() const
KisPixelSelectionSP pixelSelection