Skip to content

Commit a8a9ec4

Browse files
committed
feat: contrast level
1 parent 679c68e commit a8a9ec4

6 files changed

Lines changed: 89 additions & 35 deletions

File tree

src/kde_material_you_colors/apply_themes.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ def apply(config: Configs, wallpaper: WallpaperReader, dark_light):
2323
config.read("scheme_variant"),
2424
config.read("chroma_multiplier"),
2525
config.read("tone_multiplier"),
26+
config.read("contrast_level"),
2627
)
2728

2829
if material_colors is None:

src/kde_material_you_colors/config.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ def defaults(self):
178178
"chroma_multiplier": [args.chroma_multiplier, 1, 2],
179179
"tone_multiplier": [args.tone_multiplier, 1, 2],
180180
"frame_contrast": [args.frame_contrast, 1, 2],
181+
"contrast_level": [args.contrast_level, 1, 2],
181182
"qdbus_executable": [args.qdbus_executable, None, 3],
182183
"manual_fetch": [args.manual_fetch, False, 0],
183184
"fetch_colors": [None, False, 0],

src/kde_material_you_colors/data/sample_config.conf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,11 @@ tone_multiplier = 1
211211
# Default is 0.2
212212
frame_contrast = 1
213213

214+
# Contrast
215+
# A float between -1 and 1
216+
# Default is 0
217+
contrast_level = 0
218+
214219
# QDbus executable
215220
# Name or location of the QDbus executable e.g qdbus6, qdbus-qt6...
216221
# Default is qdbus6

src/kde_material_you_colors/main.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,14 @@ def main():
370370
metavar="<float>",
371371
)
372372

373+
parser.add_argument(
374+
"--contrast-level",
375+
type=float,
376+
help="General contrast level (value from -1 to 1, default is 0)",
377+
default=None,
378+
metavar="<float>",
379+
)
380+
373381
# Get commandline arguments
374382
args = parser.parse_args()
375383
# Check for one shot arguments

src/kde_material_you_colors/utils/m3_scheme_utils.py

Lines changed: 25 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -42,34 +42,6 @@ def palette_to_hex(palette: TonalPalette):
4242
return tones
4343

4444

