[prev in list] [next in list] [prev in thread] [next in thread] 

List:       koffice-devel
Subject:    Patch to run Krita scripts from commandline
From:       Sebastian Sauer <mail () dipe ! org>
Date:       2007-02-26 2:11:29
Message-ID: 200702260311.30445.mail () dipe ! org
[Download RAW message or body]

Hi *

attached patch makes it possible to use the kross-app delivered with kdelibs 
to run Krita-scripts from the commandline. That's not only useful for 
propably automated batch-processing or other things where someone does like 
to have things automated rather then to click somewhere, but also for testing 
new scripts.

The patch does mainly introduce some if()-checks for the statusbar and the 
mainwindow since both are NULL while there exist a KisDoc2+KisView2 if run 
from the commandline. Also it was needed to switch 
KisDoc2::createViewInstance from protected to public since it's used at the 
scripting plugin to create a KisView2-instance from within an empty KisDoc2 
instance.

It's not perfect yet since on shutdown (after save is done), it still crashes 
at krita/image/tiles/kis_tilemanager.cc:249 but at least it's a start + the 
attached sample script actualy produces what it should produce :)

So, ok to commit?

-- 
Sebastian Sauer aka dipesh[sebsauer]
http://www.dipe.org/public_key.asc
Fingerprint: 8F1E 219B 16E6 4EC7 29CC F408 E193 65E2 9134 2221
Coder in http://www.koffice.org && http://www.kmldonkey.org

["krita.patch" (text/x-diff)]

Index: plugins/viewplugins/scripting/kritacore/krs_module.cpp
===================================================================
--- plugins/viewplugins/scripting/kritacore/krs_module.cpp	(Revision 637306)
+++ plugins/viewplugins/scripting/kritacore/krs_module.cpp	(Arbeitskopie)
@@ -46,6 +46,25 @@
 //#include <kis_image.h>
 #include <kis_meta_registry.h>
 
