koffice/krita

Boudewijn Rempt boud at valdyas.org
Thu Nov 23 09:59:58 CET 2006


SVN commit 607119 by rempt:

Masks are back, as are some image manipulation actions. Remove all
toolbars from krita. Fix a couple of sig/slot bugs. Reinstate
drag & drop support.

Note: Cyrille should really port the GRAY colorspace so masks work
again and Bart should consider using the ALPHA colorspace instead
of GRAYA for masks.

Still no layers in the layerbox, no idea what's going on. And the
layout of the statusbar is seriously messed up. Plus, sundry lacunae,
bugs and so on. But KisView2 is still a very small class :-)

CCMAIL: kimageshop at kde.org



 M  +2 -0      image/kis_paint_layer.cc  
 M  +4 -0      image/kis_shear_visitor.h  
 M  +0 -14     krita.rc  
 M  +2 -0      ui/CMakeLists.txt  
 A             ui/kis_image_manager.cc   [License: LGPL (v2+)]
 A             ui/kis_image_manager.h   [License: LGPL (v2+)]
 A             ui/kis_mask_manager.cc   [License: LGPL (v2+)]
 M  +21 -1     ui/kis_mask_manager.h  
 M  +0 -1      ui/kis_selection_manager.cc  
 M  +105 -49   ui/kis_view2.cpp  
 M  +19 -18    ui/kis_view2.h  


--- trunk/koffice/krita/image/kis_paint_layer.cc #607118:607119
@@ -244,6 +244,8 @@
     // Grey8 nicely fits our needs of being intuitively comparable to other apps'
     // mask layer interfaces. It does have an alpha component though, which is a bit
     // less appropriate in this context.
+    // Bart: why not use ALPHA -- that is a single channel 8-bit
+    // colorspace, which is best suited for this purpose (BSAR).
     m_mask = new KisPaintDevice(KisMetaRegistry::instance()->csRegistry()
             ->colorSpace(KoID("GRAYA"), 0));
 
--- trunk/koffice/krita/image/kis_shear_visitor.h #607118:607119
@@ -27,6 +27,10 @@
 #include "kis_undo_adapter.h"
 #include "kis_transaction.h"
 #include "kis_rotate_visitor.h"
+#include "kis_paint_layer.h"
+#include "kis_group_layer.h"
+#include "kis_adjustment_layer.h"
+#include "kis_part_layer.h"
 
 class KisShearVisitor : public KisLayerVisitor {
 public:
--- trunk/koffice/krita/krita.rc #607118:607119
@@ -139,10 +139,7 @@
 	<Action name="misc_filters"/>
 </Menu>
 
-<Menu name="Tools"><text>&amp;Tools</text>
-</Menu>
 
-
 <Menu name="settings"><text>Settings</text>
   <Separator group="settings_show"/>
   <Action name="preferences" group="settings_configure"/>
@@ -150,17 +147,6 @@
 
 </MenuBar>
 
-<ToolBar name="navigation" position="top"><Text>Navigation</Text>
-  <Action name="refresh_canvas"/>
-  <Action name="zoom"/>
-  <Action name="zoom_in"/>
-  <Action name="zoom_out"/>
-</ToolBar>
-
-<ToolBar name="ToolBox" position="left">
-    <Text>Krita</Text>
-</ToolBar>
-
 <ToolBar name="BrushesAndStuff" position="top">
      <Text>Brushes and Stuff</Text>
      <Action name="brushes"/>
--- trunk/koffice/krita/ui/CMakeLists.txt #607118:607119
@@ -82,6 +82,8 @@
     kis_zoom_manager.cc
     kobirdeyepanel.cpp
     squeezedcombobox.cpp
+    kis_image_manager.cc
+    kis_mask_manager.cc
 )
 
 
--- trunk/koffice/krita/ui/kis_mask_manager.h #607118:607119
@@ -22,6 +22,9 @@
 #include <QObject>
 
 class KisView2;
