#!/usr/bin/env python
#
-# androink - Generate android resources for multiple resolutions
+# androink - Generate android resources for multiple densities
#
# Copyright (C) 2012 Federico Paolinelli <fedepaol@gmail.com>
# Copyright (C) 2013 Antonio Ospite <ospite@studenti.unina.it>
__description = """This script expects the svg to use Inkscape DPIs.
-This means that the resolution given in the drawing will be used for
-MDPI resolution and scaled to generate the other resolutions.
+Either MDPI or HDPI can be used as the baseline density and the drawables will
+scaled to generate the other densities.
"""
__version = "0.1"
BASE_OPTIONS = ' --export-area-page --export-png '
-# Inkscape default DPI is 90, we use this for the MDPI resource
+# Inkscape default DPI is 90
BASELINE_DPI = 90
-LDPI = ('drawable-ldpi', BASELINE_DPI * 0.75)
-MDPI = ('drawable-mdpi', BASELINE_DPI * 1.0)
-HDPI = ('drawable-hdpi', BASELINE_DPI * 1.5)
-XHDPI = ('drawable-xhdpi', BASELINE_DPI * 2.0)
+# densities are calculated following the scaling ratio
+# 3:4:6:8 mapped to ldpi:mdpi:hdpi:xhdpi
-resolutions = [LDPI, MDPI, HDPI, XHDPI]
+# for baseline mdpi consider 4 as the base ratio
+densities_baseline_mdpi = [
+ ('drawable-ldpi', BASELINE_DPI * 0.75), # 3/4
+ ('drawable-mdpi', BASELINE_DPI * 1.0), # 4/4
+ ('drawable-hdpi', BASELINE_DPI * 1.5), # 6/4
+ ('drawable-xhdpi', BASELINE_DPI * 2.0), # 8/4
+ ]
+
+# for baseline hdpi consider 6 as the base ratio
+densities_baseline_hdpi = [
+ ('drawable-ldpi', BASELINE_DPI * 0.5), # 3/6
+ ('drawable-mdpi', BASELINE_DPI * 0.666666667), # 4/6
+ ('drawable-hdpi', BASELINE_DPI * 1.0), # 6/6
+ ('drawable-xhdpi', BASELINE_DPI * 1.333333333), # 8/6
+ ]
def export_file(file_name):
print 'exporting file', file_name
name_without_ext = os.path.splitext(file_name)[0]
- for rel in resolutions:
- dpispec, dpi = rel
+ if args.baseline_density == 'mdpi':
+ densities = densities_baseline_mdpi
+ elif args.baseline_density == 'hdpi':
+ densities = densities_baseline_hdpi
+
+ for density in densities:
+ dpispec, dpi = density
res_path = os.path.join(args.res_folder, dpispec)
if not os.path.exists(res_path):
dest='ink_path', default='inkscape',
help='path of Inkscape executable')
+ parser.add_argument('-d', '--baseline-density', metavar="<mdpi|hdpi>",
+ dest='baseline_density', choices=['mdpi', 'hdpi'], default='mdpi',
+ help='the baseline density to generate the drawables from')
+
parser.add_argument('-D', '--dry_run',
dest='dry', action='store_const', const=True,
help='performs a dry run')