Fixed colortable

This commit is contained in:
Jesse van den Kieboom 2005-12-23 16:10:53 +00:00
parent 2b76716bee
commit 823b87abcd
2 changed files with 130 additions and 104 deletions

View File

@ -41,7 +41,6 @@ static const GmColorTableSchemeItem scheme_default[] = {
{"fg_cyan_h", "#86EEFFFFFFFF"},
{"fg_white_h", "#807D74"},
//{"bg_default", "#EAE8E3"},
{"bg_default", "#FFFFFF"},
{"bg_black", "#000000"},
{"bg_red", "#663822"},
@ -176,93 +175,11 @@ gm_color_table_item_free(gpointer item) {
g_free(i);
}
void
gm_color_table_load_scheme(GmColorTable *table,
GmColorTableScheme scheme) {
int i = 0;
const GmColorTableSchemeItem *values = scheme_names[scheme].values;
while (values[i].name != NULL) {
gm_color_table_set(table, values[i].name, values[i].hex);
++i;
}
table->priv->scheme = scheme;
}
void
gm_color_table_initialize(GmColorTable *table) {
gm_color_table_set_font_description(table, "Monospace 10");
gm_color_table_load_scheme(table, SCHEME_DEFAULT);
}
void
gm_color_table_fill_from_options(GmColorTable *table) {
unsigned int i;
const gchar *value;
GmOptions *options = table->priv->options;
// New, color schemes
value = gm_options_get(options, "color_scheme");
if (value == NULL || strcmp(value, "user") == 0) {
for (i = 0; i < sizeof(ansi_colors) / sizeof(ansinamepair); i++) {
value = gm_options_get(options, ansi_colors[i].name);
if (value != NULL) {
gm_color_table_set(table, ansi_colors[i].name, value);
}
}
} else {
gm_color_table_set_from_scheme_name(table, value);
}
value = gm_options_get(options, "font_family");
if (value && *value != '\0') {
gm_color_table_set_font_description(table, value);
} else {
gm_options_set(options, "font_family", "Monospace 10");
}
}
/* Public functions */
GmColorTable *
gm_color_table_new(void) {
GmColorTable *table = GM_COLOR_TABLE(g_object_new(GM_TYPE_COLOR_TABLE, NULL));
gm_color_table_load_scheme(table, SCHEME_DEFAULT);
return table;
}
GmColorTable *
gm_color_table_new_from_options(gchar *filename) {
GmColorTable *table = GM_COLOR_TABLE(g_object_new(GM_TYPE_COLOR_TABLE, NULL));
table->priv->options = gm_options_new();
gm_options_set(table->priv->options, "color_scheme", "default");
gm_options_load(table->priv->options, filename);
gm_color_table_fill_from_options(table);
return table;
}
void gm_color_table_save(GmColorTable *table) {
if (table->priv->options) {
gm_options_save(table->priv->options);
}
}
void
gm_color_table_set(GmColorTable *table, const gchar *name, const gchar *hex) {
void
gm_color_table_set_value(GmColorTable *table, gchar const *name,
gchar const *hex) {
GmColorTableItem *item;
item = g_hash_table_lookup(table->priv->colors, name);
if (table->priv->scheme == SCHEME_USER) {
gm_options_set(table->priv->options, name, hex);
}
item = g_hash_table_lookup(table->priv->colors, name);
if (!item) {
item = g_new0(GmColorTableItem, 1);
@ -278,8 +195,112 @@ gm_color_table_set(GmColorTable *table, const gchar *name, const gchar *hex) {
}
}
void
gm_color_table_load_scheme(GmColorTable *table,
GmColorTableScheme scheme) {
guint i = 0;
GmColorTableSchemeItem const *values;
GmOptions *options = table->priv->options;
gchar const *value;
if (scheme == SCHEME_USER) {
for (i = 0; i < sizeof(ansi_colors) / sizeof(ansinamepair); ++i) {
value = gm_options_get(options, ansi_colors[i].name);
if (value != NULL) {
gm_color_table_set_value(table, ansi_colors[i].name, value);
}
}
} else {
values = scheme_names[scheme].values;
while (values[i].name != NULL) {
gm_color_table_set_value(table, values[i].name, values[i].hex);
++i;
}
}
table->priv->scheme = scheme;
}
void
gm_color_table_initialize(GmColorTable *table) {
gm_color_table_set_font_description(table, "Monospace 10");
gm_color_table_load_scheme(table, SCHEME_DEFAULT);
}
void
gm_color_table_fill_from_options(GmColorTable *table) {
gchar const *value;
GmOptions *options = table->priv->options;
// New, color schemes
value = gm_options_get(options, "color_scheme");
gm_color_table_set_from_scheme_name(table, gm_options_get(options,
"color_scheme"));
value = gm_options_get(options, "font_family");
if (value && *value != '\0') {
gm_color_table_set_font_description(table, value);
} else {
gm_options_set(options, "font_family", "Monospace 10");
}
}
/* Public functions */
GmColorTable *
gm_color_table_new(void) {
GmColorTable *table = GM_COLOR_TABLE(g_object_new(GM_TYPE_COLOR_TABLE,
NULL));
gm_color_table_load_scheme(table, SCHEME_DEFAULT);
return table;
}
GmColorTable *
gm_color_table_new_from_options(gchar *filename) {
GmColorTable *table = GM_COLOR_TABLE(g_object_new(GM_TYPE_COLOR_TABLE,
NULL));
table->priv->options = gm_options_new();
gm_options_set(table->priv->options, "color_scheme", "default");
gm_options_load(table->priv->options, filename);
gm_color_table_fill_from_options(table);
return table;
}
void
gm_color_table_save(GmColorTable *table) {
if (table->priv->options) {
gm_options_save(table->priv->options);
}
}
void
gm_color_table_set(GmColorTable *table, gchar const *name, gchar const *hex) {
GmColorTableSchemeItem const *item;
GmColorTableItem *it;
if (table->priv->scheme != SCHEME_USER) {
table->priv->scheme = SCHEME_USER;
// Store all current values in the options
for (item = scheme_default; item->name != NULL; ++item) {
it = g_hash_table_lookup(table->priv->colors, item->name);
gm_options_set(table->priv->options, item->name, it->hex);
}
}
// Store value in the options, set value in the table
gm_options_set(table->priv->options, name, hex);
gm_color_table_set_value(table, name, hex);
}
gboolean
gm_color_table_get(GmColorTable *table, const gchar *name, GdkColor *color) {
gm_color_table_get(GmColorTable *table, gchar const *name, GdkColor *color) {
GmColorTableItem *item;
item = g_hash_table_lookup(table->priv->colors, name);
@ -307,7 +328,7 @@ gm_color_table_get_hex(GmColorTable *table, const gchar *name) {
void
gm_color_table_set_font_description(GmColorTable *table,
const gchar *font_description) {
gchar const *font_description) {
const gchar *fd;
if (font_description == NULL) {
@ -335,12 +356,11 @@ gm_color_table_font_description(GmColorTable *table) {
}
void
gm_color_table_set_from_scheme_name(GmColorTable *table, const gchar *scheme) {
gm_color_table_set_from_scheme_name(GmColorTable *table, gchar const *scheme) {
int i = 0;
while (scheme_names[i].name != NULL) {
if (strcasecmp(scheme_names[i].name, scheme) == 0 &&
scheme_names[i].values != NULL) {
if (strcasecmp(scheme_names[i].name, scheme) == 0) {
gm_color_table_load_scheme(table, scheme_names[i].scheme);
break;
}

View File

@ -10,12 +10,18 @@ G_BEGIN_DECLS
* Type checking and casting macros
*/
#define GM_TYPE_COLOR_TABLE (gm_color_table_get_type())
#define GM_COLOR_TABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GM_TYPE_COLOR_TABLE, GmColorTable))
#define GM_COLOR_TABLE_CONST(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GM_TYPE_COLOR_TABLE, GmColorTable const))
#define GM_COLOR_TABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GM_TYPE_COLOR_TABLE, GmColorTableClass))
#define GM_IS_COLOR_TABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GM_TYPE_COLOR_TABLE))
#define GM_IS_COLOR_TABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GM_TYPE_COLOR_TABLE))
#define GM_COLOR_TABLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GM_TYPE_COLOR_TABLE, GmColorTableClass))
#define GM_COLOR_TABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \
GM_TYPE_COLOR_TABLE, GmColorTable))
#define GM_COLOR_TABLE_CONST(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \
GM_TYPE_COLOR_TABLE, GmColorTable const))
#define GM_COLOR_TABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), \
GM_TYPE_COLOR_TABLE, GmColorTableClass))
#define GM_IS_COLOR_TABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
GM_TYPE_COLOR_TABLE))
#define GM_IS_COLOR_TABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \
GM_TYPE_COLOR_TABLE))
#define GM_COLOR_TABLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), \
GM_TYPE_COLOR_TABLE, GmColorTableClass))
/* Private structure type */
typedef struct _GmColorTablePrivate GmColorTablePrivate;
@ -58,20 +64,20 @@ GmColorTable *gm_color_table_new(void);
GmColorTable *gm_color_table_new_from_options(gchar *filename);
void gm_color_table_save(GmColorTable *table);
void gm_color_table_set(GmColorTable *table, const gchar *name,
const gchar *hex);
gboolean gm_color_table_get(GmColorTable *table, const gchar *name,
void gm_color_table_set(GmColorTable *table, gchar const *name,
gchar const *hex);
gboolean gm_color_table_get(GmColorTable *table, gchar const *name,
GdkColor *color);
const gchar *gm_color_table_get_hex(GmColorTable *table, const gchar *name);
const gchar *gm_color_table_get_hex(GmColorTable *table, gchar const *name);
void gm_color_table_set_font_description(GmColorTable *table,
const gchar *font_description);
gchar const *font_description);
const gchar *gm_color_table_font_description(GmColorTable *table);
void gm_color_table_load_scheme(GmColorTable *table,
GmColorTableScheme scheme);
void gm_color_table_set_from_scheme_name(GmColorTable *table,
const gchar *name);
gchar const *name);
void gm_color_table_set_from_options(GmColorTable *table, GmOptions *options);
G_END_DECLS