diff options
Diffstat (limited to 'mixgtk')
| -rw-r--r-- | mixgtk/mixgtk_mixal.c | 65 | 
1 files changed, 48 insertions, 17 deletions
| diff --git a/mixgtk/mixgtk_mixal.c b/mixgtk/mixgtk_mixal.c index 2cfb428..21c83e9 100644 --- a/mixgtk/mixgtk_mixal.c +++ b/mixgtk/mixgtk_mixal.c @@ -1,7 +1,7 @@  /* -*-c-*- -------------- mixgtk_mixal.c :   * Implementation of the functions declared in mixgtk_mixal.h   * ------------------------------------------------------------------ - *  Last change: Time-stamp: "01/04/01 15:23:18 jose" + *  Last change: Time-stamp: "2001-04-21 23:19:05 jao"   * ------------------------------------------------------------------   * Copyright (C) 2001 Free Software Foundation, Inc.   *   @@ -31,41 +31,67 @@  static mix_vm_t *vm_;  static GtkCList *clist_; -static GdkColor sel_color_; -static GdkColor break_color_; -static GdkColor plain_color_;  static gulong lineno_; +static GdkColor colors_[3][2]; +static GdkColormap *colormap_ = NULL; +static const char* default_colors_[3][2] = { +  {"red", "black"}, +  {"lightgrey", "black"}, +  {"white", "black"} +}; -#define SEL_COLOR_ "lightgrey" -#define BREAK_COLOR_ "red" -#define PLAIN_COLOR_ "white"  static gboolean  init_color_ (GdkColor *c, const gchar *name)  { -  static GdkColormap *cmap = NULL; -  if (!cmap) cmap = gtk_widget_get_colormap (GTK_WIDGET (clist_)); +  if (!colormap_) +    colormap_ = gtk_widget_get_colormap (GTK_WIDGET (clist_));    return (gdk_color_parse (name, c) && -	  gdk_colormap_alloc_color (cmap, c, FALSE, TRUE)); +	  gdk_colormap_alloc_color (colormap_, c, FALSE, TRUE));  }  /* initialise the mixal widgets */  gboolean  mixgtk_mixal_init (mix_vm_t *vm)  { +  int i,j; +      g_return_val_if_fail (vm != NULL, FALSE);    vm_ = vm;    clist_ = GTK_CLIST (mixgtk_widget_factory_get (MIXGTK_WIDGET_MIXAL));    g_return_val_if_fail (clist_ != NULL, FALSE);    /* allocate colors */ -  g_return_val_if_fail (init_color_ (&sel_color_, SEL_COLOR_), FALSE); -  g_return_val_if_fail (init_color_ (&break_color_, BREAK_COLOR_), FALSE); -  g_return_val_if_fail (init_color_ (&plain_color_, PLAIN_COLOR_), FALSE); -   +  for (i = 0; i < 3; ++i) +    for (j = 0; j < 2; ++j) +      g_return_val_if_fail (init_color_ (&colors_[i][j], default_colors_[i][j]), +			    FALSE);    return TRUE;  } +/* set the plain, location pointer and break colors */ +void +mixgtk_mixal_set_color (mixal_line_t line, mixal_line_zone_t zone, +			guint16 color[3]) +{ +  g_return_if_fail (color != NULL); +  g_return_if_fail (line > MIXAL_LINE_PLAIN); +  g_return_if_fail (zone > MIXAL_LINE_FG); +  colors_[line][zone].red = color[0]; +  colors_[line][zone].green = color[1]; +  colors_[line][zone].blue = color[2]; +  gdk_colormap_alloc_color (colormap_, &colors_[line][zone], FALSE, TRUE); +  mixgtk_mixal_update_bp_all (); +} + +const GdkColor * +mixgtk_mixal_get_color (mixal_line_t line, mixal_line_zone_t zone) +{ +  g_return_val_if_fail (line > MIXAL_LINE_PLAIN, FALSE); +  g_return_val_if_fail (zone > MIXAL_LINE_FG, FALSE); +  return &colors_[line][zone]; +} +  /* load the corresponding mixal file */  void  mixgtk_mixal_load_file (void) @@ -125,7 +151,11 @@ reset_bg_ (gint row)    gint addr = GPOINTER_TO_INT (gtk_clist_get_row_data (clist_, row));    gboolean isset = mix_vm_has_breakpoint_at_address (vm_, addr);    gtk_clist_set_background (clist_, row, -			    isset ? &break_color_ : &plain_color_); +			    isset ? &colors_[MIXAL_LINE_BREAK][MIXAL_LINE_BG]: +			    &colors_[MIXAL_LINE_PLAIN][MIXAL_LINE_BG]); +  gtk_clist_set_foreground (clist_, row, +			    isset ? &colors_[MIXAL_LINE_BREAK][MIXAL_LINE_FG]: +			    &colors_[MIXAL_LINE_PLAIN][MIXAL_LINE_FG]);  }  static void @@ -133,7 +163,8 @@ select_row_ (gint row)  {    static gint last = -1; -  gtk_clist_set_background (clist_, row, &sel_color_); +  gtk_clist_set_background (clist_, row, &colors_[MIXAL_LINE_LOC][MIXAL_LINE_BG]); +  gtk_clist_set_foreground (clist_, row, &colors_[MIXAL_LINE_LOC][MIXAL_LINE_FG]);    if (gtk_clist_row_is_visible (clist_, row) != GTK_VISIBILITY_FULL)      gtk_clist_moveto (clist_, row, 0, 0.25, 0);    if (last != -1 && last != row) reset_bg_ (last); @@ -202,7 +233,7 @@ on_mixal_select_row (GtkWidget *w, gint row, gint col, GdkEventButton *e,    gtk_clist_unselect_row (clist_, row, col);    addr = GPOINTER_TO_INT (gtk_clist_get_row_data (clist_, row));    pc = mix_vm_get_prog_count (vm_); -  if (addr < MIX_VM_CELL_NO && addr != pc) +  if (addr < MIX_VM_CELL_NO)      {        isset = mix_vm_has_breakpoint_at_address (vm_, addr);        if (isset) | 