45-
def custom_dynamic_color(
46-
custom_color,
47-
source_color=0,
48-
blend=True,
49-
scheme_variant=5,
50-
chroma_mult=1.0,
51-
tone_mult=1.0,
52-
):
53-
value = custom_color["value"]
54-
value = DislikeAnalyzer.fix_if_disliked(Hct.from_int(value)).to_int()
55-
if custom_color["blend"]:
56-
value = Blend.harmonize(value, source_color)
57-
58-
hct = Hct.from_int(value)
59-
scheme = getScheme(scheme_variant, hct, False, 0)
60-
schemeDark = getScheme(scheme_variant, hct, True, 0)
61-
colorsLight = getColors(scheme, chroma_mult, tone_mult, False)
62-
colorsDark = getColors(schemeDark, chroma_mult, tone_mult, True)
63-
64-
return {
65-
"source": hexFromArgb(custom_color["value"]),
66-
"value": hexFromArgb(value),
67-
"blended": blend,
68-
"light": colorsLight,
69-
"dark": colorsDark,
70-
}
71-
72-
7345
schemes = [
7446
SchemeContent,
7547
SchemeExpressive,
@@ -85,7 +57,11 @@ def custom_dynamic_color(
8557

8658
def getScheme(scheme_variant, source, isDark, contrastLevel):
8759
scheme_class = schemes[scheme_variant]
88-
return scheme_class(source, isDark, contrastLevel)
60+
return scheme_class(
61+
source_color_hct=source,
62+
is_dark=isDark,
63+
contrast_level=contrastLevel,
64+
)
8965

9066

9167
def getColors(scheme, chroma_mult, tone_mult, is_dark):
@@ -109,10 +85,12 @@ def getColors(scheme, chroma_mult, tone_mult, is_dark):
10985
return colors
11086

11187

112-
def themeFromSourceColor(seed_color, scheme_variant=5, chroma_mult=1, tone_mult=1):
88+
def themeFromSourceColor(
89+
seed_color, scheme_variant=5, chroma_mult=1, tone_mult=1, contrast_level=0
90+
):
11391
source = Hct.from_int(seed_color)
114-
scheme = getScheme(scheme_variant, source, False, 0)
115-
schemeDark = getScheme(scheme_variant, source, True, 0)
92+
scheme = getScheme(scheme_variant, source, False, contrast_level)
93+
schemeDark = getScheme(scheme_variant, source, True, contrast_level)
11694
colorsLight = getColors(scheme, chroma_mult, tone_mult, False)
11795
colorsDark = getColors(schemeDark, chroma_mult, tone_mult, True)
11896
# Base text states taken from Breeze Color Scheme
@@ -152,7 +130,13 @@ def themeFromSourceColor(seed_color, scheme_variant=5, chroma_mult=1, tone_mult=
152130

153131

154132
def get_material_you_colors(
155-
wallpaper_data, ncolor, source_type, scheme_variant, chroma_mult, tone_mult
133+
wallpaper_data,
134+
ncolor,
135+
source_type,
136+
scheme_variant,
137+
chroma_mult,
138+
tone_mult,
139+
contrast_level,
156140
):
157141
"""Get material you colors from wallpaper or hex color using material-color-utility
158142
@@ -191,7 +175,11 @@ def get_material_you_colors(
191175
ncolor = 0
192176
source_color = hexFromArgb(source_colors[ncolor])
193177
theme = themeFromSourceColor(
194-
argbFromHex(source_color), scheme_variant, chroma_mult, tone_mult
178+
argbFromHex(source_color),
179+
scheme_variant,
180+
chroma_mult,
181+
tone_mult,
182+
contrast_level,
195183
)
196184

197185
materialYouColors = {
@@ -229,6 +217,7 @@ def get_color_schemes(
229217
scheme_variant=5,
230218
chroma_mult=1.0,
231219
tone_mult=1.0,
220+
contrast_level=0.0,
232221
):
233222
"""Display best colors, allow to select alternative color,
234223
and make and apply color schemes for dark and light mode
@@ -258,6 +247,7 @@ def get_color_schemes(
258247
scheme_variant,
259248
chroma_mult,
260249
tone_mult,
250+
contrast_level,
261251
)
262252

263253
elif wallpaper_type == "color" and wallpaper_data:
@@ -269,6 +259,7 @@ def get_color_schemes(
269259
scheme_variant,
270260
chroma_mult,
271261
tone_mult,
262+
contrast_level,
272263
)
273264

274265
if materialYouColors is not None:

src/plasmoid/package/contents/ui/FullRepresentation.qml

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -551,7 +551,8 @@ ColumnLayout {
551551
property int scheme_variant: 5; \
552552
property real chroma_multiplier: 1.0; \
553553
property real tone_multiplier: 1.0; \
554-
property real frame_contrast: 1.0; \
554+
property real frame_contrast: 0.2; \
555+
property real contrast_level: 0.0; \
555556
}';
556557

557558
settings = Qt.createQmlObject(settingsString, mainLayout, "settingsObject");
@@ -2137,6 +2138,53 @@ ColumnLayout {
21372138
visible: fullRepresentation.showAdvanced && settings.frame_contrast < 0.15
21382139
}
21392140

2141+
Rectangle {
2142+
Layout.topMargin: Kirigami.Units.mediumSpacing
2143+
Layout.preferredWidth: mainLayout.width
2144+
height: 1
2145+
color: dividerColor
2146+
opacity: dividerOpacity
2147+
visible: fullRepresentation.showAdvanced
2148+
}
2149+
2150+
PlasmaExtras.Heading {
2151+
level: 1
2152+
text: "Contrast"
2153+
Layout.alignment: Qt.AlignHCenter
2154+
visible: fullRepresentation.showAdvanced
2155+
}
2156+
2157+
RowLayout {
2158+
visible: fullRepresentation.showAdvanced
2159+
2160+
PlasmaComponents3.Slider {
2161+
value: settings.contrast_level
2162+
from: -1
2163+
to: 1
2164+
Layout.fillWidth: true
2165+
onValueChanged: {
2166+
settings.contrast_level = value.toFixed(2)
2167+
}
2168+
}
2169+
2170+
PlasmaComponents3.TextField {
2171+
Layout.preferredWidth: controlWidth
2172+
placeholderText: "-1-1"
2173+
horizontalAlignment: TextInput.AlignHCenter
2174+
text: parseFloat(settings.contrast_level)
2175+
2176+
validator: DoubleValidator {
2177+
bottom: -1
2178+
top: 1
2179+
decimals: 2
2180+
notation: DoubleValidator.StandardNotation
2181+
}
2182+
2183+
onAccepted: {
2184+
settings.contrast_level = parseFloat(text)
2185+
}
2186+
}
2187+
}
21402188

21412189
Rectangle {
21422190
Layout.topMargin: Kirigami.Units.mediumSpacing

0 commit comments

Comments
 (0)