# KI18N Translation Domain for this library
add_definitions(-DTRANSLATION_DOMAIN=\"kwin_effects\" -DEFFECT_BUILTINS)

include_directories(${KWIN_SOURCE_DIR}) # for xcbutils.h

set(kwin_effect_OWN_LIBS
    kwineffects
)

if (KWIN_HAVE_XRENDER_COMPOSITING)
    set(kwin_effect_OWN_LIBS ${kwin_effect_OWN_LIBS} kwinxrenderutils)
endif()

set(kwin_effect_KDE_LIBS
    KF5::ConfigGui
    KF5::ConfigWidgets
    KF5::GlobalAccel
    KF5::I18n
    KF5::IconThemes
    KF5::Notifications # screenshot effect
    KF5::Plasma # screenedge effect
    KF5::WindowSystem
)

set(kwin_effect_QT_LIBS
    Qt5::Concurrent
    Qt5::DBus
    Qt5::Quick
    Qt5::X11Extras
)

set(kwin_effect_XLIB_LIBS
    ${X11_X11_LIB}
)

set(kwin_effect_XCB_LIBS
    XCB::IMAGE
    XCB::XCB
    XCB::XFIXES
)

if (KWIN_HAVE_XRENDER_COMPOSITING)
    set(kwin_effect_XCB_LIBS ${kwin_effect_XCB_LIBS} XCB::RENDER)
endif()

set(kwin_effect_OWN_LIBS ${kwin_effect_OWN_LIBS} kwinglutils)

macro(KWIN4_ADD_EFFECT_BACKEND name)
    add_library(${name} SHARED ${ARGN})
    target_link_libraries(${name} PRIVATE
        ${kwin_effect_KDE_LIBS}
        ${kwin_effect_OWN_LIBS}
        ${kwin_effect_QT_LIBS}
        ${kwin_effect_XCB_LIBS}
        ${kwin_effect_XLIB_LIBS}
    )
endmacro()

# Adds effect plugin with given name. Sources are given after the name
macro(KWIN4_ADD_EFFECT name)
    kwin4_add_effect_backend(kwin4_effect_${name} ${ARGN})

    set_target_properties(kwin4_effect_${name} PROPERTIES VERSION 1.0.0 SOVERSION 1)
    set_target_properties(kwin4_effect_${name} PROPERTIES OUTPUT_NAME ${KWIN_NAME}4_effect_${name})
    install(TARGETS kwin4_effect_${name} ${INSTALL_TARGETS_DEFAULT_ARGS})
endmacro()

# Install the KWin/Effect service type
install(FILES kwineffect.desktop DESTINATION ${SERVICETYPES_INSTALL_DIR})

# Create initial variables
set(kwin4_effect_include_directories)

set(kwin4_effect_builtins_sources
    blur/blur.cpp
    blur/blurshader.cpp
    colorpicker/colorpicker.cpp
    coverswitch/coverswitch.cpp
    cube/cube.cpp
    cube/cube_proxy.cpp
    cubeslide/cubeslide.cpp
    desktopgrid/desktopgrid.cpp
    diminactive/diminactive.cpp
    effect_builtins.cpp
    flipswitch/flipswitch.cpp
    glide/glide.cpp
    invert/invert.cpp
    logging.cpp
    lookingglass/lookingglass.cpp
    magiclamp/magiclamp.cpp
    magnifier/magnifier.cpp
    mouseclick/mouseclick.cpp
    mousemark/mousemark.cpp
    presentwindows/presentwindows.cpp
    presentwindows/presentwindows_proxy.cpp
    resize/resize.cpp
    showfps/showfps.cpp
    showpaint/showpaint.cpp
    slide/slide.cpp
    thumbnailaside/thumbnailaside.cpp
    touchpoints/touchpoints.cpp
    trackmouse/trackmouse.cpp
    windowgeometry/windowgeometry.cpp
    wobblywindows/wobblywindows.cpp
    zoom/zoom.cpp
)

qt5_add_resources(kwin4_effect_builtins_sources shaders.qrc)

kconfig_add_kcfg_files(kwin4_effect_builtins_sources
    blur/blurconfig.kcfgc
    coverswitch/coverswitchconfig.kcfgc
    cube/cubeconfig.kcfgc
    cubeslide/cubeslideconfig.kcfgc
    desktopgrid/desktopgridconfig.kcfgc
    diminactive/diminactiveconfig.kcfgc
    fallapart/fallapartconfig.kcfgc
    flipswitch/flipswitchconfig.kcfgc
    glide/glideconfig.kcfgc
    lookingglass/lookingglassconfig.kcfgc
    magiclamp/magiclampconfig.kcfgc
    magnifier/magnifierconfig.kcfgc
    mouseclick/mouseclickconfig.kcfgc
    mousemark/mousemarkconfig.kcfgc
    presentwindows/presentwindowsconfig.kcfgc
    resize/resizeconfig.kcfgc
    showfps/showfpsconfig.kcfgc
    slide/slideconfig.kcfgc
    slidingpopups/slidingpopupsconfig.kcfgc
    thumbnailaside/thumbnailasideconfig.kcfgc
    trackmouse/trackmouseconfig.kcfgc
    windowgeometry/windowgeometryconfig.kcfgc
    wobblywindows/wobblywindowsconfig.kcfgc
    zoom/zoomconfig.kcfgc
)

# scripted effects
function(install_scripted_effect name)
    kpackage_install_package(${name}/package kwin4_effect_${name} effects kwin)

    # necessary so tests are found without installing
    file(COPY ${name}/package/contents ${name}/package/metadata.desktop DESTINATION ${CMAKE_BINARY_DIR}/bin/kwin/effects/kwin4_effect_${name})
endfunction()
install_scripted_effect(dialogparent)
install_scripted_effect(dimscreen)
install_scripted_effect(eyeonscreen)
install_scripted_effect(fade)
install_scripted_effect(fadedesktop)
install_scripted_effect(fadingpopups)
install_scripted_effect(frozenapp)
install_scripted_effect(login)
install_scripted_effect(logout)
install_scripted_effect(maximize)
install_scripted_effect(morphingpopups)
install_scripted_effect(scale)
install_scripted_effect(squash)
install_scripted_effect(translucency)
install_scripted_effect(windowaperture)
install_scripted_effect(sessionquit)

###############################################################################
# Built-in effects go here

# Common effects
add_subdirectory(desktopgrid)
add_subdirectory(diminactive)
include(fallapart/CMakeLists.txt)
include(highlightwindow/CMakeLists.txt)
include(kscreen/CMakeLists.txt)
add_subdirectory(magiclamp)
add_subdirectory(presentwindows)
add_subdirectory(resize)
include(screenedge/CMakeLists.txt)
add_subdirectory(showfps)
add_subdirectory(showpaint)
add_subdirectory(slide)
include(slideback/CMakeLists.txt)
include(slidingpopups/CMakeLists.txt)
add_subdirectory(thumbnailaside)
add_subdirectory(windowgeometry)
add_subdirectory(zoom)

# OpenGL-specific effects
add_subdirectory(blur)
include(backgroundcontrast/CMakeLists.txt)
add_subdirectory(coverswitch)
add_subdirectory(cube)
add_subdirectory(cubeslide)
add_subdirectory(flipswitch)
add_subdirectory(glide)
add_subdirectory(invert)
add_subdirectory(lookingglass)
add_subdirectory(magnifier)
add_subdirectory(mouseclick)
add_subdirectory(mousemark)
include(screenshot/CMakeLists.txt)
include(sheet/CMakeLists.txt)
include(snaphelper/CMakeLists.txt)
include(startupfeedback/CMakeLists.txt)
add_subdirectory(trackmouse)
add_subdirectory(wobblywindows)

###############################################################################

# Add the builtins plugin
kwin4_add_effect(builtins ${kwin4_effect_builtins_sources})
