Krita Source Code Documentation
Loading...
Searching...
No Matches
KisTextureOptionModel.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2022 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
7
8#include <kis_assert.h>
9#include <KisLager.h>
10
13
14namespace {
15
16auto patternResourceLens = [] (KisResourcesInterfaceSP resourcesInterface) {
17 return lager::lenses::getset(
18 [resourcesInterface] (const KisEmbeddedTextureData &data) {
19 KoResourceLoadResult result = data.loadLinkedPattern(resourcesInterface);
20
21 KoResourceSP resource;
22
24 if (!data.isNull()) {
25 qWarning() << "Failed to load embedded resource" << result.signature();
26 }
27 resource = resourcesInterface->source(ResourceType::Patterns).fallbackResource();
28 } else {
29 resource = result.resource();
30 }
31
32 return resource;
33 },
34 [] (const KisEmbeddedTextureData &, KoResourceSP resource) {
36 return KisEmbeddedTextureData::fromPattern(resource.dynamicCast<KoPattern>());
37 });
38};
39
40}
41
42KisTextureOptionModel::KisTextureOptionModel(lager::cursor<KisTextureOptionData> _optionData, KisResourcesInterfaceSP resourcesInterface)
43 : optionData(_optionData)
45 , LAGER_QT(textureResource) {optionData[&KisTextureOptionData::textureData].zoom(patternResourceLens(resourcesInterface))}
46 , LAGER_QT(scale) {optionData[&KisTextureOptionData::scale]}
47 , LAGER_QT(brightness) {optionData[&KisTextureOptionData::brightness]}
48 , LAGER_QT(contrast) {optionData[&KisTextureOptionData::contrast]}
49 , LAGER_QT(neutralPoint) {optionData[&KisTextureOptionData::neutralPoint]}
50 , LAGER_QT(offsetX) {optionData[&KisTextureOptionData::offsetX]}
51 , LAGER_QT(offsetY) {optionData[&KisTextureOptionData::offsetY]}
52 , LAGER_QT(maximumOffsetX) {optionData[&KisTextureOptionData::maximumOffsetX]}
53 , LAGER_QT(maximumOffsetY) {optionData[&KisTextureOptionData::maximumOffsetY]}
54 , LAGER_QT(isRandomOffsetX) {optionData[&KisTextureOptionData::isRandomOffsetX]}
55 , LAGER_QT(isRandomOffsetY) {optionData[&KisTextureOptionData::isRandomOffsetY]}
56 , LAGER_QT(texturingMode) {optionData[&KisTextureOptionData::texturingMode]
57 .zoom(kislager::lenses::do_static_cast<KisTextureOptionData::TexturingMode, int>)}
58 , LAGER_QT(useSoftTexturing) {optionData[&KisTextureOptionData::useSoftTexturing]}
59 , LAGER_QT(cutOffPolicy) {optionData[&KisTextureOptionData::cutOffPolicy]}
60 , LAGER_QT(cutOffLeftNormalized) {optionData[&KisTextureOptionData::cutOffLeft]
62 , LAGER_QT(cutOffRightNormalized) {optionData[&KisTextureOptionData::cutOffRight]
64 , LAGER_QT(invert) {optionData[&KisTextureOptionData::invert]}
65 , LAGER_QT(autoInvertOnErase) {optionData[&KisTextureOptionData::autoInvertOnErase]}
66{
67 LAGER_QT(textureResource).bind(std::bind(&KisTextureOptionModel::updateOffsetLimits, this, std::placeholders::_1));
68}
69
71{
73 data.textureData = KisEmbeddedTextureData::fromPattern(textureResource().dynamicCast<KoPattern>());
74 return data;
75}
76
78{
79 KoPatternSP pattern = resource.dynamicCast<KoPattern>();
81
82 setmaximumOffsetX(pattern->width() / 2);
83 setmaximumOffsetY(pattern->height() / 2);
84}
LAGER_QT(textureResource)
KoResourceLoadResult loadLinkedPattern(KisResourcesInterfaceSP resourcesInterface) const
static KisEmbeddedTextureData fromPattern(KoPatternSP pattern)
lager::cursor< KisTextureOptionData > optionData
KisTextureOptionData bakedOptionData() const
KisTextureOptionModel(lager::cursor< KisTextureOptionData > optionData, KisResourcesInterfaceSP resourcesInterface)
void updateOffsetLimits(KoResourceSP resource)
Write API docs here.
Definition KoPattern.h:21
KoResourceSP resource() const noexcept
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
Definition kis_assert.h:129
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128
const QString Patterns
constexpr auto scale_int_to_real
Definition KisLager.h:54
KisEmbeddedTextureData textureData