icons: have -Dvec-icons=false option work with meson.

The whole logics of creating specially prepared PNG images for vector
icons (with gtk-encode-symbolic-svg) was absent. This option was
basically completely broken, yet we now know that we need the ability to
install PNG alternatives for the icons (see #6821).

This is a continuation of previous commit which is straightening a bit
our whole icon theme builds. Note though that more needs to be done
because I definitely still see room for more mess and far too much
duplication.
This commit is contained in:
Jehan 2022-01-26 00:29:39 +01:00
parent ae861e01cd
commit 11183f4fa4
15 changed files with 356 additions and 26 deletions

View File

@ -0,0 +1,24 @@
icons_dir = size + 'x' + size
foreach color_icon : source_icons
split_name = color_icon.split('.')
if split_name.length() != 2
error('Unexpected icon name: ' + color_icon)
endif
output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
icon_name = output_path.split('/')[1]
input_path = split_name[0] + '-symbolic.svg'
input_path = '../scalable/' + input_path.split('/')[1]
custom_target(icon_name,
input : [ input_path ],
output: [ icon_name ],
command: [
gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
],
install: true,
install_dir: gimpiconsdir / theme / icons_dir / 'apps',
)
endforeach

View File

@ -0,0 +1,24 @@
icons_dir = size + 'x' + size
foreach color_icon : source_icons
split_name = color_icon.split('.')
if split_name.length() != 2
error('Unexpected icon name: ' + color_icon)
endif
output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
icon_name = output_path.split('/')[1]
input_path = split_name[0] + '-symbolic.svg'
input_path = '../scalable/' + input_path.split('/')[1]
custom_target(icon_name,
input : [ input_path ],
output: [ icon_name ],
command: [
gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
],
install: true,
install_dir: gimpiconsdir / theme / icons_dir / 'apps',
)
endforeach

View File

@ -0,0 +1,24 @@
icons_dir = size + 'x' + size
foreach color_icon : source_icons
split_name = color_icon.split('.')
if split_name.length() != 2
error('Unexpected icon name: ' + color_icon)
endif
output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
icon_name = output_path.split('/')[1]
input_path = split_name[0] + '-symbolic.svg'
input_path = '../scalable/' + input_path.split('/')[1]
custom_target(icon_name,
input : [ input_path ],
output: [ icon_name ],
command: [
gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
],
install: true,
install_dir: gimpiconsdir / theme / icons_dir / 'apps',
)
endforeach

View File

@ -0,0 +1,24 @@
icons_dir = size + 'x' + size
foreach color_icon : source_icons
split_name = color_icon.split('.')
if split_name.length() != 2
error('Unexpected icon name: ' + color_icon)
endif
output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
icon_name = output_path.split('/')[1]
input_path = split_name[0] + '-symbolic.svg'
input_path = '../scalable/' + input_path.split('/')[1]
custom_target(icon_name,
input : [ input_path ],
output: [ icon_name ],
command: [
gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
],
install: true,
install_dir: gimpiconsdir / theme / icons_dir / 'apps',
)
endforeach

View File

@ -0,0 +1,24 @@
icons_dir = size + 'x' + size
foreach color_icon : source_icons
split_name = color_icon.split('.')
if split_name.length() != 2
error('Unexpected icon name: ' + color_icon)
endif
output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
icon_name = output_path.split('/')[1]
input_path = split_name[0] + '-symbolic.svg'
input_path = '../scalable/' + input_path.split('/')[1]
custom_target(icon_name,
input : [ input_path ],
output: [ icon_name ],
command: [
gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
],
install: true,
install_dir: gimpiconsdir / theme / icons_dir / 'apps',
)
endforeach

View File

@ -0,0 +1,24 @@
icons_dir = size + 'x' + size
foreach color_icon : source_icons
split_name = color_icon.split('.')
if split_name.length() != 2
error('Unexpected icon name: ' + color_icon)
endif
output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
icon_name = output_path.split('/')[1]
input_path = split_name[0] + '-symbolic.svg'
input_path = '../scalable/' + input_path.split('/')[1]
custom_target(icon_name,
input : [ input_path ],
output: [ icon_name ],
command: [
gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
],
install: true,
install_dir: gimpiconsdir / theme / icons_dir / 'apps',
)
endforeach

View File

@ -0,0 +1,24 @@
icons_dir = size + 'x' + size
foreach color_icon : source_icons
split_name = color_icon.split('.')
if split_name.length() != 2
error('Unexpected icon name: ' + color_icon)
endif
output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
icon_name = output_path.split('/')[1]
input_path = split_name[0] + '-symbolic.svg'
input_path = '../scalable/' + input_path.split('/')[1]
custom_target(icon_name,
input : [ input_path ],
output: [ icon_name ],
command: [
gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
],
install: true,
install_dir: gimpiconsdir / theme / icons_dir / 'apps',
)
endforeach

View File

@ -0,0 +1,24 @@
icons_dir = size + 'x' + size
foreach color_icon : source_icons
split_name = color_icon.split('.')
if split_name.length() != 2
error('Unexpected icon name: ' + color_icon)
endif
output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
icon_name = output_path.split('/')[1]
input_path = split_name[0] + '-symbolic.svg'
input_path = '../scalable/' + input_path.split('/')[1]
custom_target(icon_name,
input : [ input_path ],
output: [ icon_name ],
command: [
gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
],
install: true,
install_dir: gimpiconsdir / theme / icons_dir / 'apps',
)
endforeach

View File

@ -0,0 +1,24 @@
icons_dir = size + 'x' + size
foreach color_icon : source_icons
split_name = color_icon.split('.')
if split_name.length() != 2
error('Unexpected icon name: ' + color_icon)
endif
output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
icon_name = output_path.split('/')[1]
input_path = split_name[0] + '-symbolic.svg'
input_path = '../scalable/' + input_path.split('/')[1]
custom_target(icon_name,
input : [ input_path ],
output: [ icon_name ],
command: [
gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
],
install: true,
install_dir: gimpiconsdir / theme / icons_dir / 'apps',
)
endforeach

View File

@ -0,0 +1,24 @@
icons_dir = size + 'x' + size
foreach color_icon : source_icons
split_name = color_icon.split('.')
if split_name.length() != 2
error('Unexpected icon name: ' + color_icon)
endif
output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
icon_name = output_path.split('/')[1]
input_path = split_name[0] + '-symbolic.svg'
input_path = '../scalable/' + input_path.split('/')[1]
custom_target(icon_name,
input : [ input_path ],
output: [ icon_name ],
command: [
gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
],
install: true,
install_dir: gimpiconsdir / theme / icons_dir / 'apps',
)
endforeach

View File

@ -0,0 +1,24 @@
icons_dir = size + 'x' + size
foreach color_icon : source_icons
split_name = color_icon.split('.')
if split_name.length() != 2
error('Unexpected icon name: ' + color_icon)
endif
output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
icon_name = output_path.split('/')[1]
input_path = split_name[0] + '-symbolic.svg'
input_path = '../scalable/' + input_path.split('/')[1]
custom_target(icon_name,
input : [ input_path ],
output: [ icon_name ],
command: [
gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
],
install: true,
install_dir: gimpiconsdir / theme / icons_dir / 'apps',
)
endforeach

View File

@ -0,0 +1,30 @@
icons_dir = size + 'x' + size
foreach color_icon : source_icons
split_name = color_icon.split('.')
if split_name.length() != 2
error('Unexpected icon name: ' + color_icon)
endif
output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
icon_name = output_path.split('/')[1]
input_path = split_name[0] + '-symbolic.svg'
input_path = '../scalable/' + input_path.split('/')[1]
if fs.exists(input_path)
custom_target(icon_name,
input : [ input_path ],
output: [ icon_name ],
command: [
gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
],
install: true,
install_dir: gimpiconsdir / theme / icons_dir / 'apps',
)
else
# In size 64, some icons are not generated from vector images.
install_data(color_icon.split('/')[1],
install_dir: gimpiconsdir / theme / icons_dir / 'apps',
)
endif
endforeach

View File

@ -0,0 +1,24 @@
icons_dir = size + 'x' + size
foreach color_icon : source_icons
split_name = color_icon.split('.')
if split_name.length() != 2
error('Unexpected icon name: ' + color_icon)
endif
output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
icon_name = output_path.split('/')[1]
input_path = split_name[0] + '-symbolic.svg'
input_path = '../scalable/' + input_path.split('/')[1]
custom_target(icon_name,
input : [ input_path ],
output: [ icon_name ],
command: [
gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
],
install: true,
install_dir: gimpiconsdir / theme / icons_dir / 'apps',
)
endforeach

View File

@ -6,38 +6,49 @@ if have_vector_icons
# [ '64x64', bitmap_64system ],
[ '64x64', bitmap_64_always ],
]
else
all_icons = [
[ '12x12', bitmap_12 ],
[ '16x16', bitmap_16 ],
[ '18x18', bitmap_18 ],
[ '20x20', bitmap_20 ],
[ '22x22', bitmap_22 ],
[ '24x24', bitmap_24 ],
[ '32x32', bitmap_32 ],
[ '48x48', bitmap_48 ],
[ '64x64', bitmap_64 + bitmap_64_always + bitmap_64system ],
[ '96x96', bitmap_96 ],
[ '128x128', bitmap_128 ],
[ '192x192', bitmap_192 ],
[ '256x256', bitmap_256 ],
]
endif
foreach icon_info : all_icons
icons_dir = icon_info[0]
icons_list= icon_info[1]
install_data(icons_list,
install_dir: gimpiconsdir / theme / icons_dir / 'apps',
)
endforeach
else
gtk_encode_symbolic_svg = find_program('gtk-encode-symbolic-svg')
sizes = [ '12', '16', '18', '20', '22', '24', '32',
'48', '64', '96', '128', '192', '256' ]
sizes = {
'12': bitmap_12,
'16': bitmap_16,
'18': bitmap_18,
'20': bitmap_20,
'22': bitmap_22,
'24': bitmap_24,
'32': bitmap_32,
'48': bitmap_48,
'64': bitmap_64 + bitmap_64_always + bitmap_64system,
'96': bitmap_96,
'128': bitmap_128,
'192': bitmap_192,
'256': bitmap_256,
}
foreach size, source_icons: sizes
# Note: I originally wanted to implement it here in a loop but
# custom_target() doesn't accept an output path with a folder! So I
# end up creating as many empty directories as generated sizes and
# copying the same meson.build everywhere (which is really stupid,
# let's admit it). Only the 64x64 size has a slightly different
# meson.build as it also installs some non-symbolic images.
subdir(size)
endforeach
endif
install_data('index.theme',
install_dir: gimpiconsdir / theme,
)
foreach icon_info : all_icons
icons_dir = icon_info[0]
icons_list= icon_info[1]
install_data(icons_list,
install_dir: gimpiconsdir / theme / icons_dir / 'apps',
)
endforeach
icons_core = [ '64/gimp-question.png', ]
icons_imgs = [ '64/gimp-wilber-eek.png', ]

View File

@ -87,6 +87,7 @@ i18n = import('i18n')
gnome = import('gnome')
pythonmod = import('python')
simd = import('unstable-simd')
fs = import('fs')
cc = meson.get_compiler('c')
cxx = meson.get_compiler('cpp')