+class KActionCollection;
+class KAction;
+class KToggleAction;
 
 class KisMaskManager : public QObject {
 
@@ -33,14 +36,31 @@
     KisMaskManager(KisView2 * view );
     ~KisMaskManager() {}
 
-    void setup();
+    void setup(KActionCollection * actionCollection);
     void updateGUI();
 
 public slots:
 
+    void slotCreateMask();
+    void slotMaskFromSelection();
+    void slotMaskToSelection();
+    void slotApplyMask();
+    void slotRemoveMask();
+    void slotEditMask();
+    void slotShowMask();
+    void maskUpdated();
 
 private:
     KisView2 * m_view;
+
+    KAction *m_createMask;
+    KAction *m_maskFromSelection;
+    KAction *m_maskToSelection;
+    KAction *m_applyMask;
+    KAction *m_removeMask;
+    KToggleAction *m_editMask;
+    KToggleAction *m_showMask;
+
 };
 
 #endif // KIS_MASK_MANAGER
--- trunk/koffice/krita/ui/kis_selection_manager.cc #607118:607119
@@ -27,7 +27,6 @@
 
 #include <kdebug.h>
 #include <kaction.h>
-
 #include <ktoggleaction.h>
 #include <klocale.h>
 #include <kstdaction.h>
--- trunk/koffice/krita/ui/kis_view2.cpp #607118:607119
@@ -21,14 +21,18 @@
 #include <QGridLayout>
 #include <QRect>
 #include <QWidget>
+#include <QDropEvent>
+#include <QDragEnterEvent>
+#include <QApplication>
 
+#include <kurl.h>
 #include <kstdaction.h>
 #include <kxmlguifactory.h>
 #include <klocale.h>
-#include <kfiledialog.h>
-#include <kurl.h>
+#include <kaction.h>
+#include <k3urldrag.h>
+#include <kmenu.h>
 
-#include <KoFilterManager.h>
 #include <KoMainWindow.h>
 #include <KoCanvasController.h>
 #include <KoShapeManager.h>
@@ -57,12 +61,15 @@
 #include "kis_resource_provider.h"
 #include "kis_resource_provider.h"
 #include "kis_selection_manager.h"
+#include "kis_image_manager.h"
 #include "kis_controlframe.h"
 #include "kis_birdeye_box.h"
 #include "kis_layerbox.h"
 #include "kis_layer_manager.h"
 #include "kis_zoom_manager.h"
-#include "kis_import_catcher.h"
+#include "kis_grid_manager.h"
+#include "kis_perspective_grid_manager.h"
+#include "kis_mask_manager.h"
 
 class KisView2::KisView2Private {
 
@@ -85,6 +92,8 @@
         , layerBox( 0 )
         , layerManager( 0 )
         , zoomManager( 0 )
+        , imageManager( 0 )
+        , maskManager( 0 )
         {
             viewConverter = new KoZoomHandler( );
 
@@ -99,6 +108,8 @@
             delete selectionManager;
             delete layerManager;
             delete zoomManager;
+            delete imageManager;
+            delete maskManager;
         }
 
 public:
@@ -120,6 +131,8 @@
     KisLayerBox * layerBox;
     KisLayerManager * layerManager;
     KisZoomManager * zoomManager;
+    KisImageManager * imageManager;
+    KisMaskManager * maskManager;
 };
 
 
@@ -155,10 +168,10 @@
 
     // Wait for the async image to have loaded
     if ( m_d->doc->isLoading() ) {
-        connect( m_d->doc, SIGNAL( sigLoadingFinished() ), this, SLOT( slotInitializeCanvas() ) );
+        connect( m_d->doc, SIGNAL( sigLoadingFinished() ), this, SLOT( slotLoadingFinished() ) );
     }
     else {
-        slotInitializeCanvas();
+        slotLoadingFinished();
     }
 
 }
@@ -169,6 +182,75 @@
     delete m_d;
 }
 
