|
Krita Source Code Documentation
|
#include <KisMultiSurfaceStateManager.h>
Classes | |
| struct | State |
Public Member Functions | |
| State | createInitializingConfig (bool isCanvasOpenGL, int screenId, KisProofingConfigurationSP proofingConfig) const |
| KisMultiSurfaceStateManager () | |
| State | onCanvasSurfaceFormatChanged (const State &oldState, const KisDisplayConfig &canvasConfig) const |
| State | onConfigChanged (const State &oldState, int screenId, KisConfig::CanvasSurfaceMode surfaceMode, const KisDisplayConfig::Options &options) const |
| State | onGuiSurfaceFormatChanged (const State &oldState, const KoColorProfile *uiProfile) const |
| State | onProofingChanged (const State &oldState, KisProofingConfigurationSP proofingConfig) const |
| State | onScreenChanged (const State &oldState, int screenId) const |
| ~KisMultiSurfaceStateManager () | |
Private Member Functions | |
| KisDisplayConfig::Options | overriddenWithProofingConfig (const KisDisplayConfig::Options &options, KisProofingConfigurationSP proofingConfig) const |
On some systems the canvas may have a surface format different from the rest of the GUI. This class help to manage the state of both the surfaces, GUI and canvas ones in an atomic way using value-based semantics.
Every incoming event accept the current state and transitions it forward into a new state that is returned from the function. The calling code should only check for the changes and apply the said changes to the actual consumers: KisDisplayColorConverter, KisOpenGLCanvas2 and KisCanvasSurfaceColorSpaceManager.
Handling the state in a value-based atomic way allows us to avoid weird flow of updates between different consumers. Such flows are almost impossible to manage externally because we have three different canvas managemend modes:
1) Legacy HDR mode (the one used on Windows), where the whole main window's surface is switched into the HDR space and compositing happens indide Qt
2) Wayland-style HDR mode, where the canvas has its own surface, which color space is managed by OS
3) Unmanaged mode, where we assume OS just passes color data directly to the GPU, so we perform all the color management ourselves.
Definition at line 51 of file KisMultiSurfaceStateManager.h.
| KisMultiSurfaceStateManager::KisMultiSurfaceStateManager | ( | ) |
Definition at line 17 of file KisMultiSurfaceStateManager.cpp.
| KisMultiSurfaceStateManager::~KisMultiSurfaceStateManager | ( | ) |
Definition at line 21 of file KisMultiSurfaceStateManager.cpp.
| KisMultiSurfaceStateManager::State KisMultiSurfaceStateManager::createInitializingConfig | ( | bool | isCanvasOpenGL, |
| int | screenId, | ||
| KisProofingConfigurationSP | proofingConfig ) const |
Definition at line 32 of file KisMultiSurfaceStateManager.cpp.
References KisMultiSurfaceDisplayConfig::canvasProfile, KisConfig::canvasSurfaceColorSpaceManagementMode(), KisConfig::displayProfile(), KoColorSpaceRegistry::instance(), KisPlatformPluginInterfaceFactory::instance(), KisOpenGLModeProber::instance(), KisMultiSurfaceDisplayConfig::isCanvasHDR, KisMultiSurfaceStateManager::State::isCanvasOpenGL, KIS_SAFE_ASSERT_RECOVER, KIS_SAFE_ASSERT_RECOVER_NOOP, KisMultiSurfaceStateManager::State::multiConfig, KisMultiSurfaceStateManager::State::optionsFromConfig, KisDisplayConfig::optionsFromKisConfig(), overriddenWithProofingConfig(), KoColorSpaceRegistry::p709SRGBProfile(), KisMultiSurfaceStateManager::State::proofingConfig, KisOpenGLModeProber::rootSurfaceColorProfile(), KisMultiSurfaceDisplayConfig::setOptions(), KisMultiSurfaceStateManager::State::surfaceMode, and KisMultiSurfaceDisplayConfig::uiProfile.
| KisMultiSurfaceStateManager::State KisMultiSurfaceStateManager::onCanvasSurfaceFormatChanged | ( | const State & | oldState, |
| const KisDisplayConfig & | canvasConfig ) const |
Surface changed signal is possible only for the managed surface under an openGL canvas. In legacy HDR mode it is not possible to get that.
Definition at line 79 of file KisMultiSurfaceStateManager.cpp.
References KisMultiSurfaceDisplayConfig::canvasProfile, KisPlatformPluginInterfaceFactory::instance(), KisOpenGLModeProber::instance(), KisMultiSurfaceDisplayConfig::isCanvasHDR, KisMultiSurfaceStateManager::State::isCanvasOpenGL, KisDisplayConfig::isHDR, KIS_SAFE_ASSERT_RECOVER_NOOP, KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE, KisMultiSurfaceStateManager::State::multiConfig, KisDisplayConfig::options(), KisMultiSurfaceDisplayConfig::options(), KisDisplayConfig::profile, and KisMultiSurfaceDisplayConfig::setOptions().
| KisMultiSurfaceStateManager::State KisMultiSurfaceStateManager::onConfigChanged | ( | const State & | oldState, |
| int | screenId, | ||
| KisConfig::CanvasSurfaceMode | surfaceMode, | ||
| const KisDisplayConfig::Options & | options ) const |
Definition at line 126 of file KisMultiSurfaceStateManager.cpp.
References KisMultiSurfaceDisplayConfig::canvasProfile, KisConfig::displayProfile(), KoColorSpaceRegistry::instance(), KisPlatformPluginInterfaceFactory::instance(), KisOpenGLModeProber::instance(), KIS_SAFE_ASSERT_RECOVER, KisMultiSurfaceStateManager::State::multiConfig, KisMultiSurfaceStateManager::State::optionsFromConfig, overriddenWithProofingConfig(), KoColorSpaceRegistry::p709SRGBProfile(), KisMultiSurfaceStateManager::State::proofingConfig, KisMultiSurfaceDisplayConfig::setOptions(), KisMultiSurfaceStateManager::State::surfaceMode, and KisMultiSurfaceDisplayConfig::uiProfile.
| KisMultiSurfaceStateManager::State KisMultiSurfaceStateManager::onGuiSurfaceFormatChanged | ( | const State & | oldState, |
| const KoColorProfile * | uiProfile ) const |
Surface changed signal is possible only on OS with managed surface color space
Definition at line 103 of file KisMultiSurfaceStateManager.cpp.
References KisPlatformPluginInterfaceFactory::instance(), KisOpenGLModeProber::instance(), KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE, KisMultiSurfaceStateManager::State::multiConfig, and KisMultiSurfaceDisplayConfig::uiProfile.
| KisMultiSurfaceStateManager::State KisMultiSurfaceStateManager::onProofingChanged | ( | const State & | oldState, |
| KisProofingConfigurationSP | proofingConfig ) const |
Definition at line 117 of file KisMultiSurfaceStateManager.cpp.
References KisMultiSurfaceStateManager::State::multiConfig, KisMultiSurfaceStateManager::State::optionsFromConfig, overriddenWithProofingConfig(), KisMultiSurfaceStateManager::State::proofingConfig, and KisMultiSurfaceDisplayConfig::setOptions().
| KisMultiSurfaceStateManager::State KisMultiSurfaceStateManager::onScreenChanged | ( | const State & | oldState, |
| int | screenId ) const |
Definition at line 152 of file KisMultiSurfaceStateManager.cpp.
References KisPlatformPluginInterfaceFactory::instance(), KisOpenGLModeProber::instance(), onConfigChanged(), KisMultiSurfaceStateManager::State::optionsFromConfig, and KisMultiSurfaceStateManager::State::surfaceMode.
|
private |
Definition at line 162 of file KisMultiSurfaceStateManager.cpp.
References KoColorConversionTransformation::SoftProofing.