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();
452 if (event->mimeData()->hasImage()
453 || event->mimeData()->hasUrls()
454 || event->mimeData()->hasFormat(
"application/x-krita-node-internal-pointer")
455 || event->mimeData()->hasFormat(
"krita/x-colorsetentry")
456 || event->mimeData()->hasColor()) {
472 QRect imageBounds = kisimage->
bounds();
473 boost::optional<QPoint> forcedCenter;
475 if (event->keyboardModifiers() & Qt::ShiftModifier && imageBounds.contains(imgCursorPos)) {
476 forcedCenter = imgCursorPos;
479 dbgUI << Q_FUNC_INFO;
480 dbgUI <<
"\t Formats: " <<
event->mimeData()->formats();
481 dbgUI <<
"\t Urls: " <<
event->mimeData()->urls();
482 dbgUI <<
"\t Has images: " <<
event->mimeData()->hasImage();
484 if (event->mimeData()->hasFormat(
"application/x-krita-node-internal-pointer")) {
488 bool copyNode =
true;
500 if (!
viewManager()->nodeManager()->activeLayer()) {
504 viewManager()->nodeManager()->activeLayer()->parent(),
509 }
else if (event->mimeData()->hasImage() || event->mimeData()->hasUrls()) {
510 const auto *data =
event->mimeData();
514 const auto callPos = QCursor::pos();
519 const QPair<bool, KisClipboard::PasteFormatBehaviour>
source =
523 dbgUI <<
"Paste event cancelled";
529 const auto url = std::find_if(
532 [&](
const QUrl &url) {
534 == KisClipboard::PASTE_FORMAT_DOWNLOAD) {
535 return !url.isLocalFile();
538 return url.isLocalFile();
544 if (url != urls.constEnd()) {
545 QScopedPointer<QTemporaryFile>
tmp(
new QTemporaryFile());
546 tmp->setAutoRemove(
true);
548 const QUrl localUrl = [&]() -> QUrl {
549 if (!url->isLocalFile()) {
552 tmp->setFileName(url->fileName());
555 warnUI <<
"Fetching" << *url <<
"failed";
558 return QUrl::fromLocalFile(
tmp->fileName());
563 if (localUrl.isLocalFile()) {
568 this->activateWindow();
586 clip->
moveTo(pos.x(), pos.y());
593 this->
image()->nextLayerName() +
" " + i18n(
"(pasted)"),
602 this->activateWindow();
618 if (data->hasUrls()) {
619 const auto &urls = data->urls();
620 const auto url = std::find_if(urls.constBegin(), urls.constEnd(), std::mem_fn(&QUrl::isLocalFile));
621 if (url != urls.constEnd()) {
622 reference->setFilename((*url).toLocalFile());
628 reference->setPosition(
634 "ToolReferenceImages");
641 for (QUrl url : data->urls()) {
642 QScopedPointer<QTemporaryFile>
tmp(
new QTemporaryFile());
643 tmp->setAutoRemove(
true);
645 if (!url.isLocalFile()) {
648 tmp->setFileName(url.fileName());
651 qWarning() <<
"Fetching" << url <<
"failed";
654 url = QUrl::fromLocalFile(
tmp->fileName());
657 if (url.isLocalFile()) {
663 this->activateWindow();
669 QFileInfo fileInfo(url.toLocalFile());
677 if (!mimes.contains(type)) {
682 QMessageBox::warning(
684 i18nc(
"@title:window",
"Krita"),
685 i18n(
"Could not open %2.\nReason: %1.",
687 url.toDisplayString()));
708 adapter.
addNode(fileLayer, parent, above);
721 INSERT_AS_REFERENCE_IMAGE) {
724 *this->viewConverter(),
731 reference->setPosition(
738 "ToolReferenceImages");
744 }
else if (event->mimeData()->hasColor() || event->mimeData()->hasFormat(
"krita/x-colorsetentry")) {
750 if (
d->viewManager->activeNode().isNull() ||
751 d->viewManager->activeNode()->inherits(
"KisShapeLayer") ||
752 d->viewManager->activeNode()->inherits(
"KisCloneLayer") ||
753 !
d->viewManager->activeDevice()) {
754 showFloatingMessage(i18n(
"You cannot drag and drop colors on the selected layer type."), QIcon());
759 if (!
d->viewManager->activeNode()->isEditable()) {
761 if (!
d->viewManager->activeNode()->visible() &&
d->viewManager->activeNode()->userLocked()) {
762 message = i18n(
"Layer is locked and invisible.");
763 }
else if (
d->viewManager->activeNode()->userLocked()) {
764 message = i18n(
"Layer is locked.");
765 }
else if(!
d->viewManager->activeNode()->visible()) {
766 message = i18n(
"Layer is invisible.");
773 if (!image()->wrapAroundModePermitted() && !image()->
bounds().contains(imgCursorPos)) {
779 kundo2_i18n(
"Flood Fill Layer"),
false, image().data()
782 KisStrokeId fillStrokeId = image()->startStroke(strategy);
788 new KisResourcesSnapshot(image(),
d->viewManager->activeNode(),
d->viewManager->canvasResourceProvider()->resourceManager());
790 if (event->mimeData()->hasColor()) {
793 QByteArray byteData =
event->mimeData()->data(
"krita/x-colorsetentry");
799 KConfigGroup configGroup = KSharedConfig::openConfig()->group(
"KritaFill/KisToolFill");
800 QString fillMode = configGroup.readEntry<QString>(
"whatToFill",
"");
801 if (fillMode.isEmpty()) {
802 if (configGroup.readEntry<
bool>(
"fillSelection",
false)) {
803 fillMode =
"fillSelection";
805 fillMode =
"fillContiguousRegion";
808 const bool useCustomBlendingOptions = configGroup.readEntry<
bool>(
"useCustomBlendingOptions",
false);
809 const qreal customOpacity =
810 qBound(0, configGroup.readEntry<
int>(
"customOpacity", 100), 100) / 100.0;
811 QString customCompositeOp = configGroup.readEntry<QString>(
"customCompositeOp",
COMPOSITE_OVER);
816 if (event->keyboardModifiers() == Qt::ShiftModifier) {
817 if (fillMode ==
"fillSimilarRegions") {
818 fillMode =
"fillSelection";
820 fillMode =
"fillSimilarRegions";
822 }
else if (event->keyboardModifiers() == Qt::AltModifier) {
823 if (fillMode ==
"fillContiguousRegion") {
824 fillMode =
"fillSelection";
826 fillMode =
"fillContiguousRegion";
830 if (fillMode ==
"fillSelection") {
837 if (useCustomBlendingOptions) {
853 const int threshold = configGroup.readEntry(
"thresholdAmount", 8);
854 const int opacitySpread = configGroup.readEntry(
"opacitySpread", 100);
855 const bool antiAlias = configGroup.readEntry(
"antiAlias",
true);
856 const int grow = configGroup.readEntry(
"growSelection", 0);
857 const bool stopGrowingAtDarkestPixel = configGroup.readEntry<
bool>(
"stopGrowingAtDarkestPixel",
false);
858 const int feather = configGroup.readEntry(
"featherAmount", 0);
859 const int closeGap = configGroup.readEntry(
"closeGapAmount", 0);
860 QString sampleLayersMode = configGroup.readEntry(
"sampleLayersMode",
"");
861 if (sampleLayersMode.isEmpty()) {
862 if (configGroup.readEntry(
"sampleMerged",
false)) {
863 sampleLayersMode =
"allLayers";
865 sampleLayersMode =
"currentLayer";
870 const QStringList colorLabelsStr = configGroup.readEntry<QString>(
"colorLabels",
"").
split(
',', Qt::SkipEmptyParts);
872 for (
const QString &colorLabelStr : colorLabelsStr) {
874 const int colorLabel = colorLabelStr.toInt(&ok);
876 colorLabels << colorLabel;
882 if (sampleLayersMode ==
"allLayers") {
883 referencePaintDevice = image()->projection();
884 }
else if (sampleLayersMode ==
"currentLayer") {
885 referencePaintDevice =
d->viewManager->activeNode()->paintDevice();
886 }
else if (sampleLayersMode ==
"colorLabeledLayers") {
892 referencePaintDevice,
903 if (sampleLayersMode ==
"colorLabeledLayers") {
911 [referenceColor, referencePaintDevice, imgCursorPos]() ->
KUndo2Command*
913 *referenceColor = referencePaintDevice->
pixel(imgCursorPos);
925 *referenceColor = referencePaintDevice->
pixel(imgCursorPos);
928 if (fillMode ==
"fillContiguousRegion") {
930 configGroup.readEntry(
"contiguousFillMode",
"") ==
"boundaryFill"
933 KoColor regionFillingBoundaryColor;
935 const QString xmlColor = configGroup.readEntry(
"contiguousFillBoundaryColor", QString());
937 if (doc.setContent(xmlColor)) {
938 QDomElement e = doc.documentElement().firstChild().toElement();
941 if (e.hasAttribute(
"space") || e.tagName().toLower() ==
"srgb") {
943 }
else if (doc.documentElement().hasAttribute(
"space") || doc.documentElement().tagName().toLower() ==
"srgb"){
944 regionFillingBoundaryColor =
KoColor::fromXML(doc.documentElement(), channelDepthID, &ok);
948 const bool useSelectionAsBoundary = configGroup.readEntry(
"useSelectionAsBoundary",
false);
949 const bool blendingOptionsAreNoOp = useCustomBlendingOptions
955 blendingOptionsAreNoOp &&
956 opacitySpread == 100 &&
957 useSelectionAsBoundary ==
false &&
958 !antiAlias && grow == 0 && feather == 0 &&
960 sampleLayersMode ==
"currentLayer";
980 if (useCustomBlendingOptions) {
1003 QRect
bounds = image()->bounds();
1017 fillMask->
pixelSelection(), referenceColor, referencePaintDevice,
1022 image()->addJob(fillStrokeId, job);
1059 image()->endStroke(fillStrokeId);
1065 dbgUI << Q_FUNC_INFO
1066 <<
"Formats: " <<
event->mimeData()->formats()
1067 <<
"Urls: " <<
event->mimeData()->urls()
1068 <<
"Has images: " <<
event->mimeData()->hasImage();
1069 if (event->mimeData()->hasImage()
1070 || event->mimeData()->hasUrls()
1071 || event->mimeData()->hasFormat(
"application/x-krita-node-internal-pointer")
1072 || event->mimeData()->hasFormat(
"krita/x-colorsetentry")
1073 || event->mimeData()->hasColor()) {
1074 return event->accept();
1077 return event->ignore();
1095 return d->viewManager->mainWindow();
1106 return mw ? mw->statusBar() : 0;
1113 sb->showMessage(text, timeout);
1118 if (!sb || sb->isHidden() ||
1137 return unitActions->actions();
1144 if (viewCount > 1) {
1164 document()->waitForSavingToComplete();
1168 name = QFileInfo(
document()->path()).fileName();
1171 name = i18n(
"Untitled");
1173 int res = QMessageBox::warning(
this,
1174 i18nc(
"@title:window",
"Krita"),
1175 i18n(
"<p>The document <b>'%1'</b> has been modified.</p><p>Do you want to save it?</p>", name),
1176 QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, QMessageBox::Yes);
1179 case QMessageBox::Yes : {
1180 bool isNative = (
document()->mimeType() ==
document()->nativeFormatMimeType());
1185 case QMessageBox::No : {
1214 d->canvasController.updateScreenResolution(
this);
1217 int penWidth = qRound(
d->screenMigrationTracker.currentScreen()->devicePixelRatio());
1224 return d->screenMigrationTracker.currentScreen();
1229 this->setPalette(pal);
1230 for (
int i=0; i<this->children().size();i++) {
1231 QWidget *w = qobject_cast<QWidget*> ( this->children().at(i));
1246 QString title =
d->document->caption();
1248 if (!
d->document->isReadWrite()) {
1249 title +=
" " + i18n(
"Write Protected");
1252 if (
d->document->isRecovered()) {
1253 title +=
" " + i18n(
"Recovered");
1260 title += QString(
" (").append( KFormat().formatByteSize(qreal(fileSizeStats.
imageSize))).append(
") ");
1265 this->setWindowTitle(title);
1282 config.
setProperty(
"geometry",
d->subWindow->saveGeometry().toBase64());
1285 const KoZoomState zoomState =
d->canvasController.zoomState();
1290 d->canvasController.saveCanvasState(config);
1296 QByteArray geometry = QByteArray::fromBase64(config.
getString(
"geometry",
"").toLatin1());
1297 d->subWindow->restoreGeometry(QByteArray::fromBase64(geometry));
1300 qreal zoom = config.
getFloat(
"zoom", 1.0f);
1303 d->canvasController.restoreCanvasState(config);
1308 d->currentNode = node;
1316 return d->currentNode;
1327 node =
d->currentNode;
1329 return qobject_cast<KisLayer*>(node.
data());
1334 return dynamic_cast<KisMask*
>(
d->currentNode.data());
1353 if (
canvasBase()->
image()->colorSpace()->colorDepthId().
id().contains(
"F"))
1355 message = i18n(
"Soft Proofing doesn't work in floating point.");
1360 message = i18n(
"Soft Proofing turned on.");
1362 message = i18n(
"Soft Proofing turned off.");
1372 if (
canvasBase()->
image()->colorSpace()->colorDepthId().
id().contains(
"F"))
1374 message = i18n(
"Gamut Warnings don't work in floating point.");
1380 message = i18n(
"Gamut Warnings turned on.");
1381 if (!
d->softProofing){
1382 message +=
"\n "+i18n(
"But Soft Proofing is still off.");
1385 message = i18n(
"Gamut Warnings turned off.");
1393 return d->softProofing;
1398 return d->gamutCheck;
1410 if (
image()->locked()) {
1413 image()->blockSignals(
false);
1430 d->canvasController.syncOnImageResolutionChange();
1431 d->zoomManager.syncOnImageResolutionChange();
1437 d->canvasController.syncOnImageSizeChange(oldStillPoint, newStillPoint);
1443 d->subWindow->close();
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
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
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 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)
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