diff --git a/CMakeLists.txt b/CMakeLists.txt index ce8f560ce49..09d98be5184 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,783 +1,788 @@ project(calligra) cmake_minimum_required(VERSION 2.8.0 FATAL_ERROR) cmake_policy(SET CMP0002 OLD) #cmake_policy CMP0017 was introduced in version 2.8.4 if(${CMAKE_VERSION} VERSION_GREATER 2.8.3) cmake_policy(SET CMP0017 NEW) endif() ############ ############# ## Options ## ############# ############ ###################### ####################### ## Constants defines ## ####################### ###################### # define the generic version of the Calligra libraries here # this makes it easy to advance it when the next Calligra release comes set(GENERIC_CALLIGRA_LIB_VERSION "12.0.0") set(GENERIC_CALLIGRA_LIB_SOVERSION "12") set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules ) # # WARNING: don't change the SHOULD_BUILD_app if an application # doesn't build, but rather add the following line: # option(BUILD_app "Build directory app" OFF) # #eg: #option(BUILD_kexi "Build directory kexi" OFF) # kexi isn't buildable at the moment option(GHNS "support Get Hot New Stuff" ON) option(NEPOMUK "support NEPOMUK Tagging" ON) option(TINY "compile a tiny Calligra" OFF) option(CREATIVEONLY "compile only Karbon and Krita" OFF) option(QT3SUPPORT "Build the parts of Calligra that still depend on Qt3" ON) option(PACKAGERS_BUILD "Build support of multiple CPU architectures in one binary. Should be used by packagers only." OFF) IF (TINY) set(SHOULD_BUILD_WORDS TRUE) set(SHOULD_BUILD_STAGE TRUE) set(SHOULD_BUILD_SHEETS TRUE) set(SHOULD_BUILD_KARBON FALSE) set(SHOULD_BUILD_KRITA FALSE) set(SHOULD_BUILD_KEXI FALSE) set(SHOULD_BUILD_FLOW FALSE) set(SHOULD_BUILD_PLAN FALSE) set(SHOULD_BUILD_KDGANTT FALSE) set(SHOULD_BUILD_SCRIPTING FALSE) set(SHOULD_BUILD_KOREPORT FALSE) set(SHOULD_BUILD_BRAINDUMP FALSE) set(SHOULD_BUILD_CALLIGRA FALSE) set(SHOULD_BUILD_CSTESTER FALSE) set(SHOULD_BUILD_KOABSTRACTION TRUE) set(SHOULD_BUILD_ACTIVE TRUE) ELSEIF (CREATIVEONLY) set(SHOULD_BUILD_WORDS FALSE) set(SHOULD_BUILD_STAGE FALSE) set(SHOULD_BUILD_SHEETS FALSE) set(SHOULD_BUILD_KARBON TRUE) set(SHOULD_BUILD_KRITA TRUE) set(SHOULD_BUILD_KEXI FALSE) set(SHOULD_BUILD_FLOW FALSE) set(SHOULD_BUILD_PLAN FALSE) set(SHOULD_BUILD_KDGANTT FALSE) set(SHOULD_BUILD_SCRIPTING FALSE) set(SHOULD_BUILD_KOREPORT FALSE) set(SHOULD_BUILD_BRAINDUMP FALSE) set(SHOULD_BUILD_CALLIGRA FALSE) set(SHOULD_BUILD_CSTESTER FALSE) set(SHOULD_BUILD_KOABSTRACTION FALSE) set(SHOULD_BUILD_ACTIVE FALSE) ELSE() set(SHOULD_BUILD_WORDS TRUE) set(SHOULD_BUILD_STAGE TRUE) set(SHOULD_BUILD_SHEETS TRUE) set(SHOULD_BUILD_KARBON TRUE) set(SHOULD_BUILD_KRITA TRUE) set(SHOULD_BUILD_KEXI TRUE) set(SHOULD_BUILD_FLOW TRUE) set(SHOULD_BUILD_PLAN TRUE) set(SHOULD_BUILD_KDGANTT TRUE) set(SHOULD_BUILD_SCRIPTING TRUE) set(SHOULD_BUILD_KOREPORT TRUE) set(SHOULD_BUILD_BRAINDUMP TRUE) set(SHOULD_BUILD_CALLIGRA TRUE) set(SHOULD_BUILD_CSTESTER TRUE) set(SHOULD_BUILD_KOABSTRACTION TRUE) set(SHOULD_BUILD_ACTIVE FALSE) ENDIF() if(KDE4_BUILD_TESTS) # only with this definition will the FOO_TEST_EXPORT macro do something add_definitions(-DCOMPILING_TESTS) endif(KDE4_BUILD_TESTS) ######################## ######################### ## Look for KDE and Qt ## ######################### ######################## set(KDE_MIN_VERSION "4.3.0") find_package(KDE4 4.3.0 REQUIRED) if (QT3SUPPORT) find_package(Qt4 4.7.0 REQUIRED QtCore QtGui QtXml QtScript QtSvg QtTest QtWebKit QtDBus QtOpenGL Qt3Support) else (QT3SUPPORT) find_package(Qt4 4.7.0 REQUIRED QtCore QtGui QtXml QtScript QtSvg QtTest QtWebKit QtDBus QtOpenGL) endif (QT3SUPPORT) include (KDE4Defaults) include (MacroLibrary) include (MacroAdditionalCleanFiles) include (MacroAddFileDependencies) set(SHOULD_BUILD_TEXTSHAPE TRUE) if ((${QTVERSION} VERSION_EQUAL 4.8.0) OR (${QTVERSION} VERSION_EQUAL 4.8.1)) if (NOT IHAVEPATCHEDQT) set(SHOULD_BUILD_WORDS FALSE) set(SHOULD_BUILD_STAGE FALSE) set(SHOULD_BUILD_TEXTSHAPE FALSE) MESSAGE(STATUS "WARNING: You are using a version of Qt that causes crashes. As a result Words and Stage will not be built. Please upgrade to 4.8.2. You can also patch Qt and when building Calligra set IHAVEPATCHEDQT. Patch against Qt can be found in qt48setx.patch") endif (NOT IHAVEPATCHEDQT) endif ((${QTVERSION} VERSION_EQUAL 4.8.0) OR (${QTVERSION} VERSION_EQUAL 4.8.1)) if(NOT ${KDE_VERSION} VERSION_GREATER 4.4.0) set(GHNS FALSE) endif(NOT ${KDE_VERSION} VERSION_GREATER 4.4.0) macro_optional_find_package(LibAttica) macro_log_feature(LIBATTICA_FOUND "LibAttica" "Attica is used for Get Hot New Stuff." "https://projects.kde.org/projects/kdesupport/attica" FALSE "" "You need at least version 3.0 for uploading of resources to work.") if (NOT LIBATTICA_FOUND) set(GHNS FALSE) endif (NOT LIBATTICA_FOUND) if(NOT ${KDE_VERSION} VERSION_GREATER 4.6.4) set(NEPOMUK FALSE) endif(NOT ${KDE_VERSION} VERSION_GREATER 4.6.4) macro_ensure_out_of_source_build("Compiling Calligra inside the source directory is not possible. Please refer to the build instruction http://community.kde.org/Calligra/Building/Building_Calligra") ########################### ############################ ## Required dependencies ## ############################ ########################### find_package(Perl REQUIRED) find_package(ZLIB REQUIRED) find_package(PNG REQUIRED) if (APPLE) # this is not added correctly on OSX -- see http://forum.kde.org/viewtopic.php?f=139&t=101867&p=221242#p221242 include_directories(${PNG_INCLUDE_DIR}) endif(APPLE) find_package(Boost REQUIRED) # for pigment and stage if (NOT Boost_FOUND) MESSAGE(FATAL_ERROR "Did not find Boost. Boost is required for the core libraries, stage, sheets and krita.") endif (NOT Boost_FOUND) if (APPLE) find_package(Carbon REQUIRED) endif (APPLE) ########################### ############################ ## Optional dependencies ## ############################ ########################### ## ## Test for sqlite ## set(SQLITE_MIN_VERSION 3.6.16) set(SQLITE_RECOMMENDED_VERSION 3.7.14) set(SQLITE_LOAD_EXTENSION_REQUIRED ON) macro_optional_find_package(CalligraSqlite 3.6.16) macro_bool_to_01(SQLITE_FOUND HAVE_SQLITE) macro_log_feature(SQLITE_FOUND "SQLite" "Embedded SQL database engine with enabled extensions loading" "http://www.sqlite.org" FALSE "${SQLITE_MIN_VERSION}" "Required by Calligra's default database handler for Kexi and Words.") ## ## Test for ICU ## macro_optional_find_package(ICU) macro_bool_to_01(ICU_FOUND HAVE_ICU) macro_log_feature(ICU_FOUND "ICU" "International Components for Unicode (ICU) Library" "http://icu-project.org" FALSE "" "Required by Calligra's default database handler for Kexi and Words.") ## ## Check for OpenEXR ## macro_optional_find_package(OpenEXR) macro_bool_to_01(OPENEXR_FOUND HAVE_OPENEXR) ## ## Look for OpenGL ## set(HAVE_OPENGL 0) macro_optional_find_package(OpenGL) if(OPENGL_FOUND) message(STATUS "Found OpenGL: ${OPENGL_LIBRARIES}") if(QT_QTOPENGL_FOUND) message(STATUS "Found Qt OpenGL support") set(HAVE_OPENGL 1) else(QT_QTOPENGL_FOUND) message(STATUS "Did NOT find Qt OpenGL support. Check your Qt configuration") endif(QT_QTOPENGL_FOUND) else(OPENGL_FOUND) message(STATUS "Did NOT find OpenGL libraries") endif(OPENGL_FOUND) macro_log_feature(HAVE_OPENGL "OpenGL" "OpenGL support" "" FALSE "" "Required by parts of Krita and optionally by flake") ## ## Test for kdepimlibs ## macro_optional_find_package(KdepimLibs) macro_log_feature(KDEPIMLIBS_FOUND "KDE PIMLibs" "KDE Personal Information Management Libraries" "http://www.kde.org/" FALSE "" "Required by Plan and the KDE address book integration (available as a module in KDE)") ## ## Test for eigen2 ## macro_optional_find_package(Eigen2) macro_log_feature(EIGEN2_FOUND "Eigen" "C++ template library for linear algebra" "http://eigen.tuxfamily.org" FALSE "2.0" "Required by Calligra Sheets and Krita") ## ## Test for QCA2 ## macro_optional_find_package(QCA2) macro_log_feature(QCA2_FOUND "QCA" "Qt Cryptographic Architecture" "http://delta.affinix.com/qca" FALSE "2.0" "Required for encrypted OpenDocument files and encrypted xls files support (available as a module in kdesupport)") ## ## Test for exiv2 ## set(EXIV2_MIN_VERSION "0.16") macro_optional_find_package(Exiv2) macro_log_feature(EXIV2_FOUND "Exiv2" "Image metadata library and tools" "http://www.exiv2.org" FALSE "0.16" "Required by Krita") ## ## Test for soprano ## macro_optional_find_package(Soprano) macro_log_feature(Soprano_FOUND "Soprano" "KDE4 RDF handling library" "http://soprano.sourceforge.net/" FALSE "" "Required to handle RDF metadata in ODF") if(NOT Soprano_FOUND) set(SHOULD_BUILD_RDF FALSE) set(SOPRANO_INCLUDE_DIR "") else(NOT Soprano_FOUND) set(SHOULD_BUILD_RDF TRUE) endif(NOT Soprano_FOUND) if( Soprano_FOUND ) add_definitions( -DSHOULD_BUILD_RDF ) endif( Soprano_FOUND ) ## ## Test for marble ## macro_optional_find_package(Marble) macro_log_feature(MARBLE_FOUND "Marble" "KDE4 World Globe Widget library" "http://techbase.kde.org/Projects/Marble/" FALSE "" "Required by RDF, Kexi Forms and Reports to show locations on a map") if(NOT MARBLE_FOUND) set(CAN_USE_MARBLE FALSE) set(MARBLE_INCLUDE_DIR "") else(NOT MARBLE_FOUND) set(CAN_USE_MARBLE TRUE) endif(NOT MARBLE_FOUND) if( MARBLE_FOUND ) add_definitions( -DCAN_USE_MARBLE ) ## ## Marble changed addMarbleWidget to setMarbleWidget in MarbleControlBox.h ## with commit ea177ca. This is for compatibility with older versions. ## find_file(MARBLECONTROLBOX_H MarbleControlBox.h ${MARBLE_INCLUDE_DIR} PATH_SUFFIXES marble) if( MARBLECONTROLBOX_H ) file(READ ${MARBLECONTROLBOX_H} MARBLECONTROLBOX_H_CONTENT) string(REGEX MATCH "setMarbleWidget" SETMARBLEWIDGET ${MARBLECONTROLBOX_H_CONTENT}) if( SETMARBLEWIDGET ) add_definitions(-DHAVE_SETMARBLEWIDGET) endif( SETMARBLEWIDGET) else( MARBLECONTROLBOX_H ) message( WARNING "MarbleControlBox.h not found, could not properly set the SETMARBLEWIDGET define." ) endif( MARBLECONTROLBOX_H ) endif( MARBLE_FOUND ) ## ## Test for lcms ## macro_optional_find_package(LCMS2) macro_log_feature(LCMS2_FOUND "LittleCMS" "Color management engine" "http://www.littlecms.com" FALSE "2.4" "Will be used for color management and is necesary for Krita") if(LCMS2_FOUND) if(NOT ${LCMS2_VERSION} VERSION_LESS 2040 ) set(HAVE_LCMS24 TRUE) endif(NOT ${LCMS2_VERSION} VERSION_LESS 2040 ) set(HAVE_REQUIRED_LCMS_VERSION TRUE) set(HAVE_LCMS2 TRUE) endif(LCMS2_FOUND) ## ## Test for Vc ## set(OLD_CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ) set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules ) macro_optional_find_package(Vc) macro_log_feature(Vc_FOUND "Vc" "Portable, zero-overhead SIMD library for C++" "http://code.compeng.uni-frankfurt.de/projects/vc" FALSE "" "Required by the Krita for vectorization") macro_bool_to_01(Vc_FOUND HAVE_VC) macro_bool_to_01(PACKAGERS_BUILD DO_PACKAGERS_BUILD) configure_file(config-vc.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-vc.h ) if(HAVE_VC) message(STATUS "Vc found!") SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${Vc_CMAKE_MODULES_DIR}") include (VcMacros) # This is a copy-paste from VcMacros.cmake # we need a version *without* Scalar implementation macro(ko_compile_for_all_implementations_no_scalar_impl _objs _src) set(${_objs}) # remove all -march, -msse, etc. flags from the flags we want to pass string(REPLACE "${Vc_ARCHITECTURE_FLAGS}" "" _flags "${Vc_DEFINITIONS}") string(REPLACE "-DVC_IMPL=[^ ]*" "" _flags "${_flags}") # capture the -march= switch as -mtune; if there is none skip it if(Vc_ARCHITECTURE_FLAGS MATCHES "-march=") string(REGEX REPLACE "^.*-march=([^ ]*).*$" "-mtune=\\1" _tmp "${Vc_ARCHITECTURE_FLAGS}") set(_flags "${_flags} ${_tmp}") endif() # make a semicolon separated list of all flags string(TOUPPER "${CMAKE_BUILD_TYPE}" _tmp) set(_tmp "CMAKE_CXX_FLAGS_${_tmp}") string(REPLACE " " ";" _flags "${CMAKE_CXX_FLAGS} ${${_tmp}} ${_flags} ${ARGN}") get_directory_property(_inc INCLUDE_DIRECTORIES) foreach(_i ${_inc}) list(APPEND _flags "-I${_i}") endforeach() set(_vc_compile_src "${_src}") ##! commented out intentionally, the only difference with original # _vc_compile_one_implementation(${_objs} Scalar NO_FLAG) ##! if(NOT Vc_SSE_INTRINSICS_BROKEN) _vc_compile_one_implementation(${_objs} SSE2 "-msse2" "-xSSE2" "/arch:SSE2") _vc_compile_one_implementation(${_objs} SSE3 "-msse3" "-xSSE3" "/arch:SSE2") _vc_compile_one_implementation(${_objs} SSSE3 "-mssse3" "-xSSSE3" "/arch:SSE2") _vc_compile_one_implementation(${_objs} SSE4_1 "-msse4.1" "-xSSE4.1" "/arch:SSE2") _vc_compile_one_implementation(${_objs} SSE4_2 "-msse4.2" "-xSSE4.2" "/arch:SSE2") _vc_compile_one_implementation(${_objs} SSE4a "-msse4a" "-xSSSE3" "/arch:SSE2") endif() if(NOT Vc_AVX_INTRINSICS_BROKEN) _vc_compile_one_implementation(${_objs} AVX "-mavx" "-xAVX" "/arch:AVX") endif() endmacro() macro(ko_compile_for_all_implementations_no_scalar _objs _src _opts) if(PACKAGERS_BUILD) ko_compile_for_all_implementations_no_scalar_impl(${_objs} ${_src} ${_opts}) else(PACKAGERS_BUILD) set(${_objs} ${_src}) endif(PACKAGERS_BUILD) endmacro() macro(ko_compile_for_all_implementations _objs _src _opts) if(PACKAGERS_BUILD) vc_compile_for_all_implementations(${_objs} ${_src} ${_opts}) else(PACKAGERS_BUILD) set(${_objs} ${_src}) endif(PACKAGERS_BUILD) endmacro() if (NOT PACKAGERS_BUILD) # Optimize the whole Calligra for current architecture set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Vc_DEFINITIONS}") endif (NOT PACKAGERS_BUILD) endif(HAVE_VC) set(CMAKE_MODULE_PATH ${OLD_CMAKE_MODULE_PATH} ) ## ## Test for Nepomuk ## if(NEPOMUK) macro_optional_find_package(Nepomuk) if(NOT NEPOMUK_FOUND) set(NEPOMUK FALSE) endif(NOT NEPOMUK_FOUND) add_definitions(-DDISABLE_NEPOMUK_LEGACY) macro_log_feature(NEPOMUK_FOUND "Nepomuk" "Handles metadata of resources" FALSE "Required to handle metadata of resources") endif(NEPOMUK) ## ## Test for KActivities ## macro_optional_find_package(KActivities 6.1.0) macro_log_feature(KActivities_FOUND "KActivities" "Activities interface library" "https://projects.kde.org/projects/kde/kdelibs/kactivities" FALSE "" "Required for Activities integration.") if(KActivities_FOUND) set(HAVE_KACTIVITIES TRUE) endif(KActivities_FOUND) #Set the build of TextShape changetraker add_definitions(${QT_DEFINITIONS} ${KDE4_DEFINITIONS} ${QT_QTDBUS_DEFINITIONS}) if(WIN32) # detect oxygen icon dir at configure time based on KDEDIRS - there may be different package installation locations execute_process(COMMAND "${KDE4_KDECONFIG_EXECUTABLE}" --path icon OUTPUT_VARIABLE _dir ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) file(TO_CMAKE_PATH "${_dir}" __dir) find_path(KDE4_ICON_DIR oxygen PATHS ${__dir} ) message(STATUS "using oxygen application icons from ${KDE4_ICON_DIR}") set(LIB_INSTALL_DIR ${LIB_INSTALL_DIR} RUNTIME DESTINATION ${BIN_INSTALL_DIR} LIBRARY ${INSTALL_TARGETS_DEFAULT_ARGS} ARCHIVE ${INSTALL_TARGETS_DEFAULT_ARGS} ) else(WIN32) set (KDE4_ICON_DIR ${CMAKE_INSTALL_PREFIX}/share/icons) endif(WIN32) ## ## Test for Fontconfig ## ## Only test if on non-Windows system if(!WIN32) macro_optional_find_package(Fontconfig) macro_log_feature(FONTCONFIG_FOUND "Fontconfig" "Library for configuring and customizing font access" "http://fontconfig.org" FALSE "" "Required to handle exact font size") endif(!WIN32) ## ## Test for Freetype ## ## Only test if on non-Windows system if(!WIN32) macro_optional_find_package(Freetype) macro_log_feature(FREETYPE_FOUND "Freetype" "A Free, High-Quality, and Portable Font Engine" "http://www.freetype.org/" FALSE "" "Required to handle exact font size") endif(!WIN32) if(NOT FONTCONFIG_FOUND OR NOT FREETYPE_FOUND) set(FONTCONFIG_INCLUDE_DIR "") set(FREETYPE_INCLUDE_DIRS "") else(NOT FONTCONFIG_FOUND OR NOT FREETYPE_FOUND) add_definitions( -DSHOULD_BUILD_FONT_CONVERSION ) endif(NOT FONTCONFIG_FOUND OR NOT FREETYPE_FOUND) ## ## Test for Qt Webkit ## macro_log_feature(QT_QTWEBKIT_FOUND "Qt Webkit" "Qt binding for Webkit, the HTML engine." "http://qt.nokia.com" FALSE "" "Required for the web shape, web Kexi widget and web report element") if(QT_QTWEBKIT_FOUND) add_definitions( -DCAN_USE_QTWEBKIT ) endif(QT_QTWEBKIT_FOUND) ## ## QImageBlitz (for Kexi) ## #macro_optional_find_package(QImageBlitz) #macro_log_feature(QIMAGEBLITZ_FOUND "QImageBlitz" "Fast, smooth scaling of QImages" "sourceforge.net/projects/qimageblitz/" FALSE "" "Required for Kexi") ## ## Test for KDeclarative ## macro_optional_find_package(KDeclarative) if(NOT KDECLARATIVE_FOUND) set(SHOULD_BUILD_ACTIVE FALSE) endif(NOT KDECLARATIVE_FOUND) ## ## Test endianess ## include (TestBigEndian) TEST_BIG_ENDIAN(CMAKE_WORDS_BIGENDIAN) ## ## Test SharedMimeInfo ## macro_optional_find_package(SharedMimeInfo) macro_log_feature(SHARED_MIME_INFO_FOUND "SharedMimeInfo" "Shared Mime Info" "http://freedesktop.org/wiki/Software/shared-mime-info" FALSE "" "Required to determine file types OpenRaster (Krita default format), SVM or all of MSOOXML.") ## ## Generate a file for prefix information ## ############################# ############################## ## Add the benchmark target ## ############################## ############################# include(MacroCalligraAddBenchmark) #################### ##################### ## Define includes ## ##################### #################### # WARNING: make sure that QT_INCLUDES is the first directory to be added to include_directory before # any other include directory # for config.h and includes (if any?) include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}/interfaces ) # koplugin is at the bottom of the stack set(KOPLUGIN_INCLUDES ${CMAKE_SOURCE_DIR}/libs/koplugin) # koodf is at the bottom of the stack set(KOODF_INCLUDES ${CMAKE_SOURCE_DIR}/libs/odf ${CMAKE_BINARY_DIR}/libs/odf ${KDE4_INCLUDES}) set(KUNDO2_INCLUDES ${CMAKE_SOURCE_DIR}/libs/kundo2) # pigment depends on koplugin and lcms set(PIGMENT_INCLUDES ${KOPLUGIN_INCLUDES} ${CMAKE_SOURCE_DIR}/libs/pigment ${CMAKE_SOURCE_DIR}/libs/pigment/compositeops ${CMAKE_SOURCE_DIR}/libs/pigment/resources ${QT_INCLUDES} ${KDE4_INCLUDES}) # flake depends on koodf and pigment set(FLAKE_INCLUDES ${CMAKE_SOURCE_DIR}/libs/flake ${KOODF_INCLUDES} ${KOPLUGIN_INCLUDES} ${PIGMENT_INCLUDES} ${KUNDO2_INCLUDES} ${CMAKE_SOURCE_DIR}/libs/flake/commands ${CMAKE_SOURCE_DIR}/libs/flake/tools ${CMAKE_SOURCE_DIR}/libs/flake/svg ${CMAKE_BINARY_DIR}/libs/flake) # vectorimage set(VECTORIMAGE_INCLUDES ${CMAKE_SOURCE_DIR}/libs/vectorimage ${CMAKE_SOURCE_DIR}/libs/vectorimage/libemf ${CMAKE_SOURCE_DIR}/libs/vectorimage/libsvm ${CMAKE_SOURCE_DIR}/libs/vectorimage/libwmf) # KoText depends on koplugin, odf set(KOTEXT_INCLUDES ${CMAKE_SOURCE_DIR}/libs/kotext ${CMAKE_BINARY_DIR}/libs/kotext ${CMAKE_SOURCE_DIR}/libs/kotext/changetracker ${CMAKE_SOURCE_DIR}/libs/kotext/styles ${CMAKE_SOURCE_DIR}/libs/kotext/opendocument ${SOPRANO_INCLUDE_DIR} ${FLAKE_INCLUDES} ${KOODF_INCLUDES} ${CMAKE_SOURCE_DIR}/libs/main) # TextLayout depends on kotext set(TEXTLAYOUT_INCLUDES ${KOTEXT_INCLUDES} ${CMAKE_SOURCE_DIR}/libs/textlayout) +# BasicFlakes depends on flake, widgets +set(BASICFLAKES_INCLUDES ${KOWIDGETS_INCLUDES} ${FLAKE_INCLUDES} + ${CMAKE_SOURCE_DIR}/libs/basicflakes + ${CMAKE_SOURCE_DIR}/libs/basicflakes/tools) + # komain depends on kotext & flake set(KOMAIN_INCLUDES ${KDE4_INCLUDES} ${TEXTLAYOUT_INCLUDES} ${MARBLE_INCLUDE_DIR} ${CMAKE_SOURCE_DIR}/libs/widgets ${CMAKE_SOURCE_DIR}/libs/main ${CMAKE_SOURCE_DIR}/libs/main/rdf ${CMAKE_SOURCE_DIR}/libs/main/config) if(SHOULD_BUILD_SCRIPTING) set(KOKROSS_INCLUDES ${CMAKE_SOURCE_DIR}/libs/kokross ${CMAKE_BINARY_DIR}/libs/kokross) endif(SHOULD_BUILD_SCRIPTING) # kopageapp set(KOPAGEAPP_INCLUDES ${TEXTLAYOUT_INCLUDES} ${PIGMENT_INCLUDES} ${KOMAIN_INCLUDES} ${CMAKE_SOURCE_DIR}/libs/widgets ${CMAKE_SOURCE_DIR}/libs/kopageapp ${CMAKE_SOURCE_DIR}/libs/kopageapp/commands ${CMAKE_BINARY_DIR}/libs/kopageapp ) # koproperty set(KOPROPERTY_INCLUDES ${KOODF_INCLUDES} ${CMAKE_SOURCE_DIR}/libs ${CMAKE_SOURCE_DIR}/libs/widgets) set(KOPROPERTY_LIBS koproperty) # calligradb # TODO: remove when Predicate lib arrives if (NOT TINY AND NOT CREATIVEONLY AND HAVE_ICU AND HAVE_SQLITE) # These are hard deps for calligradb set(SHOULD_BUILD_CALLIGRADB TRUE) set(CALLIGRADB_LIBS calligradb) # TODO remove when Predicate lib arrives set(CALLIGRADB_INCLUDES ${CMAKE_SOURCE_DIR}/libs # TODO remove when Predicate lib arrives ${CMAKE_BINARY_DIR}/libs/db) else (NOT TINY AND NOT CREATIVEONLY AND HAVE_ICU AND HAVE_SQLITE) set(SHOULD_BUILD_CALLIGRADB FALSE) set(SHOULD_BUILD_KEXI FALSE) endif (NOT TINY AND NOT CREATIVEONLY AND HAVE_ICU AND HAVE_SQLITE) ################################ # 3rdparty # FIXME: Add KDGANTT_INCLUDES set(KDCHART_INCLUDES ${CMAKE_SOURCE_DIR}/3rdparty/kdchart/include) ############################################# ############################################## ## Detect which applications can be compile ## ############################################## ############################################# # # WARNING: when adding a dependency if there is already a line # containing SHOULD_BUILD_app, don't add a new one, just add # the test to the if construct # ### Calligra Sheets: eigen2, boost if(NOT EIGEN2_FOUND) set(SHOULD_BUILD_SHEETS FALSE) endif(NOT EIGEN2_FOUND) ### Krita: pigment, eigen2, exiv2, sharedmimeinfo if(NOT EIGEN2_FOUND OR NOT EXIV2_FOUND OR NOT HAVE_REQUIRED_LCMS_VERSION OR NOT SHARED_MIME_INFO_FOUND) set(SHOULD_BUILD_KRITA FALSE) endif(NOT EIGEN2_FOUND OR NOT EXIV2_FOUND OR NOT HAVE_REQUIRED_LCMS_VERSION OR NOT SHARED_MIME_INFO_FOUND) ### Active needs sheets, stage and words if (NOT SHOULD_BUILD_SHEETS OR NOT SHOULD_BUILD_STAGE OR NOT SHOULD_BUILD_WORDS) set(SHOULD_BUILD_ACTIVE FALSE) endif (NOT SHOULD_BUILD_SHEETS OR NOT SHOULD_BUILD_STAGE OR NOT SHOULD_BUILD_WORDS) ### Active: only build with Qt 4.7.0 or better if (NOT ${QTVERSION} VERSION_GREATER 4.7.0) set(SHOULD_BUILD_ACTIVE FALSE) endif (NOT ${QTVERSION} VERSION_GREATER 4.7.0) if (NOT QT_QTDECLARATIVE_FOUND) set(SHOULD_BUILD_ACTIVE FALSE) endif (NOT QT_QTDECLARATIVE_FOUND) if(${KDE_VERSION} VERSION_LESS 4.8.0) set(SHOULD_BUILD_ACTIVE FALSE) endif(${KDE_VERSION} VERSION_LESS 4.8.0) #if(NOT QIMAGEBLITZ_FOUND) # set (SHOULD_BUILD_KEXI FALSE) #endif(NOT QIMAGEBLITZ_FOUND) if (NOT QT3SUPPORT) set (SHOULD_BUILD_KEXI FALSE) endif (NOT QT3SUPPORT) ### HACK ### # Those BUILD_ are illegally used below before they are defined, which cause problem on a first build option(BUILD_kexi "Build directory kexi" ON) option(BUILD_koreport "Build directory libs/koreport" ON) ### HACK ### if(BUILD_kexi AND SHOULD_BUILD_KEXI) ### endif(BUILD_kexi AND SHOULD_BUILD_KEXI) ################### #################### ## Subdirectories ## #################### ################### if(SHOULD_BUILD_WORDS) macro_optional_add_subdirectory(words) endif(SHOULD_BUILD_WORDS) if (SHOULD_BUILD_FLOW) macro_optional_add_subdirectory(flow) endif (SHOULD_BUILD_FLOW) if(SHOULD_BUILD_STAGE) macro_optional_add_subdirectory(stage) endif(SHOULD_BUILD_STAGE) if(SHOULD_BUILD_KEXI) macro_optional_add_subdirectory(kexi) endif(SHOULD_BUILD_KEXI) if(SHOULD_BUILD_PLAN) macro_optional_add_subdirectory(plan) endif(SHOULD_BUILD_PLAN) if(SHOULD_BUILD_SHEETS) macro_optional_add_subdirectory(sheets) endif(SHOULD_BUILD_SHEETS) if(SHOULD_BUILD_KRITA) macro_optional_add_subdirectory(krita) endif(SHOULD_BUILD_KRITA) if(SHOULD_BUILD_KARBON) macro_optional_add_subdirectory(karbon) endif(SHOULD_BUILD_KARBON) if(SHOULD_BUILD_BRAINDUMP) macro_optional_add_subdirectory(braindump) endif(SHOULD_BUILD_BRAINDUMP) if(SHOULD_BUILD_ACTIVE) macro_optional_add_subdirectory(active) endif(SHOULD_BUILD_ACTIVE) if( NOT SHOULD_BUILD_SHEETS OR NOT BUILD_sheets OR NOT SHOULD_BUILD_WORDS OR NOT BUILD_words OR NOT SHOULD_BUILD_STAGE OR NOT BUILD_stage ) set(SHOULD_BUILD_KOABSTRACTION FALSE) endif( NOT SHOULD_BUILD_SHEETS OR NOT BUILD_sheets OR NOT SHOULD_BUILD_WORDS OR NOT BUILD_words OR NOT SHOULD_BUILD_STAGE OR NOT BUILD_stage ) if(SHOULD_BUILD_SHEETS AND SHOULD_BUILD_WORDS) # build cstester else(SHOULD_BUILD_SHEETS AND SHOULD_BUILD_WORDS) set(SHOULD_BUILD_CSTESTER FALSE) endif(SHOULD_BUILD_SHEETS AND SHOULD_BUILD_WORDS) macro_optional_add_subdirectory(doc) # non-app directories are moved here because they can depend on SHOULD_BUILD_{appname} variables set above add_subdirectory(libs) add_subdirectory(3rdparty) add_subdirectory(interfaces) add_subdirectory(cmake) add_subdirectory(pics) add_subdirectory(plugins) add_subdirectory(servicetypes) add_subdirectory(templates) add_subdirectory(tools) add_subdirectory(filters) macro_display_feature_log() macro(macro_display_application_enabled _appName _shouldBuild) if( BUILD_${_appName} AND ${_shouldBuild} MATCHES "[Tt][Rr][Uu][Ee]" ) message(STATUS ${_appName} ) endif( BUILD_${_appName} AND ${_shouldBuild} MATCHES "[Tt][Rr][Uu][Ee]" ) endmacro(macro_display_application_enabled) message(STATUS "---------------- The following applications will be built ----------------" ) macro_display_application_enabled(words ${SHOULD_BUILD_WORDS}) macro_display_application_enabled(sheets ${SHOULD_BUILD_SHEETS}) macro_display_application_enabled(stage ${SHOULD_BUILD_STAGE}) macro_display_application_enabled(flow ${SHOULD_BUILD_FLOW}) macro_display_application_enabled(kexi ${SHOULD_BUILD_KEXI}) macro_display_application_enabled(plan ${SHOULD_BUILD_PLAN}) macro_display_application_enabled(krita ${SHOULD_BUILD_KRITA}) macro_display_application_enabled(karbon ${SHOULD_BUILD_KARBON}) macro_display_application_enabled(braindump ${SHOULD_BUILD_BRAINDUMP}) macro_display_application_enabled(calligra ${SHOULD_BUILD_CALLIGRA}) macro_display_application_enabled(cstester ${SHOULD_BUILD_CSTESTER}) macro_display_application_enabled(active ${SHOULD_BUILD_ACTIVE}) message(STATUS "--------------------------------------------------------------------------" ) add_custom_target(apidox doc/api/gendocs.pl WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) configure_file(KoConfig.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/KoConfig.h ) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/KoConfig.h DESTINATION ${INCLUDE_INSTALL_DIR} COMPONENT Devel) diff --git a/krita/CMakeLists.txt b/krita/CMakeLists.txt index 65f16534a30..0ef8c3e6c8a 100644 --- a/krita/CMakeLists.txt +++ b/krita/CMakeLists.txt @@ -1,151 +1,152 @@ project(krita) # # The reason for this mode is that the Debug mode disable inlining # if(CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS_KRITADEVS "-O3 -g" CACHE STRING "" FORCE) endif(CMAKE_COMPILER_IS_GNUCXX) if(MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj") endif(MSVC) include(CheckFunctionExists) macro_optional_find_package(GLEW) macro_bool_to_01(GLEW_FOUND HAVE_GLEW) configure_file(config-glew.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-glew.h ) macro_log_feature(HAVE_GLEW "GLEW" "The OpenGL Extension Wrangler Library" "http://glew.sourceforge.net" FALSE "" "Required by the Krita shader filter plugin") if(HAVE_GLEW) message(STATUS "GLEW found!") else(HAVE_GLEW) message(STATUS "GLEW NOT found - krita will not be able to use OpenGL shaders") endif(HAVE_GLEW) if(HAVE_OPENGL) message(STATUS "OpenGL found -- krita will be able to use OpenGL for hardware accelerated rendering.") else(HAVE_OPENGL) message(STATUS "OpenGL NOT found - krita will not be able to use OpenGL for hardware accelerated rendering.") endif(HAVE_OPENGL) macro_optional_find_package(OCIO) macro_log_feature(OCIO_FOUND "OCIO" "The OpenColorIO Library" "http://www.opencolorio.org" FALSE "" "Required by the Krita LUT docker") macro_bool_to_01(OCIO_FOUND HAVE_OCIO) configure_file(config-ocio.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-ocio.h ) if(UNIX) set(CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES};m") endif(UNIX) check_function_exists(powf HAVE_POWF) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config-powf.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-powf.h) set(LINK_OPENEXR_LIB) if(OPENEXR_FOUND) include_directories(${OPENEXR_INCLUDE_DIR}) set(LINK_OPENEXR_LIB ${OPENEXR_LIBRARIES}) add_definitions(${OPENEXR_DEFINITIONS}) endif(OPENEXR_FOUND) if(WIN32) if(MSVC) # C4522: 'class' : multiple assignment operators specified set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd4522") endif(MSVC) endif(WIN32) set(KRITA_INCLUDES # For config-*.h ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}/krita/image ${CMAKE_SOURCE_DIR}/krita/image/brushengine ${CMAKE_SOURCE_DIR}/krita/image/tiles ${CMAKE_SOURCE_DIR}/krita/ui ${CMAKE_SOURCE_DIR}/krita/ui/canvas ${CMAKE_SOURCE_DIR}/krita/ui/tool ${CMAKE_SOURCE_DIR}/krita/ui/flake ${CMAKE_SOURCE_DIR}/krita/ui/widgets # For generated files from .ui ${CMAKE_BINARY_DIR}/krita/ui ${PIGMENT_INCLUDES} ${KOTEXT_INCLUDES} ${KOMAIN_INCLUDES} + ${BASICFLAKES_INCLUDES} ${CMAKE_SOURCE_DIR}/libs/widgets/resources ${CMAKE_SOURCE_DIR}/libs/widgetutils ${EIGEN2_INCLUDE_DIR} # 'Export' this for use by filters CACHE INTERNAL "" ) include_directories(${KRITA_INCLUDES}) if(HAVE_OPENGL) include_directories(${OPENGL_INCLUDE_DIR}) if(HAVE_GLEW) include_directories(${GLEW_INCLUDE_DIR}) endif(HAVE_GLEW) endif(HAVE_OPENGL) add_subdirectory( image ) add_subdirectory( ui ) add_subdirectory( dtd ) add_subdirectory( plugins ) add_subdirectory( data ) add_subdirectory( pics ) add_subdirectory( benchmarks ) set(kritapart_PART_SRCS krita_part_init.cc) kde4_add_plugin(kritapart ${kritapart_PART_SRCS}) target_link_libraries(kritapart kritaui) install(TARGETS kritapart DESTINATION ${PLUGIN_INSTALL_DIR}) set(krita_KDEINIT_SRCS main.cc) kde4_add_app_icon(krita_KDEINIT_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/pics/hi*-app-krita.png") kde4_add_kdeinit_executable(krita ${krita_KDEINIT_SRCS}) if (Q_WS_MAC) set_target_properties(krita PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.template) set_target_properties(krita PROPERTIES MACOSX_BUNDLE_GUI_IDENTIFIER "org.calligra.krita") set_target_properties(krita PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Krita 2") endif (Q_WS_MAC) target_link_libraries(kdeinit_krita kritaui) target_link_libraries(krita ${QT_QTCORE_LIBRARY} kdeinit_krita) if(CMAKE_SIZEOF_VOID_P EQUAL 8) find_package(OpenCTL) find_package(OpenShiva) find_package(QtShiva ) if(NOT ${OPENCTL_VERSION} VERSION_GREATER 0.9.15.1 ) # Workaround for the following issues: # http://bugs.kde.org/274675 http://bugs.kde.org/248051 # http://redmine.opengtl.org/issues/72 message(status "Found OpenGTL < 0.9.15.1, on a 64 bits system, krita will be forced linked to the libraries to make sure opengtl symbols are available") if(HAVE_OPENSHIVA AND HAVE_QTSHIVA) target_link_libraries(krita ${OPENSHIVA_LDFLAGS}) endif() if(OPENCTL_FOUND AND OPENEXR_FOUND) target_link_libraries(krita ${OPENCTL_LDFLAGS}) endif() endif() endif() install(TARGETS krita ${INSTALL_TARGETS_DEFAULT_ARGS}) install(TARGETS kdeinit_krita ${INSTALL_TARGETS_DEFAULT_ARGS}) install( PROGRAMS krita.desktop DESTINATION ${XDG_APPS_INSTALL_DIR}) install( FILES kritapart.desktop DESTINATION ${SERVICES_INSTALL_DIR}) install( FILES krita.rc DESTINATION ${DATA_INSTALL_DIR}/krita) diff --git a/krita/plugins/tools/defaulttools/CMakeLists.txt b/krita/plugins/tools/defaulttools/CMakeLists.txt index 6a38fc0a858..24ec5191d54 100644 --- a/krita/plugins/tools/defaulttools/CMakeLists.txt +++ b/krita/plugins/tools/defaulttools/CMakeLists.txt @@ -1,61 +1,61 @@ if (NOT WIN32) add_subdirectory(tests) endif (NOT WIN32) set(kritadefaulttools_PART_SRCS default_tools.cc kis_tool_colorpicker.cc kis_tool_brush.cc kis_tool_line.cc kis_tool_fill.cc kis_tool_rectangle.cc kis_tool_ellipse.cc kis_tool_gradient.cc kis_tool_measure.cc kis_tool_path.cc kis_tool_move.cc strokes/move_stroke_strategy.cpp strokes/move_selection_stroke_strategy.cpp kis_tool_multihand.cpp ) kde4_add_ui_files(kritadefaulttools_PART_SRCS wdgcolorpicker.ui wdgmovetool.ui) kde4_add_plugin(kritadefaulttools ${kritadefaulttools_PART_SRCS}) -target_link_libraries(kritadefaulttools kritaui) +target_link_libraries(kritadefaulttools kritaui basicflakes) if (HAVE_OPENGL) target_link_libraries(kritadefaulttools ${QT_QTOPENGL_LIBRARY} ${OPENGL_LIBRARIES} ) endif (HAVE_OPENGL) if (HAVE_GLEW) target_link_libraries(kritadefaulttools ${GLEW_LIBRARIES} ) endif (HAVE_GLEW) install(TARGETS kritadefaulttools DESTINATION ${PLUGIN_INSTALL_DIR}) ########### install files ############### install( FILES krita_tool_color_fill.png krita_tool_color_picker.png krita_tool_move.png krita_tool_gradient.png krita_tool_line.png krita_tool_rectangle.png krita_tool_ellipse.png krita_tool_freehand.png krita_tool_multihand.png krita_tool_measure.png krita_draw_path.png # cursors tool_rectangle_cursor.png tool_ellipse_cursor.png tool_line_cursor.png tool_freehand_cursor.png tool_fill_cursor.png tool_gradient_cursor.png DESTINATION ${DATA_INSTALL_DIR}/krita/pics) install( FILES kritadefaulttools.desktop DESTINATION ${SERVICES_INSTALL_DIR}) diff --git a/krita/plugins/tools/selectiontools/CMakeLists.txt b/krita/plugins/tools/selectiontools/CMakeLists.txt index e77765a1e44..b2561d43749 100644 --- a/krita/plugins/tools/selectiontools/CMakeLists.txt +++ b/krita/plugins/tools/selectiontools/CMakeLists.txt @@ -1,55 +1,55 @@ set(kritaselectiontools_PART_SRCS selection_tools.cc kis_tool_select_rectangular.cc kis_tool_select_polygonal.cc kis_tool_select_elliptical.cc kis_tool_select_contiguous.cc kis_tool_select_outline.cc kis_tool_select_path.cc kis_tool_select_similar.cc kis_tool_select_brush.cc # kis_tool_select_magnetic.cc # kis_tool_select_magnetic_option_widget.cpp ) #kde4_add_ui_files(kritaselectiontools_PART_SRCS # kis_tool_select_magnetic_option_widget.ui #) kde4_add_plugin(kritaselectiontools ${kritaselectiontools_PART_SRCS}) -target_link_libraries(kritaselectiontools kritaui) +target_link_libraries(kritaselectiontools kritaui basicflakes) install(TARGETS kritaselectiontools DESTINATION ${PLUGIN_INSTALL_DIR}) ########### install files ############### install( FILES tool_path_selection.png tool_rect_selection.png tool_eraser_selection.png tool_brush_selection.png tool_contiguous_selection.png tool_elliptical_selection.png tool_outline_selection.png tool_polygonal_selection.png tool_rectangular_selection_cursor.png tool_eraser_selection_cursor.png tool_brush_selection_cursor.png tool_contiguous_selection_cursor.png tool_elliptical_selection_cursor.png tool_outline_selection_cursor.png tool_polygonal_selection_cursor.png tool_similar_selection.png tool_similar_selection_cursor.png tool_magneticoutline_selection.png tool_magneticoutline_selection_cursor.png DESTINATION ${DATA_INSTALL_DIR}/krita/pics) install( FILES kritaselectiontools.desktop DESTINATION ${SERVICES_INSTALL_DIR}) diff --git a/libs/CMakeLists.txt b/libs/CMakeLists.txt index 110c3ebe148..2a880c9d209 100644 --- a/libs/CMakeLists.txt +++ b/libs/CMakeLists.txt @@ -1,32 +1,33 @@ add_subdirectory( koplugin ) add_subdirectory( widgetutils ) add_subdirectory( widgets ) add_subdirectory( odf ) add_subdirectory( textlayout ) add_subdirectory( kotext ) add_subdirectory( flake ) +add_subdirectory( basicflakes ) add_subdirectory( pigment ) add_subdirectory( main ) add_subdirectory( kundo2 ) add_subdirectory( vectorimage ) if (SHOULD_BUILD_SCRIPTING AND NOT CREATIVEONLY) add_subdirectory( kokross ) endif (SHOULD_BUILD_SCRIPTING AND NOT CREATIVEONLY) if (NOT CREATIVEONLY) add_subdirectory( kopageapp ) endif (NOT CREATIVEONLY) if(NOT TINY OR NOT CREATIVEONLY) add_subdirectory( koproperty ) # TODO move to independent place like kdesupport endif(NOT TINY OR NOT CREATIVEONLY) if (SHOULD_BUILD_CALLIGRADB) add_subdirectory( db ) # used by Kexi and Word's Biblio; TODO: remove when Predicate lib arrives endif (SHOULD_BUILD_CALLIGRADB) # only build koreport if possible if (SHOULD_BUILD_KOREPORT) add_subdirectory( koreport ) endif (SHOULD_BUILD_KOREPORT) diff --git a/libs/basicflakes/CMakeLists.txt b/libs/basicflakes/CMakeLists.txt new file mode 100644 index 00000000000..48dcdee1e1c --- /dev/null +++ b/libs/basicflakes/CMakeLists.txt @@ -0,0 +1,28 @@ +add_subdirectory(plugin) + +include_directories(${KOTEXT_INCLUDES} ${KOODF_INCLUDES} ${PIGMENT_INCLUDES} ${KOWIDGETS_INCLUDES}) + +set(basicflakes_LIB_SRCS + tools/KoCreatePathTool.cpp +) + +kde4_add_ui_files( basicflakes_LIB_SRCS +) + + +kde4_add_library(basicflakes SHARED ${basicflakes_LIB_SRCS}) + +target_link_libraries(basicflakes kowidgets flake pigmentcms) + +set_target_properties(basicflakes PROPERTIES + VERSION ${GENERIC_CALLIGRA_LIB_VERSION} SOVERSION ${GENERIC_CALLIGRA_LIB_SOVERSION} +) + +install(TARGETS basicflakes ${INSTALL_TARGETS_DEFAULT_ARGS}) + +install( FILES + tools/KoCreatePathTool.h + + DESTINATION + ${INCLUDE_INSTALL_DIR} +COMPONENT Devel) diff --git a/libs/basicflakes/plugin/CMakeLists.txt b/libs/basicflakes/plugin/CMakeLists.txt new file mode 100644 index 00000000000..e58bb53ce54 --- /dev/null +++ b/libs/basicflakes/plugin/CMakeLists.txt @@ -0,0 +1,26 @@ +project( basicflakesplugin ) + +include_directories( ${FLAKE_INCLUDES} ${QT_INCLUDES} ${KOMAIN_INCLUDES} ${BASICFLAKES_INCLUDES}) + +#add_subdirectory(pics) + + +########### Basicflakes plugin library ############### + +SET ( basicflakesplugin_SRCS + Plugin.cpp + KoCreatePathToolFactory.cpp +) + +kde4_add_ui_files(basicflakesplugin_SRCS +) + +kde4_add_plugin(basicflakesplugin ${basicflakesplugin_SRCS}) +target_link_libraries(basicflakesplugin flake kowidgets basicflakes) +install(TARGETS basicflakesplugin DESTINATION ${PLUGIN_INSTALL_DIR}) + +########### install files ############### + +install( FILES basicflakesplugin.desktop DESTINATION ${SERVICES_INSTALL_DIR}) + +#kde4_install_icons( ${DATA_INSTALL_DIR}/calligra/icons ) diff --git a/libs/flake/tools/KoCreatePathToolFactory.cpp b/libs/basicflakes/plugin/KoCreatePathToolFactory.cpp similarity index 100% rename from libs/flake/tools/KoCreatePathToolFactory.cpp rename to libs/basicflakes/plugin/KoCreatePathToolFactory.cpp diff --git a/libs/flake/tools/KoCreatePathToolFactory.h b/libs/basicflakes/plugin/KoCreatePathToolFactory.h similarity index 100% copy from libs/flake/tools/KoCreatePathToolFactory.h copy to libs/basicflakes/plugin/KoCreatePathToolFactory.h diff --git a/libs/flake/tools/KoCreatePathToolFactory.h b/libs/basicflakes/plugin/Plugin.cpp similarity index 60% copy from libs/flake/tools/KoCreatePathToolFactory.h copy to libs/basicflakes/plugin/Plugin.cpp index 1db235e1c46..54672a924e9 100644 --- a/libs/flake/tools/KoCreatePathToolFactory.h +++ b/libs/basicflakes/plugin/Plugin.cpp @@ -1,37 +1,37 @@ /* This file is part of the KDE project - * - * Copyright (C) 2006 Thorsten Zachmann + * Copyright (C) 2007 Thomas Zander + * Copyright (C) 2012 C. Boemann * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ +#include "Plugin.h" + +#include +#include +#include -#ifndef KOCREATEPATHTOOLFACTORY_H -#define KOCREATEPATHTOOLFACTORY_H +#include -#include "KoToolFactoryBase.h" +K_PLUGIN_FACTORY(PluginFactory, registerPlugin();) +K_EXPORT_PLUGIN(PluginFactory("calligra-basicflakes")) -/// The factory for the KoCreatePathTool -class KoCreatePathToolFactory : public KoToolFactoryBase +Plugin::Plugin(QObject * parent, const QVariantList &) + : QObject(parent) { -public: - /// Constructor - KoCreatePathToolFactory(); - /// Destructor - ~KoCreatePathToolFactory(); + KoToolRegistry::instance()->add(new KoCreatePathToolFactory()); +} - KoToolBase* createTool(KoCanvasBase *canvas); -}; -#endif +#include diff --git a/libs/flake/tools/KoCreatePathToolFactory.h b/libs/basicflakes/plugin/Plugin.h similarity index 66% rename from libs/flake/tools/KoCreatePathToolFactory.h rename to libs/basicflakes/plugin/Plugin.h index 1db235e1c46..3e058f2a9b2 100644 --- a/libs/flake/tools/KoCreatePathToolFactory.h +++ b/libs/basicflakes/plugin/Plugin.h @@ -1,37 +1,32 @@ /* This file is part of the KDE project - * - * Copyright (C) 2006 Thorsten Zachmann + * Copyright (C) 2007 Thomas Zander * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ +#ifndef PLUGIN_H +#define PLUGIN_H -#ifndef KOCREATEPATHTOOLFACTORY_H -#define KOCREATEPATHTOOLFACTORY_H +#include +#include -#include "KoToolFactoryBase.h" +class Plugin : public QObject { + Q_OBJECT -/// The factory for the KoCreatePathTool -class KoCreatePathToolFactory : public KoToolFactoryBase -{ public: - /// Constructor - KoCreatePathToolFactory(); - /// Destructor - ~KoCreatePathToolFactory(); - - KoToolBase* createTool(KoCanvasBase *canvas); + Plugin(QObject * parent, const QVariantList &); + ~Plugin() {} }; #endif diff --git a/libs/basicflakes/plugin/basicflakesplugin.desktop b/libs/basicflakes/plugin/basicflakesplugin.desktop new file mode 100644 index 00000000000..8b0f232e976 --- /dev/null +++ b/libs/basicflakes/plugin/basicflakesplugin.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Name=Basic Flakes +X-KDE-ServiceTypes=Calligra/Tool +Type=Service +X-KDE-Library=basicflakesplugin +X-Flake-MinVersion=4 +X-Flake-PluginVersion=4 diff --git a/libs/flake/tools/KoCreatePathTool.cpp b/libs/basicflakes/tools/KoCreatePathTool.cpp similarity index 98% rename from libs/flake/tools/KoCreatePathTool.cpp rename to libs/basicflakes/tools/KoCreatePathTool.cpp index 8dfbe3488c6..043ec2e7002 100644 --- a/libs/flake/tools/KoCreatePathTool.cpp +++ b/libs/basicflakes/tools/KoCreatePathTool.cpp @@ -1,396 +1,394 @@ /* This file is part of the KDE project * * Copyright (C) 2006 Thorsten Zachmann * Copyright (C) 2008-2010 Jan Hambrecht * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include "KoCreatePathTool.h" #include "KoShapeController.h" #include "KoPointerEvent.h" #include "KoPathShape.h" #include "KoShapeStroke.h" #include "KoSelection.h" #include "commands/KoPathPointMergeCommand.h" -#include "SnapGuideConfigWidget.h" #include "KoCanvasResourceManager.h" #include "KoDocumentResourceManager.h" #include "KoShapePaintingContext.h" #include +#include #include #include +#include #include "KoCreatePathTool_p.h" KoCreatePathTool::KoCreatePathTool(KoCanvasBase *canvas) : KoToolBase(*(new KoCreatePathToolPrivate(this, canvas))) { } KoCreatePathTool::~KoCreatePathTool() { } void KoCreatePathTool::paint(QPainter &painter, const KoViewConverter &converter) { Q_D(KoCreatePathTool); if (d->shape) { painter.save(); paintPath(*(d->shape), painter, converter); painter.restore(); painter.save(); painter.setTransform(d->shape->absoluteTransformation(&converter) * painter.transform()); KoShape::applyConversion(painter, converter); painter.setPen(Qt::blue); painter.setBrush(Qt::white); //TODO make configurable const bool firstPoint = (d->firstPoint == d->activePoint); if (d->pointIsDragged || firstPoint) { const bool onlyPaintActivePoints = false; KoPathPoint::PointTypes paintFlags = KoPathPoint::ControlPoint2; if (d->activePoint->activeControlPoint1()) paintFlags |= KoPathPoint::ControlPoint1; d->activePoint->paint(painter, d->handleRadius, paintFlags, onlyPaintActivePoints); } // paint the first point // check if we have to color the first point if (d->mouseOverFirstPoint) painter.setBrush(Qt::red); // //TODO make configurable else painter.setBrush(Qt::white); //TODO make configurable d->firstPoint->paint(painter, d->handleRadius, KoPathPoint::Node); painter.restore(); } if (d->hoveredPoint) { painter.save(); painter.setTransform(d->hoveredPoint->parent()->absoluteTransformation(&converter), true); KoShape::applyConversion(painter, converter); painter.setPen(Qt::blue); painter.setBrush(Qt::white); //TODO make configurable d->hoveredPoint->paint(painter, d->handleRadius, KoPathPoint::Node); painter.restore(); } painter.save(); KoShape::applyConversion(painter, converter); canvas()->snapGuide()->paint(painter, converter); painter.restore(); } void KoCreatePathTool::paintPath(KoPathShape& pathShape, QPainter &painter, const KoViewConverter &converter) { Q_D(KoCreatePathTool); painter.setTransform(pathShape.absoluteTransformation(&converter) * painter.transform()); painter.save(); KoShapePaintingContext paintContext; //FIXME pathShape.paint(painter, converter, paintContext); painter.restore(); if (pathShape.stroke()) { painter.save(); pathShape.stroke()->paint(d->shape, painter, converter); painter.restore(); } } void KoCreatePathTool::mousePressEvent(KoPointerEvent *event) { Q_D(KoCreatePathTool); if (event->button() == Qt::RightButton || (event->button() == Qt::LeftButton && event->modifiers() & Qt::ShiftModifier)) { if (d->shape) { // repaint the shape before removing the last point canvas()->updateCanvas(d->shape->boundingRect()); delete d->shape->removePoint(d->shape->pathPointIndex(d->activePoint)); d->addPathShape(); } // Return as otherwise a point would be added return; } if (d->shape) { // the path shape gets closed by clicking on the first point if (handleGrabRect(d->firstPoint->point()).contains(event->point)) { d->activePoint->setPoint(d->firstPoint->point()); d->shape->closeMerge(); // we are closing the path, so reset the existing start path point d->existingStartPoint = 0; // finish path d->addPathShape(); } else { canvas()->updateCanvas(canvas()->snapGuide()->boundingRect()); QPointF point = canvas()->snapGuide()->snap(event->point, event->modifiers()); // check whether we hit an start/end node of an existing path d->existingEndPoint = d->endPointAtPosition(point); if (d->existingEndPoint.isValid() && d->existingEndPoint != d->existingStartPoint) { point = d->existingEndPoint.path->shapeToDocument(d->existingEndPoint.point->point()); d->activePoint->setPoint(point); // finish path d->addPathShape(); } else { d->activePoint->setPoint(point); canvas()->updateCanvas(d->shape->boundingRect()); canvas()->updateCanvas(canvas()->snapGuide()->boundingRect()); } } } else { KoPathShape *pathShape = new KoPathShape(); d->shape=pathShape; pathShape->setShapeId(KoPathShapeId); KoShapeStroke *stroke = new KoShapeStroke(canvas()->resourceManager()->activeStroke()); stroke->setColor(canvas()->resourceManager()->foregroundColor().toQColor()); pathShape->setStroke(stroke); canvas()->updateCanvas(canvas()->snapGuide()->boundingRect()); QPointF point = canvas()->snapGuide()->snap(event->point, event->modifiers()); // check whether we hit an start/end node of an existing path d->existingStartPoint = d->endPointAtPosition(point); if (d->existingStartPoint.isValid()) { point = d->existingStartPoint.path->shapeToDocument(d->existingStartPoint.point->point()); } d->activePoint = pathShape->moveTo(point); d->firstPoint = d->activePoint; canvas()->updateCanvas(handlePaintRect(point)); canvas()->updateCanvas(canvas()->snapGuide()->boundingRect()); canvas()->snapGuide()->setEditedShape(pathShape); d->angleSnapStrategy = new AngleSnapStrategy(d->angleSnappingDelta); canvas()->snapGuide()->addCustomSnapStrategy(d->angleSnapStrategy); } if (d->angleSnapStrategy) d->angleSnapStrategy->setStartPoint(d->activePoint->point()); } void KoCreatePathTool::mouseDoubleClickEvent(KoPointerEvent *event) { Q_D(KoCreatePathTool); //remove handle canvas()->updateCanvas(handlePaintRect(event->point)); if (d->shape) { // the first click of the double click created a new point which has the be removed again d->shape->removePoint(d->shape->pathPointIndex(d->activePoint)); d->addPathShape(); } } void KoCreatePathTool::mouseMoveEvent(KoPointerEvent *event) { Q_D(KoCreatePathTool); KoPathPoint *endPoint = d->endPointAtPosition(event->point); if (d->hoveredPoint != endPoint) { if (d->hoveredPoint) { QPointF nodePos = d->hoveredPoint->parent()->shapeToDocument(d->hoveredPoint->point()); canvas()->updateCanvas(handlePaintRect(nodePos)); } d->hoveredPoint = endPoint; if (d->hoveredPoint) { QPointF nodePos = d->hoveredPoint->parent()->shapeToDocument(d->hoveredPoint->point()); canvas()->updateCanvas(handlePaintRect(nodePos)); } } if (! d->shape) { canvas()->updateCanvas(canvas()->snapGuide()->boundingRect()); canvas()->snapGuide()->snap(event->point, event->modifiers()); canvas()->updateCanvas(canvas()->snapGuide()->boundingRect()); d->mouseOverFirstPoint = false; return; } d->mouseOverFirstPoint = handleGrabRect(d->firstPoint->point()).contains(event->point); canvas()->updateCanvas(d->shape->boundingRect()); canvas()->updateCanvas(canvas()->snapGuide()->boundingRect()); QPointF snappedPosition = canvas()->snapGuide()->snap(event->point, event->modifiers()); d->repaintActivePoint(); if (event->buttons() & Qt::LeftButton) { d->pointIsDragged = true; QPointF offset = snappedPosition - d->activePoint->point(); d->activePoint->setControlPoint2(d->activePoint->point() + offset); // pressing stops controls points moving symmetrically if ((event->modifiers() & Qt::AltModifier) == 0) d->activePoint->setControlPoint1(d->activePoint->point() - offset); d->repaintActivePoint(); } else { d->activePoint->setPoint(snappedPosition); } canvas()->updateCanvas(d->shape->boundingRect()); canvas()->updateCanvas(canvas()->snapGuide()->boundingRect()); } void KoCreatePathTool::mouseReleaseEvent(KoPointerEvent *event) { Q_D(KoCreatePathTool); if (! d->shape || (event->buttons() & Qt::RightButton)) return; d->repaintActivePoint(); d->pointIsDragged = false; KoPathPoint *lastActivePoint = d->activePoint; d->activePoint = d->shape->lineTo(event->point); // apply symmetric point property if applicable if (lastActivePoint->activeControlPoint1() && lastActivePoint->activeControlPoint2()) { QPointF diff1 = lastActivePoint->point() - lastActivePoint->controlPoint1(); QPointF diff2 = lastActivePoint->controlPoint2() - lastActivePoint->point(); if (qFuzzyCompare(diff1.x(), diff2.x()) && qFuzzyCompare(diff1.y(), diff2.y())) lastActivePoint->setProperty(KoPathPoint::IsSymmetric); } canvas()->snapGuide()->setIgnoredPathPoints((QList()<activePoint)); if (d->angleSnapStrategy && lastActivePoint->activeControlPoint2()) { d->angleSnapStrategy->deactivate(); } } void KoCreatePathTool::keyPressEvent(QKeyEvent *event) { if (event->key() == Qt::Key_Escape) emit done(); else event->ignore(); } void KoCreatePathTool::activate(ToolActivation, const QSet &) { Q_D(KoCreatePathTool); useCursor(Qt::ArrowCursor); // retrieve the actual global handle radius d->handleRadius = handleRadius(); // reset snap guide canvas()->updateCanvas(canvas()->snapGuide()->boundingRect()); canvas()->snapGuide()->reset(); } void KoCreatePathTool::deactivate() { Q_D(KoCreatePathTool); if (d->shape) { canvas()->updateCanvas(handlePaintRect(d->firstPoint->point())); canvas()->updateCanvas(d->shape->boundingRect()); d->firstPoint = 0; d->activePoint = 0; } d->cleanUp(); } void KoCreatePathTool::documentResourceChanged(int key, const QVariant & res) { Q_D(KoCreatePathTool); switch (key) { case KoDocumentResourceManager::HandleRadius: { d->handleRadius = res.toUInt(); } break; default: return; } } void KoCreatePathTool::addPathShape(KoPathShape *pathShape) { Q_D(KoCreatePathTool); KoPathShape *startShape = 0; KoPathShape *endShape = 0; pathShape->normalize(); // check if existing start/end points are still valid d->existingStartPoint.validate(canvas()); d->existingEndPoint.validate(canvas()); if (d->connectPaths(pathShape, d->existingStartPoint, d->existingEndPoint)) { if (d->existingStartPoint.isValid()) startShape = d->existingStartPoint.path; if (d->existingEndPoint.isValid() && d->existingEndPoint != d->existingStartPoint) endShape = d->existingEndPoint.path; } KUndo2Command *cmd = canvas()->shapeController()->addShape(pathShape); if (cmd) { KoSelection *selection = canvas()->shapeManager()->selection(); selection->deselectAll(); selection->select(pathShape); if (startShape) canvas()->shapeController()->removeShape(startShape, cmd); if (endShape && startShape != endShape) canvas()->shapeController()->removeShape(endShape, cmd); canvas()->addCommand(cmd); } else { canvas()->updateCanvas(pathShape->boundingRect()); delete pathShape; } } QList KoCreatePathTool::createOptionWidgets() { Q_D(KoCreatePathTool); QList list; - SnapGuideConfigWidget *widget = new SnapGuideConfigWidget(canvas()->snapGuide()); - widget->setWindowTitle(i18n("Snapping")); - list.append(widget); QWidget *angleWidget = new QWidget(); angleWidget->setObjectName("Angle Constraints"); QGridLayout *layout = new QGridLayout(angleWidget); layout->addWidget(new QLabel(i18n("Angle snapping delta:"), angleWidget), 0, 0); KIntNumInput *angleEdit = new KIntNumInput(d->angleSnappingDelta, angleWidget); angleEdit->setRange(1, 360, 1); angleEdit->setSuffix(QChar(Qt::Key_degree)); layout->addWidget(angleEdit, 0, 1); QWidget *specialSpacer =new QWidget(); specialSpacer->setObjectName("SpecialSpacer"); layout->addWidget(specialSpacer, 1, 1); angleWidget->setWindowTitle(i18n("Angle Constraints")); list.append(angleWidget); connect(angleEdit, SIGNAL(valueChanged(int)), this, SLOT(angleDeltaChanged(int))); return list; } #include diff --git a/libs/flake/tools/KoCreatePathTool.h b/libs/basicflakes/tools/KoCreatePathTool.h similarity index 100% rename from libs/flake/tools/KoCreatePathTool.h rename to libs/basicflakes/tools/KoCreatePathTool.h diff --git a/libs/flake/tools/KoCreatePathTool_p.h b/libs/basicflakes/tools/KoCreatePathTool_p.h similarity index 100% rename from libs/flake/tools/KoCreatePathTool_p.h rename to libs/basicflakes/tools/KoCreatePathTool_p.h diff --git a/libs/flake/CMakeLists.txt b/libs/flake/CMakeLists.txt index 62bc2dcd8be..11de8f424ed 100644 --- a/libs/flake/CMakeLists.txt +++ b/libs/flake/CMakeLists.txt @@ -1,349 +1,347 @@ project(flake) include_directories(${FLAKE_INCLUDES} ${QT_INCLUDES}) if(KDE4_BUILD_TESTS) # only with this definition will the FLAKE_TEST_EXPORT macro do something add_definitions(-DCOMPILING_TESTS) endif(KDE4_BUILD_TESTS) add_subdirectory(styles) add_subdirectory(tests) add_subdirectory(pics) set(flake_SRCS KoFlake.cpp KoCanvasBase.cpp KoResourceManager_p.cpp KoCanvasResourceManager.cpp KoDocumentResourceManager.cpp KoCanvasObserverBase.cpp KoCanvasSupervisor.cpp KoCutController.cpp KoCopyController.cpp KoDockFactoryBase.cpp KoDockRegistry.cpp KoDataCenterBase.cpp KoInsets.cpp KoPasteController.cpp KoGuidesData.cpp KoPathShape.cpp KoPathPoint.cpp KoPathSegment.cpp KoSelection.cpp KoShape.cpp KoShapeBasedDocumentBase.cpp KoShapeApplicationData.cpp KoShapeContainer.cpp KoShapeContainerModel.cpp KoShapeContainerDefaultModel.cpp KoShapeGroup.cpp KoShapeManagerPaintingStrategy.cpp KoShapeManager.cpp KoShapePaintingContext.cpp KoShapePainter.cpp KoFrameShape.cpp KoUnavailShape.cpp KoMarkerData.cpp KoMarker.cpp KoMarkerCollection.cpp KoMarkerSharedLoadingData.cpp #KoUnavailData.cpp #KoUnavailCollection.cpp KoToolBase.cpp KoCanvasController.cpp KoCanvasControllerWidget.cpp KoCanvasControllerWidgetViewport_p.cpp KoShapeRegistry.cpp KoDeferredShapeFactoryBase.cpp KoToolFactoryBase.cpp KoPathShapeFactory.cpp KoShapeFactoryBase.cpp KoShapeUserData.cpp KoParameterShape.cpp KoPointerEvent.cpp KoShapeController.cpp KoToolSelection.cpp KoShapeLayer.cpp KoPostscriptPaintDevice.cpp KoInputDevice.cpp KoToolManager_p.cpp KoToolManager.cpp KoToolRegistry.cpp KoToolProxy.cpp KoShapeSavingContext.cpp KoShapeLoadingContext.cpp KoLoadingShapeUpdater.cpp KoPathShapeLoader.cpp ShapeDeleter_p.cpp KoShapeStrokeModel.cpp KoShapeStroke.cpp KoShapeBackground.cpp KoColorBackground.cpp KoGradientBackground.cpp KoOdfGradientBackground.cpp KoHatchBackground.cpp KoPatternBackground.cpp KoShapeConfigWidgetBase.cpp KoShapeConfigFactoryBase.cpp KoDrag.cpp KoDragOdfSaveHelper.cpp KoShapeOdfSaveHelper.cpp KoShapePaste.cpp KoConnectionPoint.cpp KoConnectionShape.cpp KoConnectionShapeLoadingUpdater.cpp KoConnectionShapeFactory.cpp KoConnectionShapeConfigWidget.cpp KoSnapGuide.cpp KoSnapProxy.cpp KoSnapStrategy.cpp KoSnapData.cpp SnapGuideConfigWidget.cpp KoShapeShadow.cpp KoSharedSavingData.cpp KoViewConverter.cpp KoInputDeviceHandler.cpp KoInputDeviceHandlerEvent.cpp KoInputDeviceHandlerRegistry.cpp KoEventAction.cpp KoEventActionFactoryBase.cpp KoEventActionRegistry.cpp KoImageData.cpp KoImageData_p.cpp KoImageCollection.cpp KoOdfWorkaround.cpp KoFilterEffect.cpp KoFilterEffectStack.cpp KoFilterEffectFactoryBase.cpp KoFilterEffectRegistry.cpp KoFilterEffectConfigWidgetBase.cpp KoFilterEffectRenderContext.cpp KoFilterEffectLoadingContext.cpp KoTextShapeDataBase.cpp KoTosContainer.cpp KoTosContainerModel.cpp KoClipPath.cpp commands/KoShapeGroupCommand.cpp commands/KoShapeAlignCommand.cpp commands/KoShapeBackgroundCommand.cpp commands/KoShapeCreateCommand.cpp commands/KoShapeDeleteCommand.cpp commands/KoShapeDistributeCommand.cpp commands/KoShapeLockCommand.cpp commands/KoShapeMoveCommand.cpp commands/KoShapeShearCommand.cpp commands/KoShapeSizeCommand.cpp commands/KoShapeStrokeCommand.cpp commands/KoShapeUngroupCommand.cpp commands/KoShapeReorderCommand.cpp commands/KoShapeKeepAspectRatioCommand.cpp commands/KoPathBaseCommand.cpp commands/KoPathPointMoveCommand.cpp commands/KoPathControlPointMoveCommand.cpp commands/KoPathPointTypeCommand.cpp commands/KoPathPointRemoveCommand.cpp commands/KoPathPointInsertCommand.cpp commands/KoPathSegmentBreakCommand.cpp commands/KoPathBreakAtPointCommand.cpp commands/KoPathSegmentTypeCommand.cpp commands/KoPathCombineCommand.cpp commands/KoSubpathRemoveCommand.cpp commands/KoSubpathJoinCommand.cpp commands/KoParameterHandleMoveCommand.cpp commands/KoParameterToPathCommand.cpp commands/KoShapeTransformCommand.cpp commands/KoPathFillRuleCommand.cpp commands/KoConnectionShapeTypeCommand.cpp commands/KoShapeShadowCommand.cpp commands/KoPathReverseCommand.cpp commands/KoEventActionAddCommand.cpp commands/KoEventActionRemoveCommand.cpp commands/KoShapeRenameCommand.cpp commands/KoShapeRunAroundCommand.cpp commands/KoPathPointMergeCommand.cpp commands/KoShapeTransparencyCommand.cpp commands/KoShapeClipCommand.cpp commands/KoShapeUnclipCommand.cpp commands/KoPathShapeMarkerCommand.cpp commands/KoShapeConnectionChangeCommand.cpp - tools/KoCreatePathTool.cpp - tools/KoCreatePathToolFactory.cpp tools/KoCreateShapeStrategy.cpp tools/KoPathToolFactory.cpp tools/KoPathTool.cpp tools/KoPathToolSelection.cpp tools/KoPathToolHandle.cpp tools/PathToolOptionWidget.cpp tools/KoPathPointRubberSelectStrategy.cpp tools/KoPathPointMoveStrategy.cpp tools/KoPathConnectionPointStrategy.cpp tools/KoPathControlPointMoveStrategy.cpp tools/KoParameterChangeStrategy.cpp tools/KoZoomTool.cpp tools/KoZoomToolFactory.cpp tools/KoZoomToolWidget.cpp tools/KoZoomStrategy.cpp tools/KoPanTool.cpp tools/KoPanToolFactory.cpp tools/KoInteractionTool.cpp tools/KoInteractionStrategy.cpp tools/KoCreateShapesTool.cpp tools/KoCreateShapesToolFactory.cpp tools/KoShapeRubberSelectStrategy.cpp tools/KoPathSegmentChangeStrategy.cpp svg/SvgUtil.cpp svg/SvgGraphicContext.cpp svg/SvgSavingContext.cpp svg/SvgWriter.cpp svg/SvgStyleWriter.cpp svg/SvgShape.cpp svg/SvgParser.cpp svg/SvgStyleParser.cpp svg/SvgGradientHelper.cpp svg/SvgPatternHelper.cpp svg/SvgFilterHelper.cpp svg/SvgCssHelper.cpp svg/SvgClipPathHelper.cpp svg/SvgLoadingContext.cpp svg/SvgShapeFactory.cpp ) kde4_add_ui_files(flake_SRCS tools/PathToolOptionWidgetBase.ui KoConnectionShapeConfigWidget.ui SnapGuideConfigWidget.ui tools/KoZoomToolWidget.ui ) kde4_add_library(flake SHARED ${flake_SRCS}) target_link_libraries(flake ${KDE4_KDEUI_LIBS} pigmentcms koodf) target_link_libraries(flake LINK_INTERFACE_LIBRARIES pigmentcms koodf) target_link_libraries(flake kundo2) target_link_libraries(flake LINK_INTERFACE_LIBRARIES kundo2) if(HAVE_OPENGL) target_link_libraries(flake ${OPENGL_LIBRARIES} ${QT_QTOPENGL_LIBRARY}) endif(HAVE_OPENGL) set_target_properties(flake PROPERTIES VERSION ${GENERIC_CALLIGRA_LIB_VERSION} SOVERSION ${GENERIC_CALLIGRA_LIB_SOVERSION} ) ########### install files ############### install(TARGETS flake ${INSTALL_TARGETS_DEFAULT_ARGS}) install( FILES flake.desktop flaketool.desktop flakeshape.desktop flakedevice.desktop presentationeventaction.desktop scripteventaction.desktop filtereffect.desktop DESTINATION ${SERVICETYPES_INSTALL_DIR}) install( FILES flake_export.h KoCanvasBase.h KoCanvasController.h KoCanvasControllerWidget.h KoCanvasObserverBase.h KoCanvasSupervisor.h KoCanvasResourceManager.h KoDocumentResourceManager.h KoConnectionPoint.h KoCopyController.h KoCutController.h KoDataCenterBase.h KoDockFactoryBase.h KoDockRegistry.h KoDeferredShapeFactoryBase.h KoDrag.h KoDragOdfSaveHelper.h KoFlake.h KoFrameShape.h KoGuidesData.h KoImageCollection.h KoImageData.h KoInputDevice.h KoInsets.h KoPathSegment.h KoPointerEvent.h KoRTree.h KoSelection.h KoShape.h KoShapeStrokeModel.h KoToolSelection.h KoShapeContainer.h KoShapeContainerModel.h KoShapeContainerDefaultModel.h KoShapeController.h KoShapeBasedDocumentBase.h KoShapeFactoryBase.h KoShapeGroup.h KoShapeLayer.h KoShapePainter.h KoShapeLoadingContext.h KoShapeOdfSaveHelper.h KoLoadingShapeUpdater.h KoShapeConfigWidgetBase.h KoShapeManager.h KoShapeManagerPaintingStrategy.h KoShapeRegistry.h KoShapeSavingContext.h KoShapeUserData.h KoShapeApplicationData.h KoSharedSavingData.h KoTextShapeDataBase.h KoToolBase.h KoToolManager.h KoToolFactoryBase.h KoToolProxy.h KoToolRegistry.h KoFilterEffect.h KoFilterEffectStack.h KoFilterEffectFactoryBase.h KoFilterEffectRegistry.h KoFilterEffectConfigWidgetBase.h KoFilterEffectRenderContext.h KoFilterEffectLoadingContext.h commands/KoEventActionAddCommand.h commands/KoEventActionRemoveCommand.h commands/KoParameterToPathCommand.h commands/KoPathCombineCommand.h commands/KoPathControlPointMoveCommand.h commands/KoPathFillRuleCommand.h commands/KoPathPointInsertCommand.h commands/KoPathPointMergeCommand.h commands/KoPathPointMoveCommand.h commands/KoPathPointRemoveCommand.h commands/KoPathPointTypeCommand.h commands/KoPathReverseCommand.h commands/KoPathSegmentTypeCommand.h commands/KoShapeAlignCommand.h commands/KoShapeBackgroundCommand.h commands/KoShapeStrokeCommand.h commands/KoShapeCreateCommand.h commands/KoShapeDeleteCommand.h commands/KoShapeDistributeCommand.h commands/KoShapeGroupCommand.h commands/KoShapeMoveCommand.h commands/KoShapeRenameCommand.h commands/KoShapeReorderCommand.h commands/KoShapeShadowCommand.h commands/KoShapeShearCommand.h commands/KoShapeSizeCommand.h commands/KoShapeTransformCommand.h commands/KoShapeUngroupCommand.h commands/KoSubpathRemoveCommand.h commands/KoPathShapeMarkerCommand.h tools/KoInteractionTool.h tools/KoPanTool.h KoViewConverter.h DESTINATION ${INCLUDE_INSTALL_DIR} COMPONENT Devel ) diff --git a/libs/flake/KoToolRegistry.cpp b/libs/flake/KoToolRegistry.cpp index 0ceb40e931b..0e5ab80bc38 100644 --- a/libs/flake/KoToolRegistry.cpp +++ b/libs/flake/KoToolRegistry.cpp @@ -1,90 +1,88 @@ /* This file is part of the KDE project * Copyright (C) 2006-2007 Thomas Zander * Copyright (c) 2004 Boudewijn Rempt * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include "KoToolRegistry.h" #include #include #include -#include "tools/KoCreatePathToolFactory.h" #include "tools/KoCreateShapesToolFactory.h" #include "tools/KoCreateShapesTool.h" #include "tools/KoPathToolFactory.h" #include "tools/KoZoomTool.h" #include "tools/KoZoomToolFactory.h" #include "tools/KoPanTool.h" #include "tools/KoPanToolFactory.h" #include "KoToolManager.h" #include KoToolRegistry::KoToolRegistry() { } void KoToolRegistry::init() { KoPluginLoader::PluginsConfig config; config.whiteList = "FlakePlugins"; config.blacklist = "FlakePluginsDisabled"; config.group = "calligra"; KoPluginLoader::instance()->load(QString::fromLatin1("Calligra/Flake"), QString::fromLatin1("[X-Flake-MinVersion] <= 4"), config); config.whiteList = "ToolPlugins"; config.blacklist = "ToolPluginsDisabled"; KoPluginLoader::instance()->load(QString::fromLatin1("Calligra/Tool"), QString::fromLatin1("[X-Flake-MinVersion] <= 4"), config); // register generic tools - add(new KoCreatePathToolFactory()); add(new KoCreateShapesToolFactory()); add(new KoPathToolFactory()); add(new KoZoomToolFactory()); add(new KoPanToolFactory()); KConfigGroup cfg = KGlobal::config()->group("calligra"); QStringList toolsBlacklist = cfg.readEntry("ToolsBlacklist", QStringList()); foreach (const QString& toolID, toolsBlacklist) { remove(toolID); } } KoToolRegistry::~KoToolRegistry() { qDeleteAll(doubleEntries()); qDeleteAll(values()); } KoToolRegistry* KoToolRegistry::instance() { K_GLOBAL_STATIC(KoToolRegistry, s_instance) if (!s_instance.exists()) { s_instance->init(); } return s_instance; } void KoToolRegistry::addDeferred(KoToolFactoryBase *toolFactory) { add(toolFactory); KoToolManager::instance()->addDeferredToolFactory(toolFactory); }