Merge pull request #86 from gergelypolonkai/bug-85
Fix up display theme CSS generating code
This commit is contained in:
		
							
								
								
									
										15
									
								
								TODO.org
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								TODO.org
									
									
									
									
									
								
							| @@ -130,6 +130,21 @@ | ||||
|   more sense. This, however, is not possible with aspects and | ||||
|   antiscion axes. SWE-GLib should provide a solution to this. | ||||
|  | ||||
|   Planet visibility checklist: | ||||
|   - planets are visible by default | ||||
|   - is the planet excluded from the theme? If so, add rule | ||||
|     .planet-<planetname> { visibility: hidden; } | ||||
|  | ||||
|   Aspect visibility checklist: | ||||
|   - aspects are visible by default | ||||
|   - is this type of aspect has to be visible? If no, add rule | ||||
|     .aspect-<aspecttype> {visibility: hidden; } | ||||
|   - is planet1 visible? If no, .aspect-p-<planet1> {visibility: hidden; } | ||||
|   - repeat for planet2 | ||||
|  | ||||
|   Antiscion visibility checklist: | ||||
|   - same as for aspects | ||||
|  | ||||
| ** Implement the original Astrognome theme | ||||
|  | ||||
|    The software created by Jean-André Santoni has its own list of | ||||
|   | ||||
| @@ -4,41 +4,11 @@ | ||||
| #include "astrognome.h" | ||||
| #include "ag-display-theme.h" | ||||
|  | ||||
| static gchar *planet_all = ".planet {\n" \ | ||||
|                            "    visibility: visible;\n" \ | ||||
|                            "}\n"; | ||||
|  | ||||
| static gchar *planet_none = ".planet {\n" \ | ||||
|                             "    visibility: hidden;\n" \ | ||||
|                             " }\n"; | ||||
|  | ||||
| static gchar *planet_tmpl = ".planet-%s {\n" \ | ||||
|                             "    visibility: %s !important;\n" \ | ||||
|                             "}\n"; | ||||
|  | ||||
| static gchar *aspect_all = ".aspect {\n" \ | ||||
|                            "    visibility: visible;\n" \ | ||||
|                            "}\n"; | ||||
|  | ||||
| static gchar *aspect_none = ".aspect {\n" \ | ||||
|                             "    visibility: hidden;\n" \ | ||||
|                             " }\n"; | ||||
|  | ||||
| static gchar *aspect_tmpl = ".aspect-%s {\n" \ | ||||
|                             "    visibility: %s !important;\n" \ | ||||
|                             "}\n"; | ||||
|  | ||||
| static gchar *antiscion_all = ".antiscion {\n" \ | ||||
|                               "    visibility: visible;\n" \ | ||||
|                               "}\n"; | ||||
|  | ||||
| static gchar *antiscion_none = ".antiscion {\n" \ | ||||
|                                "    visibility: hidden;\n" \ | ||||
|                                "}\n"; | ||||
|  | ||||
| static gchar *antiscion_tmpl = ".antiscion-%s {\n" \ | ||||
|                             "    visibility: %s !important;\n" \ | ||||
|                             "}\n"; | ||||
| static gchar *planet_rule           = ".planet-%s { visibility: hidden; }\n"; | ||||
| static gchar *aspect_type_rule      = ".aspect-%s { visibility: hidden; }\n"; | ||||
| static gchar *aspect_planet_rule    = ".aspect-p-%s { visibility: hidden; }\n"; | ||||
| static gchar *antiscion_type_rule   = ".antiscion-%s { visibility: hidden; }\n"; | ||||
| static gchar *antiscion_planet_rule = ".antiscion-p-%s { visibility: hidden; }\n"; | ||||
|  | ||||
| static AgDisplayTheme **builtin_themes = NULL; | ||||
| static gchar          *builtin_theme_name[AG_DISPLAY_THEME_COUNT] = { | ||||
| @@ -50,7 +20,10 @@ static gchar          *builtin_theme_name[AG_DISPLAY_THEME_COUNT] = { | ||||
| gchar * | ||||
| ag_display_theme_to_css(AgDisplayTheme *theme) | ||||
| { | ||||
|     GList   *i; | ||||
|     gint    i; | ||||
|     GList   *l, | ||||
|             *all_aspects, | ||||
|             *all_antiscion_axes; | ||||
|     gchar   *ret; | ||||
|     GString *css = NULL; | ||||
|  | ||||
| @@ -59,68 +32,72 @@ ag_display_theme_to_css(AgDisplayTheme *theme) | ||||
|         return g_strdup(""); | ||||
|     } | ||||
|  | ||||
|     if (theme->planets_include) { | ||||
|         css = g_string_new(planet_none); | ||||
|     } else { | ||||
|         css = g_string_new(planet_all); | ||||
|     css = g_string_sized_new(300); | ||||
|  | ||||
|     // Go through the used_planets array. If any of them is not listed | ||||
|     // by @theme, add a rule to hide it, and the respective aspects | ||||
|     // and antiscia | ||||
|     for (i = 0; i < used_planets_count; i++) { | ||||
|         gboolean in_list; | ||||
|  | ||||
|         in_list = (g_list_find(theme->planets, GINT_TO_POINTER(used_planets[i])) != NULL); | ||||
|  | ||||
|         if (theme->planets_include != in_list) { | ||||
|             const gchar *planet_name; | ||||
|  | ||||
|             planet_name = ag_planet_id_to_nick(used_planets[i]); | ||||
|  | ||||
|             g_string_append_printf(css, planet_rule, planet_name); | ||||
|             g_string_append_printf(css, aspect_planet_rule, planet_name); | ||||
|             g_string_append_printf(css, antiscion_planet_rule, planet_name); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     for (i = theme->planets; i; i = g_list_next(i)) { | ||||
|         const gchar *planet_name; | ||||
|     // Go through gswe_all_aspects(). If any of them is not listed by | ||||
|     // @theme, add a rule to hide it | ||||
|     all_aspects = gswe_all_aspects(); | ||||
|  | ||||
|         planet_name = ag_planet_id_to_nick(GPOINTER_TO_INT(i->data)); | ||||
|     for (l = all_aspects; l; l = g_list_next(l)) { | ||||
|         const gchar    *aspect_type; | ||||
|         gboolean       in_list; | ||||
|         GsweAspect     aspect; | ||||
|         GsweAspectInfo *aspect_info = l->data; | ||||
|  | ||||
|         g_string_append_printf( | ||||
|                 css, | ||||
|                 planet_tmpl, | ||||
|                 planet_name, | ||||
|                 (theme->planets_include) ? "visible" : "hidden" | ||||
|             ); | ||||
|         aspect      = gswe_aspect_info_get_aspect(aspect_info); | ||||
|         in_list     = (g_list_find(theme->aspects, GINT_TO_POINTER(aspect)) != NULL); | ||||
|         aspect_type = ag_aspect_id_to_nick(aspect); | ||||
|  | ||||
|         if (theme->aspects_include != in_list) { | ||||
|             g_string_append_printf(css, aspect_type_rule, aspect_type); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     if (theme->aspects_include) { | ||||
|         g_string_append(css, aspect_none); | ||||
|     } else { | ||||
|         g_string_append(css, aspect_all); | ||||
|     g_list_free(all_aspects); | ||||
|  | ||||
|     // Go through gswe_all_antiscion_axes(). If any of them is not | ||||
|     // listed by @theme, add a rule to hide it | ||||
|     all_antiscion_axes = gswe_all_antiscion_axes(); | ||||
|  | ||||
|     for (l = all_antiscion_axes; l; l = g_list_next(l)) { | ||||
|         const gchar           *antiscion_axis_type; | ||||
|         gboolean              in_list; | ||||
|         GsweAntiscionAxis     antiscion_axis; | ||||
|         GsweAntiscionAxisInfo *antiscion_axis_info = l->data; | ||||
|  | ||||
|         antiscion_axis      = gswe_antiscion_axis_info_get_axis(antiscion_axis_info); | ||||
|         in_list             = (g_list_find(theme->antiscia, GINT_TO_POINTER(antiscion_axis)) != NULL); | ||||
|         antiscion_axis_type = ag_antiscion_axis_id_to_nick(antiscion_axis); | ||||
|  | ||||
|         if (theme->antiscia_include != in_list) { | ||||
|             g_string_append_printf(css, antiscion_type_rule, antiscion_axis_type); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     for (i = theme->aspects; i; i = g_list_next(i)) { | ||||
|         const gchar *aspect_name; | ||||
|  | ||||
|         aspect_name = ag_aspect_id_to_nick(GPOINTER_TO_INT(i->data)); | ||||
|  | ||||
|         g_string_append_printf( | ||||
|                 css, | ||||
|                 aspect_tmpl, | ||||
|                 aspect_name, | ||||
|                 (theme->aspects_include) ? "visible" : "hidden" | ||||
|             ); | ||||
|     } | ||||
|  | ||||
|     if (theme->antiscia_include) { | ||||
|         g_string_append(css, antiscion_none); | ||||
|     } else { | ||||
|         g_string_append(css, antiscion_all); | ||||
|     } | ||||
|  | ||||
|     for (i = theme->antiscia; i; i = g_list_next(i)) { | ||||
|         const gchar *antiscion_axis_name; | ||||
|  | ||||
|         antiscion_axis_name = ag_antiscion_axis_id_to_nick( | ||||
|                 GPOINTER_TO_INT(i->data) | ||||
|             ); | ||||
|  | ||||
|         g_string_append_printf( | ||||
|                 css, | ||||
|                 antiscion_tmpl, | ||||
|                 antiscion_axis_name, | ||||
|                 (theme->antiscia_include) ? "visible" : "hidden" | ||||
|             ); | ||||
|     } | ||||
|     g_list_free(all_antiscion_axes); | ||||
|  | ||||
|     ret = g_string_free(css, FALSE); | ||||
|  | ||||
|     g_debug("%s", ret); | ||||
|     g_debug("Generated CSS:\n%s\n", ret); | ||||
|  | ||||
|     return ret; | ||||
| } | ||||
|   | ||||
| @@ -733,7 +733,7 @@ | ||||
|  | ||||
|                             <line class="aspect"> | ||||
|                                 <xsl:attribute name="id">aspect-<xsl:value-of select="$planet1"/>-<xsl:value-of select="$planet2"/></xsl:attribute> | ||||
|                                 <xsl:attribute name="class">aspect aspect-<xsl:value-of select="@type"/> aspect-<xsl:value-of select="$planet1"/> aspect-<xsl:value-of select="$planet2"/></xsl:attribute> | ||||
|                                 <xsl:attribute name="class">aspect aspect-<xsl:value-of select="@type"/> aspect-p-<xsl:value-of select="$planet1"/> aspect-p-<xsl:value-of select="$planet2"/></xsl:attribute> | ||||
|                                 <xsl:attribute name="x1"><xsl:value-of select="$x1"/></xsl:attribute> | ||||
|                                 <xsl:attribute name="y1"><xsl:value-of select="$y1"/></xsl:attribute> | ||||
|                                 <xsl:attribute name="x2"><xsl:value-of select="$x2"/></xsl:attribute> | ||||
| @@ -788,7 +788,7 @@ | ||||
|  | ||||
|                             <line class="antiscion"> | ||||
|                                 <xsl:attribute name="id">antiscion-<xsl:value-of select="$planet1"/>-<xsl:value-of select="$planet2"/></xsl:attribute> | ||||
|                                 <xsl:attribute name="class">antiscion antiscion-<xsl:value-of select="@axis"/> antiscion-<xsl:value-of select="$planet1"/> antiscion-<xsl:value-of select="$planet2"/></xsl:attribute> | ||||
|                                 <xsl:attribute name="class">antiscion antiscion-<xsl:value-of select="@axis"/> antiscion-p-<xsl:value-of select="$planet1"/> antiscion-p-<xsl:value-of select="$planet2"/></xsl:attribute> | ||||
|                                 <xsl:attribute name="x1"><xsl:value-of select="$x1"/></xsl:attribute> | ||||
|                                 <xsl:attribute name="y1"><xsl:value-of select="$y1"/></xsl:attribute> | ||||
|                                 <xsl:attribute name="x2"><xsl:value-of select="$x2"/></xsl:attribute> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user