mirror of https://github.com/GNOME/gimp.git
meson, build/windows: generate AppList, StoreLogo and *Tile .png's
Most of the work in this commit is by @Jehan. These icons are used only by the .msix (MS Store) distribution of GIMP. Some legacy icons are used only by Windows 10 and need to have smaller logo than full image dimensions, so let's not use colorsvg2png. We just pass the dimensions to use by configuring variants of the same base script.
This commit is contained in:
parent
37045e477b
commit
4c968d9aa0
|
@ -0,0 +1,29 @@
|
|||
import os
|
||||
import sys
|
||||
|
||||
input_path = '@INPUT@'
|
||||
output_path = '@OUTPUT@'
|
||||
procedure = Gimp.get_pdb().lookup_procedure("file-svg-load")
|
||||
config = procedure.create_config()
|
||||
config.set_property("file", Gio.file_new_for_path(input_path))
|
||||
config.set_property("width", @LOGO_DIM@)
|
||||
config.set_property("height", @LOGO_DIM@)
|
||||
Gimp.Procedure.run(procedure, config)
|
||||
v = Gimp.Procedure.run(procedure, config)
|
||||
|
||||
if v.index(0) != Gimp.PDBStatusType.SUCCESS:
|
||||
sys.exit(os.EX_SOFTWARE)
|
||||
|
||||
image = v.index(1)
|
||||
image.resize(@IMG_WIDTH@, @IMG_HEIGHT@, (@IMG_WIDTH@-@LOGO_DIM@)/2, (@IMG_HEIGHT@-@LOGO_DIM@)/2)
|
||||
|
||||
procedure = Gimp.get_pdb().lookup_procedure("file-png-save")
|
||||
config = procedure.create_config()
|
||||
drawables = image.list_selected_drawables()
|
||||
# Needed otherwise it doesn't save the proper size because of bug #8855.
|
||||
drawables[0].resize_to_image_size()
|
||||
config.set_property("image", image)
|
||||
config.set_property("num-drawables", len(drawables))
|
||||
config.set_property("drawables", Gimp.ObjectArray.new(Gimp.Drawable, drawables, False))
|
||||
config.set_property("file", Gio.file_new_for_path(output_path))
|
||||
Gimp.Procedure.run(procedure, config)
|
|
@ -0,0 +1,250 @@
|
|||
scales = [
|
||||
'100',
|
||||
'125',
|
||||
'150',
|
||||
'200',
|
||||
'400',
|
||||
]
|
||||
|
||||
sizes = [
|
||||
'16',
|
||||
'20',
|
||||
'24',
|
||||
'30',
|
||||
'32',
|
||||
'36',
|
||||
'40',
|
||||
'48',
|
||||
'60',
|
||||
'64',
|
||||
'72',
|
||||
'80',
|
||||
'96',
|
||||
'128',
|
||||
'256',
|
||||
]
|
||||
|
||||
|
||||
# UNIVERSAL ICONS (INTRODUCED SINCE WINDOWS 8)
|
||||
wilber_path = meson.project_source_root() / 'gimp-data/images/logo/' + 'gimp-logo' + '.svg'
|
||||
|
||||
## Generate AppList (aka Square44x44Logo) icon
|
||||
foreach scale : scales
|
||||
if scale == '100'
|
||||
icon_name = 'AppList.png'
|
||||
else
|
||||
icon_name = 'AppList.scale-' + scale + '.png'
|
||||
endif
|
||||
scale_int = scale.to_int()
|
||||
size = 44 * scale_int / 100
|
||||
size_str = size.to_string()
|
||||
custom_target(icon_name,
|
||||
input : [ wilber_path ],
|
||||
output: [ icon_name ],
|
||||
command: [
|
||||
colorsvg2png, '@INPUT@', '@OUTPUT@', size_str,
|
||||
],
|
||||
build_by_default: true,
|
||||
)
|
||||
endforeach
|
||||
|
||||
foreach size : sizes
|
||||
icon_name = 'AppList.targetsize-' + size + '.png'
|
||||
custom_target(icon_name,
|
||||
input : [ wilber_path ],
|
||||
output: [ icon_name ],
|
||||
command: [
|
||||
colorsvg2png, '@INPUT@', '@OUTPUT@', size,
|
||||
],
|
||||
build_by_default: true,
|
||||
)
|
||||
|
||||
icon_name = 'AppList.targetsize-' + size + '_altform-unplated.png'
|
||||
custom_target(icon_name,
|
||||
input : [ wilber_path ],
|
||||
output: [ icon_name ],
|
||||
command: [
|
||||
colorsvg2png, '@INPUT@', '@OUTPUT@', size,
|
||||
],
|
||||
build_by_default: true,
|
||||
)
|
||||
|
||||
icon_name = 'AppList.targetsize-' + size + '_altform-lightunplated.png'
|
||||
custom_target(icon_name,
|
||||
input : [ wilber_path ],
|
||||
output: [ icon_name ],
|
||||
command: [
|
||||
colorsvg2png, '@INPUT@', '@OUTPUT@', size,
|
||||
],
|
||||
build_by_default: true,
|
||||
)
|
||||
endforeach
|
||||
|
||||
|
||||
## Generate StoreLogo icon
|
||||
foreach scale : scales
|
||||
if scale == '100'
|
||||
icon_name = 'StoreLogo.png'
|
||||
else
|
||||
icon_name = 'StoreLogo.scale-' + scale + '.png'
|
||||
endif
|
||||
scale_int = scale.to_int()
|
||||
size = 50 * scale_int / 100
|
||||
size_str = size.to_string()
|
||||
custom_target(icon_name,
|
||||
input : [ wilber_path ],
|
||||
output: [ icon_name ],
|
||||
command: [
|
||||
colorsvg2png, '@INPUT@', '@OUTPUT@', size_str,
|
||||
],
|
||||
build_by_default: true,
|
||||
)
|
||||
endforeach
|
||||
|
||||
|
||||
# LIMBO ICONS (DISCONTINUED IN WINDOWS 11 BUT MICROSOFT OBLIES DEVS TO SHIP)
|
||||
wilber_path = meson.project_source_root() / 'gimp-data/images/logo/' + 'gimp-logo-shadow' + '.svg'
|
||||
|
||||
## Generate MedTile (aka Square150x150Logo) icon
|
||||
## (The wilber size should be 32% of the icon height)
|
||||
foreach scale : scales
|
||||
icon_name = 'MedTile.scale-' + scale + '.png'
|
||||
|
||||
scale_int = scale.to_int()
|
||||
size = 150 * scale_int / 100
|
||||
size_str = size.to_string()
|
||||
|
||||
dim_size = 48 * scale_int / 100
|
||||
dim_str = dim_size.to_string()
|
||||
|
||||
gen_tile_conf = configuration_data()
|
||||
gen_tile_conf.set('INPUT', wilber_path)
|
||||
gen_tile_conf.set('OUTPUT', meson.current_build_dir() / icon_name)
|
||||
gen_tile_conf.set('IMG_WIDTH', size_str)
|
||||
gen_tile_conf.set('IMG_HEIGHT', size_str)
|
||||
gen_tile_conf.set('LOGO_DIM', dim_str)
|
||||
gen_medtile_py = configure_file(input : 'gen-tile.py.in',
|
||||
output : 'gen-medtile-' + scale + '.py',
|
||||
configuration : gen_tile_conf)
|
||||
|
||||
med_tile = custom_target(icon_name,
|
||||
input : [ gen_medtile_py ],
|
||||
depend_files: [ wilber_path ],
|
||||
output: [ icon_name ],
|
||||
command: [ gimp_exe, '-nidfs',
|
||||
'--batch-interpreter', 'python-fu-eval',
|
||||
'-b', '-', '--quit'],
|
||||
feed: true,
|
||||
build_by_default: true,
|
||||
env: gimp_run_env)
|
||||
endforeach
|
||||
|
||||
|
||||
# LEGACY ICONS (DISCONTINUED IN WINDOWS 11)
|
||||
|
||||
## Generate SmallTile (aka Square71x71Logo) icon
|
||||
## (The wilber size should be 50% of the icon height)
|
||||
foreach scale : scales
|
||||
icon_name = 'SmallTile.scale-' + scale + '.png'
|
||||
|
||||
scale_int = scale.to_int()
|
||||
size = 71 * scale_int / 100
|
||||
size_str = size.to_string()
|
||||
|
||||
dim_size = 36 * scale_int / 100
|
||||
dim_str = dim_size.to_string()
|
||||
|
||||
gen_tile_conf = configuration_data()
|
||||
gen_tile_conf.set('INPUT', wilber_path)
|
||||
gen_tile_conf.set('OUTPUT', meson.current_build_dir() / icon_name)
|
||||
gen_tile_conf.set('IMG_WIDTH', size_str)
|
||||
gen_tile_conf.set('IMG_HEIGHT', size_str)
|
||||
gen_tile_conf.set('LOGO_DIM', dim_str)
|
||||
gen_smalltile_py = configure_file(input : 'gen-tile.py.in',
|
||||
output : 'gen-smalltile-' + scale + '.py',
|
||||
configuration : gen_tile_conf)
|
||||
|
||||
small_tile = custom_target(icon_name,
|
||||
input : [ gen_smalltile_py ],
|
||||
depend_files: [ wilber_path ],
|
||||
output: [ icon_name ],
|
||||
command: [ gimp_exe, '-nidfs',
|
||||
'--batch-interpreter', 'python-fu-eval',
|
||||
'-b', '-', '--quit'],
|
||||
feed: true,
|
||||
build_by_default: true,
|
||||
env: gimp_run_env)
|
||||
endforeach
|
||||
|
||||
|
||||
## Generate LargeTile (aka Square310x310Logo) icon
|
||||
## (The wilber size should be 34% of the icon height)
|
||||
foreach scale : scales
|
||||
icon_name = 'LargeTile.scale-' + scale + '.png'
|
||||
|
||||
scale_int = scale.to_int()
|
||||
size = 310 * scale_int / 100
|
||||
size_str = size.to_string()
|
||||
|
||||
dim_size = 105 * scale_int / 100
|
||||
dim_str = dim_size.to_string()
|
||||
|
||||
gen_tile_conf = configuration_data()
|
||||
gen_tile_conf.set('INPUT', wilber_path)
|
||||
gen_tile_conf.set('OUTPUT', meson.current_build_dir() / icon_name)
|
||||
gen_tile_conf.set('IMG_WIDTH', size_str)
|
||||
gen_tile_conf.set('IMG_HEIGHT', size_str)
|
||||
gen_tile_conf.set('LOGO_DIM', dim_str)
|
||||
gen_largetile_py = configure_file(input : 'gen-tile.py.in',
|
||||
output : 'gen-largetile-' + scale + '.py',
|
||||
configuration : gen_tile_conf)
|
||||
|
||||
large_tile = custom_target(icon_name,
|
||||
input : [ gen_largetile_py ],
|
||||
depend_files: [ wilber_path ],
|
||||
output: [ icon_name ],
|
||||
command: [ gimp_exe, '-nidfs',
|
||||
'--batch-interpreter', 'python-fu-eval',
|
||||
'-b', '-', '--quit'],
|
||||
feed: true,
|
||||
build_by_default: true,
|
||||
env: gimp_run_env)
|
||||
endforeach
|
||||
|
||||
|
||||
## Generate WideTile (aka Wide310x150Logo) icon
|
||||
## (The wilber size should be 32% of the icon height)
|
||||
foreach scale : scales
|
||||
icon_name = 'WideTile.scale-' + scale + '.png'
|
||||
|
||||
scale_int = scale.to_int()
|
||||
w_size = 310 * scale_int / 100
|
||||
w_size_str = w_size.to_string()
|
||||
|
||||
h_size = 150 * scale_int / 100
|
||||
h_size_str = h_size.to_string()
|
||||
|
||||
dim_size = 48 * scale_int / 100
|
||||
dim_str = dim_size.to_string()
|
||||
|
||||
gen_tile_conf = configuration_data()
|
||||
gen_tile_conf.set('INPUT', wilber_path)
|
||||
gen_tile_conf.set('OUTPUT', meson.current_build_dir() / icon_name)
|
||||
gen_tile_conf.set('IMG_WIDTH', w_size_str)
|
||||
gen_tile_conf.set('IMG_HEIGHT', h_size_str)
|
||||
gen_tile_conf.set('LOGO_DIM', dim_str)
|
||||
gen_widetile_py = configure_file(input : 'gen-tile.py.in',
|
||||
output : 'gen-widetile-' + scale + '.py',
|
||||
configuration : gen_tile_conf)
|
||||
|
||||
wide_tile = custom_target(icon_name,
|
||||
input : [ gen_widetile_py ],
|
||||
depend_files: [ wilber_path ],
|
||||
output: [ icon_name ],
|
||||
command: [ gimp_exe, '-nidfs',
|
||||
'--batch-interpreter', 'python-fu-eval',
|
||||
'-b', '-', '--quit'],
|
||||
feed: true,
|
||||
build_by_default: true,
|
||||
env: gimp_run_env)
|
||||
endforeach
|
|
@ -1958,12 +1958,17 @@ subdir('libgimp/tests')
|
|||
subdir('docs')
|
||||
subdir('devel-docs')
|
||||
|
||||
# Windows installer
|
||||
# Inno Windows installer
|
||||
if get_option('windows-installer')
|
||||
subdir('po-windows-installer')
|
||||
subdir('build/windows/installer/lang')
|
||||
endif
|
||||
|
||||
# Microsoft Store icons for .msixupload and/or .msixbundle
|
||||
if get_option('ms-store')
|
||||
subdir('build/windows/store/Assets')
|
||||
endif
|
||||
|
||||
pkgconfig.generate(libgimp,
|
||||
filebase: 'gimp-' + gimp_api_version,
|
||||
name: prettyname,
|
||||
|
|
|
@ -4,7 +4,8 @@ option('enable-console-bin',type: 'boolean', value: true, description: 'Build
|
|||
option('win32-debug-console',type:'boolean', value: true, description: 'Open a console when starting the program')
|
||||
option('enable-multiproc', type: 'boolean', value: true, description: 'Support for multiple processors')
|
||||
option('profiling', type: 'boolean', value: false, description: 'Enable profiling')
|
||||
option('windows-installer', type: 'boolean', value: false, description: 'Generate files needed for the Windows installer')
|
||||
option('windows-installer', type: 'boolean', value: false, description: 'Generate files needed for the Inno Windows installer')
|
||||
option('ms-store', type: 'boolean', value: false, description: 'Generate files needed for the Microsoft Store .msixupload and/or .msixbundle')
|
||||
|
||||
option('relocatable-bundle', type: 'combo', value: 'platform-default',
|
||||
description: 'build with resources considered bundled under the same prefix',
|
||||
|
|
Loading…
Reference in New Issue