+
+void KisView2::dragEnterEvent(QDragEnterEvent *event)
+{
+    // Only accept drag if we're not busy, particularly as we may
+    // be showing a progress bar and calling qApp->processEvents().
+    if (K3URLDrag::canDecode(event) && QApplication::overrideCursor() == 0) {
+        event->accept();
+    } else {
+        event->ignore();
+    }
+}
+
+void KisView2::dropEvent(QDropEvent *event)
+{
+    KUrl::List urls;
+
+    if (K3URLDrag::decode(event, urls))
+    {
+        if (urls.count() > 0) {
+
+            KMenu popup(this);
+            popup.setObjectName("drop_popup");
+
+            KAction insertAsNewLayer(i18n("Insert as New Layer"), 0, "insert_as_new_layer");
+            KAction insertAsNewLayers(i18n("Insert as New Layers"), 0, "insert_as_new_layers");
+
+            KAction openInNewDocument(i18n("Open in New Document"), 0, "open_in_new_document");
+            KAction openInNewDocuments(i18n("Open in New Documents"), 0, "open_in_new_documents");
+
+            KAction cancel(i18n("Cancel"), 0, "cancel");
+
+            if (urls.count() == 1) {
+                if (!image().isNull()) {
+                    popup.addAction(&insertAsNewLayer);
+                }
+                popup.addAction(&openInNewDocument);
+            }
+            else {
+                if (!image().isNull()) {
+                    popup.addAction(&insertAsNewLayers);
+                }
+                popup.addAction(&openInNewDocuments);
+            }
+
+            (void)popup.addSeparator();
+            popup.addAction(&cancel);
+
+            QAction *action = popup.exec(QCursor::pos());
+
+            if (action != 0 && action != &cancel) {
+                for (KUrl::List::ConstIterator it = urls.begin (); it != urls.end (); ++it) {
+                    KUrl url = *it;
+
+                    if (action == &insertAsNewLayer || action == &insertAsNewLayers) {
+                        m_d->imageManager->importImage(url);
+                    } else {
+                        Q_ASSERT(action == &openInNewDocument || action == &openInNewDocuments);
+
+                        if (shell() != 0) {
+                            shell()->openDocument(url);
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+
 void KisView2::slotChildActivated(bool a) {
 
     // It should be so that the only part (child) we can activate, is
@@ -187,7 +269,13 @@
 }
 
 
+void KisView2::canvasAddChild(KoViewChild *child) {
+    KoView::canvasAddChild(child);
+    connect(this, SIGNAL(viewTransformationsChanged()), child, SLOT(reposition()));
+}
 
+
+
 KisImageSP KisView2::image()
 {
     return m_d->doc->currentImage();
@@ -238,8 +326,9 @@
     return m_d->doc->undoAdapter();
 }
 
-void KisView2::slotInitializeCanvas()
+void KisView2::slotLoadingFinished()
 {
+    disconnect(m_d->doc, SIGNAL(loadingFinished()), this, SLOT(slotLoadingFinished()));
 
     m_d->canvas->setCanvasSize( image()->width(), image()->height() );
 
@@ -309,8 +398,6 @@
 
 void KisView2::createActions()
 {
-    KAction *action = new KAction(i18n("I&nsert Image as Layer..."), actionCollection(), "insert_image_as_layer");
-    connect(action, SIGNAL(triggered()), this, SLOT(slotInsertImageAsLayer()));
 
 }
 
@@ -333,7 +420,12 @@
     m_d->zoomManager = new KisZoomManager( this, m_d->viewConverter );
     m_d->zoomManager->setup( actionCollection() );
 
+    m_d->imageManager = new KisImageManager( this );
+    m_d->imageManager->setup( actionCollection() );
 
+    m_d->maskManager = new KisMaskManager( this );
+    m_d->maskManager->setup( actionCollection() );
+
 }
 
 void KisView2::updateGUI()
@@ -343,7 +435,8 @@
     m_d->selectionManager->updateGUI();
     m_d->filterManager->updateGUI();
     m_d->zoomManager->updateGUI();
-    //m_toolManager->updateGUI(); // XXX Port this or not to the generic tool manager? BSAR
+    m_d->imageManager->updateGUI();
+    m_d->maskManager->updateGUI();
     //m_gridManager->updateGUI();
     //m_perspectiveGridManager->updateGUI();
 
@@ -360,7 +453,7 @@
         connect(img.data(), SIGNAL(sigProfileChanged(KoColorProfile * )), m_d->statusBar, SLOT(updateStatusBarProfileLabel()));
 
         connect(img.data(), SIGNAL(sigLayersChanged(KisGroupLayerSP)), m_d->layerManager, SLOT(layersUpdated()));
-        //connect(img.data(), SIGNAL(sigMaskInfoChanged()), SLOT(maskUpdated()));
+        connect(img.data(), SIGNAL(sigMaskInfoChanged()), m_d->maskManager, SLOT(maskUpdated()));
         connect(img.data(), SIGNAL(sigLayerAdded(KisLayerSP)), m_d->layerManager, SLOT(layersUpdated()));
         connect(img.data(), SIGNAL(sigLayerRemoved(KisLayerSP, KisGroupLayerSP, KisLayerSP)), m_d->layerManager, SLOT(layersUpdated()));
         connect(img.data(), SIGNAL(sigLayerMoved(KisLayerSP, KisGroupLayerSP, KisLayerSP)), m_d->layerManager, SLOT(layersUpdated()));
@@ -374,7 +467,7 @@
         connect(img.data(), SIGNAL(sigLayerAdded(KisLayerSP)),
                 SLOT(handlePartLayerAdded(KisLayerSP)));
 #endif
-        //  maskUpdated();
+        m_d->maskManager->maskUpdated();
 #if 0
 #ifdef HAVE_OPENGL
         if (!m_OpenGLImageContext.isNull()) {
@@ -428,41 +521,4 @@
 #endif
 }
 
-void KisView2::slotInsertImageAsLayer()
-{
-    if (importImage() > 0)
-        m_d->doc->setModified(true);
-
-}
-
-qint32 KisView2::importImage(const KUrl& urlArg)
-{
-    KisImageSP currentImage = image();
-
-    if (!currentImage) {
-        return 0;
-    }
-
-    KUrl::List urls;
-    Q_INT32 rc = 0;
-
-    if (urlArg.isEmpty()) {
-        QString mimelist = KoFilterManager::mimeFilter("application/x-krita", KoFilterManager::Import).join(" ");
-        urls = KFileDialog::getOpenUrls(KUrl(QString::null), mimelist, 0, i18n("Import Image"));
-    } else {
-        urls.push_back(urlArg);
-    }
-
-    if (urls.empty())
-        return 0;
-
-    for (KUrl::List::iterator it = urls.begin(); it != urls.end(); ++it) {
-        new KisImportCatcher( *it, currentImage );
-    }
-
-    canvas()->update();
-
-    return rc;
-}
-
 #include "kis_view2.moc"
--- trunk/koffice/krita/ui/kis_view2.h #607118:607119
@@ -27,20 +27,26 @@
 
 #include <kis_types.h>
 
+class QDragEnterEvent;
+class QDropEvent;
+
+class KoCanvasController;
+class KoViewChield;
+
 class KisCanvas2;
+class KisDoc2;
+class KisFilterManager;
+class KisImage;
+class KisLayerManager;
+class KisOpenGLCanvas2;
 class KisQPainterCanvas;
-class KisOpenGLCanvas2;
-class KisImage;
-class KoCanvasController;
-class KisDoc2;
 class KisResourceProvider;
+class KisSelectionManager;
 class KisStatusBar;
-class KisSelectionManager;
-class KisLayerManager;
 class KisUndoAdapter;
 class KisZoomManager;
-class KisFilterManager;
 
+
 class KisView2 : public KoView {
 
 Q_OBJECT
@@ -52,9 +58,14 @@
 
 public:
 
+    // QWidget overrides
+    virtual void dragEnterEvent ( QDragEnterEvent * event );
+    virtual void dropEvent ( QDropEvent * event );
+
     // KoView implementation
     virtual void updateReadWrite( bool readwrite ) { Q_UNUSED(readwrite); }
     void slotChildActivated(bool a);
+    void canvasAddChild( KoViewChild * child );
 
 public:  // Krita specific interfaces
 
@@ -97,9 +108,8 @@
 
 private slots:
 
-    void slotInitializeCanvas();
+    void slotLoadingFinished();
 
-    void slotInsertImageAsLayer();
 
 
 private:
@@ -116,15 +126,6 @@
     void createActions();
     void createManagers();
 
-    /**
-     * Import an image as a layer. If there is more than
-     * one layer in the image, import all of them as separate
-     * layers.
-     *
-     * @param url the url to the image file
-     * @return the number of layers added
-     */
-    qint32 importImage(const KUrl& url = KUrl());
 
 
 private:


More information about the kimageshop mailing list