Make chart/image/icon size parameters for the XSLT; the chart depends on them

Almost all sizes depend on $image_size or $icon_size now
This commit is contained in:
Gergely Polonkai 2014-09-27 22:18:34 +02:00
parent 99accd3d40
commit 84b622c622
3 changed files with 95 additions and 38 deletions

View File

@ -1754,13 +1754,19 @@ ag_chart_create_svg(AgChart *chart,
return NULL;
}
params = g_new0(gchar *, 5);
params = g_new0(gchar *, 11);
params[0] = "rendering";
params[1] = (rendering) ? "'yes'" : "'no'";
params[2] = "additional-css";
css = ag_display_theme_to_css(theme);
params[3] = g_strdup_printf("\"%s\"", css);
g_free(css);
params[4] = "chart-size";
params[5] = g_strdup_printf("%d", AG_CHART_DEFAULT_RING_SIZE);
params[6] = "image-size";
params[7] = "0";
params[8] = "icon-size";
params[9] = g_strdup_printf("%d", AG_CHART_DEFAULT_ICON_SIZE);
// libxml2 messes up the output, as it prints decimal floating point
// numbers in a localized format. It is not good in locales that use a
@ -1774,6 +1780,8 @@ ag_chart_create_svg(AgChart *chart,
xsltFreeStylesheet(xslt_proc);
xmlFreeDoc(doc);
g_free(params[3]);
g_free(params[5]);
g_free(params[9]);
g_free(params);
// Now, svg_doc contains the generated SVG file

View File

@ -26,6 +26,9 @@
#include "ag-db.h"
#include "ag-display-theme.h"
#define AG_CHART_DEFAULT_RING_SIZE 600
#define AG_CHART_DEFAULT_ICON_SIZE 30
G_BEGIN_DECLS
typedef enum {
@ -63,7 +66,10 @@ struct _AgChartClass {
GsweMomentClass parent_class;
};
typedef void (*AgChartSaveImageFunc)(AgChart *, GFile *, AgDisplayTheme *, GError **);
typedef void (*AgChartSaveImageFunc)(AgChart *,
GFile *,
AgDisplayTheme *,
GError **);
GType ag_chart_get_type(void) G_GNUC_CONST;

View File

@ -15,13 +15,53 @@
<xsl:variable name="asc" select="chartinfo/ascmcs/ascendant/@degree_ut" />
<xsl:variable name="asc_rotate" select="$asc - 180"/>
<xsl:variable name="PI" select="math:constant('PI', 10)" />
<xsl:variable name="chart_size" select="600" />
<xsl:variable name="icon_size" select="30" />
<xsl:variable name="max_dist" select="/chartinfo/bodies/body/@dist[not(. &lt; ../../body/@dist)][1]" />
<xsl:variable name="image_size" select="$chart_size + 2.82 * $icon_size * ($max_dist + 2)" />
<xsl:variable name="r_aspect" select="$chart_size * 0.4" />
<xsl:variable name="loaded_icon_size" select="30" />
<xsl:variable name="icon_size">
<xsl:choose>
<xsl:when test="$icon-size != 0">
<xsl:value-of select="$icon-size"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$loaded_icon_size"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="icon_scale" select="$icon_size div $loaded_icon_size" />
<xsl:variable name="chart_size">
<xsl:choose>
<xsl:when test="$chart-size != 0">
<xsl:value-of select="$chart-size"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$image-size - 2.82 * $icon_size * ($max_dist + 2)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="image_size">
<xsl:choose>
<xsl:when test="$chart-size != 0">
<xsl:value-of select="$chart-size + 2.82 * $icon_size * ($max_dist + 2)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$image-size"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="r_outer" select="$chart_size * 0.5" />
<xsl:variable name="r_signs" select="$r_outer - ($icon_size * 1.5)" />
<xsl:variable name="r_aspect" select="$r_signs - ($icon_size * 0.5)" />
<xsl:variable name="r_houses" select="$chart_size * 0.116666" />
<xsl:variable name="r_moon" select="$chart_size * 0.083333" />
<xsl:variable name="sign_pos" select="$r_signs + ($icon_size * 0.25)" />
<xsl:variable name="deg_len" select="($r_signs - $r_aspect)" />
<xsl:variable name="deg5_len" select="$deg_len * 0.75" />
<xsl:variable name="deg1_len" select="$deg_len * 0.3" />
<xsl:variable name="planet_marker_len" select="$icon_size div 2" />
<xsl:template name="planet-template">
<xsl:param name="planet_name"/>
<xsl:param name="planet_base"/>
@ -35,22 +75,25 @@
<xsl:attribute name="class">planet planet-<xsl:value-of select="$planet_name"/></xsl:attribute>
<xsl:attribute name="transform">rotate(<xsl:value-of select="-$rotate"/>, 0, 0)</xsl:attribute>
<line y1="0" y2="0" class="planet-marker">
<xsl:attribute name="x1"><xsl:value-of select="$chart_size * 0.383333"/></xsl:attribute>
<xsl:attribute name="x2"><xsl:value-of select="$chart_size * 0.4"/></xsl:attribute>
<xsl:attribute name="x1"><xsl:value-of select="$r_aspect - $planet_marker_len"/></xsl:attribute>
<xsl:attribute name="x2"><xsl:value-of select="$r_aspect"/></xsl:attribute>
</line>
<line y1="0" y2="0" class="planet-marker">
<xsl:attribute name="x1"><xsl:value-of select="$chart_size * 0.5"/></xsl:attribute>
<xsl:attribute name="x2"><xsl:value-of select="$chart_size * 0.516666"/></xsl:attribute>
<xsl:attribute name="x1"><xsl:value-of select="$r_outer"/></xsl:attribute>
<xsl:attribute name="x2"><xsl:value-of select="$r_outer + $planet_marker_len"/></xsl:attribute>
</line>
<g>
<xsl:attribute name="transform">translate(<xsl:value-of select="$chart_size * 0.55 + $dist * ($icon_size * 1.1666666)"/>, <xsl:value-of select="-$icon_size div 2"/>) rotate(<xsl:value-of select="$rotate - $asc_rotate"/>, <xsl:value-of select="$icon_size div 2"/>, <xsl:value-of select="$icon_size div 2"/>)</xsl:attribute>
<use class="planet-symbol">
<xsl:attribute name="xlink:href">#<xsl:value-of select="$planet_base"/>_tmpl</xsl:attribute>
<xsl:choose>
<xsl:when test="$upside-down='yes'">
<xsl:attribute name="transform">rotate(180, <xsl:value-of select="$icon_size div 2"/>, <xsl:value-of select="$icon_size div 2"/>)</xsl:attribute>
</xsl:when>
</xsl:choose>
<xsl:attribute name="transform">
<xsl:choose>
<xsl:when test="$upside-down='yes'">
rotate(180, <xsl:value-of select="$icon_size div 2"/>, <xsl:value-of select="$icon_size div 2"/>)
</xsl:when>
</xsl:choose>
scale(<xsl:value-of select="$icon_scale" />)
</xsl:attribute>
</use>
<xsl:choose>
<xsl:when test="$retrograde='True'">
@ -151,24 +194,24 @@
<xsl:attribute name="transform"><xsl:value-of select="concat('rotate(', $asc_rotate, ',0,0)')" /></xsl:attribute>
<g id="base">
<circle id="outer_circle" cx="0" cy="0" class="thick">
<xsl:attribute name="r"><xsl:value-of select="$chart_size * 0.5"/></xsl:attribute>
<xsl:attribute name="r"><xsl:value-of select="$r_outer"/></xsl:attribute>
</circle>
<circle id="middle_circle" cx="0" cy="0" class="thin">
<xsl:attribute name="r"><xsl:value-of select="$chart_size * 0.425333"/></xsl:attribute>
<xsl:attribute name="r"><xsl:value-of select="$r_signs"/></xsl:attribute>
</circle>
<circle id="inner_circle" cx="0" cy="0" class="thick">
<xsl:attribute name="r"><xsl:value-of select="$r_aspect"/></xsl:attribute>
</circle>
<circle id="house_circle" cx="0" cy="0" class="thin">
<xsl:attribute name="r"><xsl:value-of select="$chart_size * 0.116666"/></xsl:attribute>
<xsl:attribute name="r"><xsl:value-of select="$r_houses"/></xsl:attribute>
</circle>
<circle id="moon_circle" cx="0" cy="0" class="thick" style="fill:#00000;stroke:none">
<xsl:attribute name="r"><xsl:value-of select="$r_moon"/></xsl:attribute>
</circle>
<line id="aries_start" y1="0" y2="0" class="degree-thick">
<xsl:attribute name="x1"><xsl:value-of select="$chart_size * 0.4"/></xsl:attribute>
<xsl:attribute name="x2"><xsl:value-of select="$chart_size * 0.5"/></xsl:attribute>
<xsl:attribute name="x1"><xsl:value-of select="$r_aspect"/></xsl:attribute>
<xsl:attribute name="x2"><xsl:value-of select="$r_outer"/></xsl:attribute>
</line>
<use x="0" y="0" xlink:href="#aries_start" id="taurus_start" transform="rotate(-30,0,0)" class="degree-thick" />
<use x="0" y="0" xlink:href="#aries_start" id="gemini_start" transform="rotate(-60,0,0)" class="degree-thick" />
@ -183,8 +226,8 @@
<use x="0" y="0" xlink:href="#aries_start" id="pisces_start" transform="rotate(-330,0,0)" class="degree-thick" />
<line id="deg_10" y1="0" y2="0" transform="rotate(-10,0,0)" class="degree-thin">
<xsl:attribute name="x1"><xsl:value-of select="$chart_size * 0.4"/></xsl:attribute>
<xsl:attribute name="x2"><xsl:value-of select="$chart_size * 0.425"/></xsl:attribute>
<xsl:attribute name="x1"><xsl:value-of select="$r_aspect"/></xsl:attribute>
<xsl:attribute name="x2"><xsl:value-of select="$r_signs"/></xsl:attribute>
</line>
<use x="0" y="0" xlink:href="#deg_10" id="deg_20" transform="rotate(-10,0,0)" class="degree-thin" />
<use x="0" y="0" xlink:href="#deg_10" id="deg_40" transform="rotate(-30,0,0)" class="degree-thin" />
@ -211,8 +254,8 @@
<use x="0" y="0" xlink:href="#deg_10" id="deg_350" transform="rotate(-340,0,0)" class="degree-thin" />
<line id="deg_5" y1="0" y2="0" transform="rotate(-5,0,0)" class="degree-thin">
<xsl:attribute name="x1"><xsl:value-of select="$chart_size * 0.4"/></xsl:attribute>
<xsl:attribute name="x2"><xsl:value-of select="$chart_size * 0.416666"/></xsl:attribute>
<xsl:attribute name="x1"><xsl:value-of select="$r_aspect"/></xsl:attribute>
<xsl:attribute name="x2"><xsl:value-of select="$r_aspect + $deg5_len"/></xsl:attribute>
</line>
<use x="0" y="0" xlink:href="#deg_5" id="deg_15" transform="rotate(-10,0,0)" class="degree-thin" />
<use x="0" y="0" xlink:href="#deg_5" id="deg_25" transform="rotate(-20,0,0)" class="degree-thin" />
@ -251,8 +294,8 @@
<use x="0" y="0" xlink:href="#deg_5" id="deg_355" transform="rotate(-350,0,0)" class="degree-thin" />
<line id="deg_1" y1="0" y2="0" transform="rotate(-1,0,0)" class="degree-thin">
<xsl:attribute name="x1"><xsl:value-of select="$chart_size * 0.4"/></xsl:attribute>
<xsl:attribute name="x2"><xsl:value-of select="$chart_size * 0.408333"/></xsl:attribute>
<xsl:attribute name="x1"><xsl:value-of select="$r_aspect"/></xsl:attribute>
<xsl:attribute name="x2"><xsl:value-of select="$r_aspect + $deg1_len"/></xsl:attribute>
</line>
<use x="0" y="0" xlink:href="#deg_1" id="deg_2" transform="rotate(-1,0,0)" class="degree-thin" />
<use x="0" y="0" xlink:href="#deg_1" id="deg_3" transform="rotate(-2,0,0)" class="degree-thin" />
@ -543,40 +586,40 @@
<use x="0" y="0" xlink:href="#deg_1" id="deg_359" transform="rotate(-358,0,0)" class="degree-thin" />
<use x="0" y="0" xlink:href="#sign_aries_tmpl" id="sign_aries" class="sign sign-fire">
<xsl:attribute name="transform">rotate(-15,0,0) translate(<xsl:value-of select="$chart_size * 0.435"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>)</xsl:attribute>
<xsl:attribute name="transform">rotate(-15,0,0) translate(<xsl:value-of select="$sign_pos"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>) scale(<xsl:value-of select="$icon_scale" />)</xsl:attribute>
</use>
<use x="0" y="0" xlink:href="#sign_taurus_tmpl" id="sign_taurus" class="sign sign-earth">
<xsl:attribute name="transform">rotate(-45,0,0) translate(<xsl:value-of select="$chart_size * 0.435"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>)</xsl:attribute>
<xsl:attribute name="transform">rotate(-45,0,0) translate(<xsl:value-of select="$sign_pos"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>) scale(<xsl:value-of select="$icon_scale" />)</xsl:attribute>
</use>
<use x="0" y="0" xlink:href="#sign_gemini_tmpl" id="sign_gemini" class="sign sign-air">
<xsl:attribute name="transform">rotate(-75,0,0) translate(<xsl:value-of select="$chart_size * 0.435"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>)</xsl:attribute>
<xsl:attribute name="transform">rotate(-75,0,0) translate(<xsl:value-of select="$sign_pos"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>) scale(<xsl:value-of select="$icon_scale" />)</xsl:attribute>
</use>
<use x="0" y="0" xlink:href="#sign_cancer_tmpl" id="sign_cancer" class="sign sign-water">
<xsl:attribute name="transform">rotate(-105,0,0) translate(<xsl:value-of select="$chart_size * 0.435"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>)</xsl:attribute>
<xsl:attribute name="transform">rotate(-105,0,0) translate(<xsl:value-of select="$sign_pos"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>) scale(<xsl:value-of select="$icon_scale" />)</xsl:attribute>
</use>
<use x="0" y="0" xlink:href="#sign_leo_tmpl" id="sign_leo" class="sign sign-fire">
<xsl:attribute name="transform">rotate(-135,0,0) translate(<xsl:value-of select="$chart_size * 0.435"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>)</xsl:attribute>
<xsl:attribute name="transform">rotate(-135,0,0) translate(<xsl:value-of select="$sign_pos"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>) scale(<xsl:value-of select="$icon_scale" />)</xsl:attribute>
</use>
<use x="0" y="0" xlink:href="#sign_virgo_tmpl" id="sign_virgo" class="sign sign-earth">
<xsl:attribute name="transform">rotate(-165,0,0) translate(<xsl:value-of select="$chart_size * 0.435"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>)</xsl:attribute>
<xsl:attribute name="transform">rotate(-165,0,0) translate(<xsl:value-of select="$sign_pos"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>) scale(<xsl:value-of select="$icon_scale" />)</xsl:attribute>
</use>
<use x="0" y="0" xlink:href="#sign_libra_tmpl" id="sign_libra" class="sign sign-air">
<xsl:attribute name="transform">rotate(-195,0,0) translate(<xsl:value-of select="$chart_size * 0.435"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>)</xsl:attribute>
<xsl:attribute name="transform">rotate(-195,0,0) translate(<xsl:value-of select="$sign_pos"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>) scale(<xsl:value-of select="$icon_scale" />)</xsl:attribute>
</use>
<use x="0" y="0" xlink:href="#sign_scorpio_tmpl" id="sign_scorpio" class="sign sign-water">
<xsl:attribute name="transform">rotate(-225,0,0) translate(<xsl:value-of select="$chart_size * 0.435"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>)</xsl:attribute>
<xsl:attribute name="transform">rotate(-225,0,0) translate(<xsl:value-of select="$sign_pos"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>) scale(<xsl:value-of select="$icon_scale" />)</xsl:attribute>
</use>
<use x="0" y="0" xlink:href="#sign_sagittarius_tmpl" id="sign_sagittarius" class="sign sign-fire">
<xsl:attribute name="transform">rotate(-255,0,0) translate(<xsl:value-of select="$chart_size * 0.435"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>)</xsl:attribute>
<xsl:attribute name="transform">rotate(-255,0,0) translate(<xsl:value-of select="$sign_pos"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>) scale(<xsl:value-of select="$icon_scale" />)</xsl:attribute>
</use>
<use x="0" y="0" xlink:href="#sign_capricorn_tmpl" id="sign_capricorn" class="sign sign-earth">
<xsl:attribute name="transform">rotate(-285,0,0) translate(<xsl:value-of select="$chart_size * 0.435"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>)</xsl:attribute>
<xsl:attribute name="transform">rotate(-285,0,0) translate(<xsl:value-of select="$sign_pos"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>) scale(<xsl:value-of select="$icon_scale" />)</xsl:attribute>
</use>
<use x="0" y="0" xlink:href="#sign_aquarius_tmpl" id="sign_aquarius" class="sign sign-air">
<xsl:attribute name="transform">rotate(-315,0,0) translate(<xsl:value-of select="$chart_size * 0.435"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>)</xsl:attribute>
<xsl:attribute name="transform">rotate(-315,0,0) translate(<xsl:value-of select="$sign_pos"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>) scale(<xsl:value-of select="$icon_scale" />)</xsl:attribute>
</use>
<use x="0" y="0" xlink:href="#sign_pisces_tmpl" id="sign_pisces" class="sign sign-water">
<xsl:attribute name="transform">rotate(-345,0,0) translate(<xsl:value-of select="$chart_size * 0.435"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>)</xsl:attribute>
<xsl:attribute name="transform">rotate(-345,0,0) translate(<xsl:value-of select="$sign_pos"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>) scale(<xsl:value-of select="$icon_scale" />)</xsl:attribute>
</use>
</g>