+extern "C"
+{
+    KROSSKRITACORE_EXPORT QObject* krossmodule()
+    {
+kDebug()<<"===================> krossmodule() 1"<<endl;
+        KisDoc2* doc = new KisDoc2(0, 0, true);
+kDebug()<<"===================> krossmodule() 2"<<endl;
+        KoColorSpace* cs = KoColorSpaceRegistry::instance()->rgb8();
+kDebug()<<"===================> krossmodule() 3"<<endl;
+        doc->newImage("unnamed", 100,100,cs /*,KoColor(QColor(255,255,255),cs)*/);
+//doc->prepareForImport();
+kDebug()<<"===================> krossmodule() 88888888888888888888888888"<<endl;
+        KisView2* view = dynamic_cast< KisView2* >( doc->createViewInstance(0 /*no \
parent widget*/) ); +        Q_ASSERT(view);
+kDebug()<<"===================> krossmodule() 99999999999999999999999999"<<endl;
+        return new Scripting::Module(view);
+    }
+}
+
 using namespace Scripting;
 
 namespace Scripting {
Index: plugins/viewplugins/scripting/kritacore/CMakeLists.txt
===================================================================
--- plugins/viewplugins/scripting/kritacore/CMakeLists.txt	(Revision 637306)
+++ plugins/viewplugins/scripting/kritacore/CMakeLists.txt	(Arbeitskopie)
@@ -1,6 +1,6 @@
 include_directories(${KOKROSS_INCLUDES})
 
-set(krosskritacore_LIB_SRCS
+set(krossmodulekrita_LIB_SRCS
    krs_module.cpp
    krs_progress.cpp
    krs_paint_layer.cpp
@@ -14,9 +14,9 @@
    krs_wavelet.cpp
    )
 
-kde4_automoc(${krosskritacore_LIB_SRCS})
-qt4_wrap_cpp(krosskritacore_LIB_SRCS krs_iterator.h)
-kde4_add_library(krosskritacore SHARED ${krosskritacore_LIB_SRCS})
-add_definitions(${KDE4_ENABLE_EXCEPTIONS})
-target_link_libraries(krosskritacore kokross kritaui)
-install(TARGETS krosskritacore DESTINATION ${LIB_INSTALL_DIR})
+kde4_automoc(${krossmodulekrita_LIB_SRCS})
+qt4_wrap_cpp(krossmodulekrita_LIB_SRCS krs_iterator.h)
+kde4_add_library(krossmodulekrita SHARED ${krossmodulekrita_LIB_SRCS})
+##add_definitions(${KDE4_ENABLE_EXCEPTIONS})
+target_link_libraries(krossmodulekrita kokross kritaui)
+install(TARGETS krossmodulekrita DESTINATION ${LIB_INSTALL_DIR})
Index: plugins/viewplugins/scripting/CMakeLists.txt
===================================================================
--- plugins/viewplugins/scripting/CMakeLists.txt	(Revision 637306)
+++ plugins/viewplugins/scripting/CMakeLists.txt	(Arbeitskopie)
@@ -8,7 +8,7 @@
 set(kritascripting_PART_SRCS scriptingpart.cpp)
 kde4_automoc(${kritascripting_PART_SRCS})
 kde4_add_plugin(kritascripting ${kritascripting_PART_SRCS})
-target_link_libraries(kritascripting kritaui ${KDE4_KROSSCORE_LIBS} kokross \
krosskritacore) +target_link_libraries(kritascripting kritaui ${KDE4_KROSSCORE_LIBS} \
kokross krossmodulekrita)  install(TARGETS kritascripting DESTINATION \
${PLUGIN_INSTALL_DIR})  
 ########### install files ###############
Index: image/kis_shared_ptr.h
===================================================================
--- image/kis_shared_ptr.h	(Revision 637306)
+++ image/kis_shared_ptr.h	(Arbeitskopie)
@@ -103,7 +103,7 @@
         inline const T& operator*() const { Q_ASSERT(d); return *d; }
         inline T& operator*() { Q_ASSERT(d); return *d; }
         inline const T* operator->() const { Q_ASSERT(d); return d; }
-        inline T* operator->() { Q_ASSERT(d); return d; }
+        inline T* operator->() { /*Q_ASSERT(d);*/ return d; }
     
         /**
         * @return true if the pointer is null
Index: ui/kis_doc2.h
===================================================================
--- ui/kis_doc2.h	(Revision 637306)
+++ ui/kis_doc2.h	(Arbeitskopie)
@@ -165,7 +165,7 @@
      */
     void sigCommandExecuted();
 
-protected:
+public:
     // Overide KoDocument
     virtual KoView* createViewInstance(QWidget *parent);
 
Index: ui/kis_view2.cpp
===================================================================
--- ui/kis_view2.cpp	(Revision 637306)
+++ ui/kis_view2.cpp	(Arbeitskopie)
@@ -165,7 +165,8 @@
     else
         setXMLFile("krita.rc");
 
-    actionCollection()->addAction(KStandardAction::KeyBindings, "keybindings", \
mainWindow()->guiFactory(), SLOT( configureShortcuts() )); +    if( mainWindow() )
+        actionCollection()->addAction(KStandardAction::KeyBindings, "keybindings", \
mainWindow()->guiFactory(), SLOT( configureShortcuts() ));  
     m_d = new KisView2Private();
 
@@ -404,7 +405,7 @@
     KisLayerBoxFactory layerboxFactory( this );
     m_d->layerBox = qobject_cast<KisLayerBox*>( createDockWidget( &layerboxFactory ) \
);  
-    m_d->statusBar = new KisStatusBar( KoView::statusBar(), this );
+    m_d->statusBar = KoView::statusBar() ? new KisStatusBar( KoView::statusBar(), \
this ) : 0;  m_d->controlFrame = new KisControlFrame( mainWindow(), this );
 
     show();
@@ -479,8 +480,10 @@
 
         connect(img.data(), SIGNAL(sigActiveSelectionChanged(KisImageSP)), \
                m_d->selectionManager, SLOT(imgSelectionChanged(KisImageSP)));
         //connect(img.data(), SIGNAL(sigActiveSelectionChanged(KisImageSP)), this, \
                SLOT(updateCanvas()));
-        connect(img.data(), SIGNAL(sigColorSpaceChanged(KoColorSpace *)), \
                m_d->statusBar, SLOT(updateStatusBarProfileLabel()));
-        connect(img.data(), SIGNAL(sigProfileChanged(KoColorProfile * )), \
m_d->statusBar, SLOT(updateStatusBarProfileLabel())); +        if( m_d->statusBar ) {
+            connect(img.data(), SIGNAL(sigColorSpaceChanged(KoColorSpace *)), \
m_d->statusBar, SLOT(updateStatusBarProfileLabel())); +            \
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()), m_d->maskManager, \
SLOT(maskUpdated())); @@ -502,8 +505,10 @@
         connect( m_d->doc, SIGNAL( sigCommandExecuted() ), img.data(), SLOT( \
slotCommandExecuted() ) );  }
     m_d->canvas->connectCurrentImage();
-    m_d->layerBox->setImage(img);
-    m_d->birdEyeBox->setImage(img);
+    if( m_d->layerBox )
+        m_d->layerBox->setImage(img);
+    if( m_d->birdEyeBox )
+        m_d->birdEyeBox->setImage(img);
 
 }
 
@@ -517,12 +522,15 @@
         img->disconnect( m_d->layerManager );
         img->disconnect( m_d->canvas );
         img->disconnect( m_d->selectionManager );
-        img->disconnect( m_d->statusBar );
+        if( m_d->statusBar )
+            img->disconnect( m_d->statusBar );
 
         disconnect( m_d->doc, SIGNAL( sigCommandExecuted() ), img.data(), SLOT( \
slotCommandExecuted() ) );  
-        m_d->layerBox->setImage(KisImageSP(0));
-        m_d->birdEyeBox->setImage(KisImageSP(0));
+        if( m_d->layerBox )
+            m_d->layerBox->setImage(KisImageSP(0));
+        if( m_d->birdEyeBox )
+            m_d->birdEyeBox->setImage(KisImageSP(0));
         m_d->canvas->disconnectCurrentImage();
 
     }
Index: ui/kis_layer_manager.cc
===================================================================
--- ui/kis_layer_manager.cc	(Revision 637306)
+++ ui/kis_layer_manager.cc	(Arbeitskopie)
@@ -225,8 +225,8 @@
 
     m_imgResizeToLayer->setEnabled(img && img->activeLayer());
 
-    m_view->statusBar()->setProfile(img);
-
+    if( m_view->statusBar() )
+        m_view->statusBar()->setProfile(img);
 }
 
 void KisLayerManager::imgResizeToActiveLayer()


["commandline.py" (application/x-python)]

_______________________________________________
koffice-devel mailing list
koffice-devel@kde.org
https://mail.kde.org/mailman/listinfo/koffice-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic