void BRParser::tag_start(const QString &tag, const list<QString> &attrs) { if (m_bSkip) return; if (tag == "body") { m_str = ""; add_color(); return; } if (tag == "p") { return; } if (tag == "br") { m_str += "</span>\n"; add_color(); return; } m_str += "<"; m_str += tag; for (list<QString>::const_iterator it = attrs.begin(); it != attrs.end(); ++it) { QString name = *it; ++it; QString value = *it; m_str += " "; m_str += name; if (!value.isEmpty()) { m_str += "=\'"; m_str += quoteString(value); m_str += "\'"; } } m_str += ">"; }
t_color apply_refraction(t_ray *start, t_scene *scene, t_hit drawn_pixel, double noise) { double refract_indice; t_color tmp_color; int test; tmp_color = drawn_pixel.color; if (drawn_pixel.t_max == drawn_pixel.t) { refract_indice = drawn_pixel.ref_index; test = -1; } else { test = 1; refract_indice = 1.0 / drawn_pixel.ref_index; } *start = find_refract_vect(start, drawn_pixel, refract_indice, test); if (get_length(start->dir) != 0) { if (scene->is_real == CARTOON && is_black_edge(&drawn_pixel)) { tmp_color = init_color(0, 0, 0); return (tmp_color); } else tmp_color = add_color(tmp_color, color_render(scene, start, noise, NULL)); } check_color(&tmp_color); return (tmp_color); }
static char *parse_prompt_tokens(t_list *tokens) { size_t size; char *str; size_t i; size_t len; t_token *token; size = total_size(tokens); str = (char *)malloc(sizeof(char) * (size + 1)); i = 0; while (tokens) { token = get_token(&tokens); len = ft_strlen(token->lexeme); if (token->type == CHARS) ft_strncpy(str + i, token->lexeme, len); else { add_color(token, str + i, len); i += COLOR_STR_SIZE; } i += len; tokens = tokens->next; } str[i] = '\0'; return (str); }
static struct cmd_results *parse_border_color(struct border_colors *border_colors, const char *cmd_name, int argc, char **argv) { struct cmd_results *error = NULL; if (argc != 5) { return cmd_results_new(CMD_INVALID, cmd_name, "Requires exactly five color values"); } uint32_t colors[5]; int i; for (i = 0; i < 5; i++) { char buffer[10]; error = add_color(cmd_name, buffer, argv[i]); if (error) { return error; } colors[i] = strtoul(buffer+1, NULL, 16); } border_colors->border = colors[0]; border_colors->background = colors[1]; border_colors->text = colors[2]; border_colors->indicator = colors[3]; border_colors->child_border = colors[4]; return cmd_results_new(CMD_SUCCESS, NULL, NULL); }
static void store_color(int reset_flag) { /* store color pass, if any */ if( !cur_screen || !cur_pct) cur_reverse = 1; else cur_reverse = 0; #ifdef TRACE if(color_trace) p_info(PI_TRACE, "store clr= %d, plate= %d, fn= %s, ang= %3.2f, scr= %d, pct= %3.3f\n", cur_color_id,cur_plate,cur_shape,cur_angle,cur_screen,cur_pct); #endif add_color(); if (reset_flag) { cur_plate = -1; strcpy(cur_shape, "dot"); cur_angle = 45.; cur_screen = 72; cur_pct = 100.0; cur_reverse = 0; strcpy(cur_op, "false"); strcpy(cur_color_name,""); strcpy(cur_type,"process"); } } /* end store color */
void print_files_long(t_files *file, char *options, int links_column, int size_column) { ft_putchar(file->type); ft_putstr(file->permissions); ft_putchar(' '); pad_with_spaces(file, links_column, 1); ft_putnbr(file->links); ft_putchar(' '); if (!ft_strchr(options, 'g')) { ft_putstr(file->owner); ft_putchar(' '); } ft_putstr(file->group); ft_putchar(' '); print_file_size(file, size_column); ft_putchar(' '); ft_putstr(file->date); ft_putchar(' '); if (ft_strchr(options, 'G')) add_color(file); ft_putstr(file->name); ft_putstr("\033[0m"); if (file->type == 'l') print_link(file); ft_putchar('\n'); }
EditorSectorMenu::EditorSectorMenu() : sector(Editor::current()->currentsector), sector_name_ptr(sector->get_name_ptr()), original_name(*sector_name_ptr), size(sector->get_editor_size()), new_size(size) { add_label(_("Sector") + " " + sector->get_name()); add_hl(); add_textfield(_("Name"), sector_name_ptr); add_script(_("Initialization script"), sector->get_init_script_ptr()); add_color(_("Ambient light"), sector->get_ambient_light_ptr()); add_numfield(_("Gravity"), §or->gravity); std::vector<std::string> music_formats; music_formats.push_back(".ogg"); music_formats.push_back(".music"); add_file(_("Music"), §or->music, music_formats); add_hl(); add_intfield(_("Width"), &(new_size.width)); add_intfield(_("Height"), &(new_size.height)); add_entry(MNID_RESIZESECTOR, _("Resize")); add_hl(); add_back(_("OK")); }
void print_files_short(t_files *file, char *options) { if (ft_strchr(options, 'G')) add_color(file); ft_putstr(file->name); ft_putstr("\033[0m"); ft_putchar('\n'); }
static void init_pastels() { int i; /* very light colors */ for (i = 6; i >= 0; --i) add_color((i&4) ? 0xff : 0xf0, (i&2) ? 0xff : 0xf0, (i&1) ? 0xff : 0xf0, TRUE); }
static inline void save(t_image *screen, int x, int y, unsigned int rgb) { size_t pos; pos = (x) * (screen->bpp / 8) + (y) * screen->size_line; rgb = add_color(*(unsigned int*)(screen->stack + pos * sizeof(unsigned char)), rgb); *(unsigned int*)(screen->stack + pos * sizeof(unsigned char)) = rgb; }
static void handle_biggest_offenders(int testtblsize, int maxcolors) { int i, j; float dEthresh = 0; CmapEntry *pCmap; num_offenders = 0; for (pCmap = virt_cmap, i = 0; i < num_virt_cmap_entries; i++, pCmap++) { if (pCmap->nextidx < 0) { continue; } if (num_offenders == MAX_OFFENDERS && pCmap->dE < offenders[MAX_OFFENDERS-1]->dE) { continue; } find_nearest(pCmap); insert_in_list(pCmap); } if (num_offenders > 0) { dEthresh = offenders[num_offenders-1]->dE; } for (i = 0; (total < maxcolors) && (i < num_offenders); ++i) { pCmap = offenders[i]; if (!pCmap) continue; j = add_color(pCmap->red, pCmap->green, pCmap->blue, FALSE); if (j) { for (j = i+1; j < num_offenders; ++j) { float dE; pCmap = offenders[j]; if (!pCmap) { continue; } find_nearest(pCmap); dE = pCmap->dE; if (dE < dEthresh) { offenders[j] = 0; } else { if (offenders[i+1] == 0 || dE > offenders[i+1]->dE) { offenders[j] = offenders[i+1]; offenders[i+1] = pCmap; } } } } } }
void Script_Graph_Style::copy_style(const Graph ©) { m_crossing_style.from_style(copy.default_edge_style()); m_cusp_style.from_style(copy.default_node_style()); m_colors.clear(); foreach(QColor c, copy.colors()) add_color(c); emit colors_changed(); }
static void init_primaries() { int r, g, b; for (r = 0; r < 256; r += (r?128:127)) { for (g = 0; g < 256; g += (g?128:127)) { for (b = 0; b < 256; b += (b?128:127)) { if ((r == g) && (g == b)) continue; /* black or white */ add_color(r, g, b, TRUE); } } } }
Script_Graph_Style::Script_Graph_Style(const Script_Graph_Style ©) : QObject(copy.parent()), m_crossing_style(copy.m_crossing_style.style()), m_cusp_style(copy.m_cusp_style.style()) { connect(&m_crossing_style,SIGNAL(changed(Edge_Style,Edge_Style)), SLOT(emit_style_changed(Edge_Style,Edge_Style))); connect(&m_cusp_style,SIGNAL(changed(Node_Style,Node_Style)), SLOT(emit_style_changed(Node_Style,Node_Style))); foreach(Script_Color* c, copy.m_colors) add_color(*c); }
Script_Graph_Style::Script_Graph_Style(Edge_Style crossing_style, Node_Style cusp_style, QList<QColor> colors ) : m_crossing_style(crossing_style), m_cusp_style(cusp_style) { connect(&m_crossing_style,SIGNAL(changed(Edge_Style,Edge_Style)), SLOT(emit_style_changed(Edge_Style,Edge_Style))); connect(&m_cusp_style,SIGNAL(changed(Node_Style,Node_Style)), SLOT(emit_style_changed(Node_Style,Node_Style))); foreach(QColor c, colors) add_color(c); }
void BRParser::tag_end(const QString &tag) { if (m_bSkip) return; if (tag == "body") { m_bSkip = true; return; } if (tag == "p") { m_str += "</span>\n"; add_color(); return; } m_str += "</"; m_str += tag; m_str += ">"; }
struct cmd_results *cmd_client_background(int argc, char **argv) { char buffer[10]; struct cmd_results *error = NULL; uint32_t background; if (argc != 1) { return cmd_results_new(CMD_INVALID, "client.background", "Requires exactly one color value"); } error = add_color("client.background", buffer, argv[0]); if (error) { return error; } background = strtoul(buffer+1, NULL, 16); config->border_colors.background = background; return cmd_results_new(CMD_SUCCESS, NULL, NULL); }
t_color reflection(t_scene *scene, t_inter *inter, t_color pixel_color, int level) { t_color reflec; t_ray ray; if (level >= MAX_REFLEC) return (pixel_color); if (inter->obj->mat->reflec > 0) { ray.o = inter->pos; ray.dir = inter->reflect; reflec = ray_go_to_the_world_and_dont_forget_to_draw(scene, &ray, level + 1); reflec = add_color(mult_color(reflec, inter->obj->mat->reflec), mult_color(pixel_color, (1 - inter->obj->mat->reflec))); } else reflec = pixel_color; return (reflec); }
static char *a_rights(struct stat *st) { char *rights; rights = str_dup("---"); if (rights) { if (st->st_mode & S_IROTH) rights[0] = 'r'; if (st->st_mode & S_IWOTH) rights[1] = 'w'; if (st->st_mode & S_IXOTH) rights[2] = 'x'; return (str_join(add_color(rights, YELLOW), " ")); } else perror("ft_ls error: "); return (NULL); }
static char *g_rights(struct stat *st) { char *rights; rights = str_dup("---"); if (rights) { if (st->st_mode & S_IRGRP) rights[0] = 'r'; if (st->st_mode & S_IWGRP) rights[1] = 'w'; if (st->st_mode & S_IXGRP) rights[2] = 'x'; return (add_color(rights, MAGENTA)); } else perror("ft_ls error: "); return (NULL); }
static char *u_rights(struct stat *st) { char *rights; rights = str_dup("---"); if (rights) { if (st->st_mode & S_IRUSR) rights[0] = 'r'; if (st->st_mode & S_IWUSR) rights[1] = 'w'; if (st->st_mode & S_IXUSR) rights[2] = 'x'; return (add_color(rights, CYAN)); } else perror("ft_ls error: "); return (NULL); }
void draw(t_tool *t, double x, double y) { t_ray *ray; double x0; double y0; t_color *final_color; final_color = new_color(); x0 = x; while (x0 <= x + 0.5) { y0 = y; while (y0 <= y + 0.5) { ray = get_ray(t, x0, y0); add_color(final_color, draw_suite(ray, t)); y0 += 0.5; } x0 += 0.5; } div_color(final_color, 4); normalize_color(final_color); pixel_put_to_image(t, x, y, final_color); }
input_t dialog_mouse_command(MEVENT event) { Vector2i pos = abs2rel((Vector2i) { event.y, event.x }, dialog_pos), tl; bool del = FALSE; color_t i; if (cidx != CIDX_DEFAULT) { if (area_contains(left_pos, DIALOG_BUTTON_WIDTH, DIALOG_BUTTON_HEIGHT, pos)) { picked_turn = TURN_LEFT; goto exit; } if (area_contains(right_pos, DIALOG_BUTTON_WIDTH, DIALOG_BUTTON_HEIGHT, pos)) { picked_turn = TURN_RIGHT; goto exit; } } if (cidx >= 0 && area_contains(delete_pos, DIALOG_DELETE_WIDTH, DIALOG_DELETE_HEIGHT, pos)) { del = TRUE; goto exit; } for (i = 0; i < COLOR_COUNT; i++) { tl = get_dialog_tile_pos(i); if ((cidx == CIDX_DEFAULT || !color_exists(stgs.colors, i)) && area_contains(tl, DIALOG_TILE_SIZE, DIALOG_TILE_SIZE, pos)) { picked_color = i; goto exit; } } return INPUT_NO_CHANGE; exit: switch (cidx) { case CIDX_NEWCOLOR: if (picked_color != COLOR_NONE && picked_turn != TURN_NONE) { add_color(stgs.colors, picked_color, picked_turn); close_dialog(); } return INPUT_MENU_CHANGED; case CIDX_DEFAULT: assert(stgs.colors && stgs.linked_sim->colors); colors_delete(stgs.colors); stgs.colors = colors_new(picked_color); close_dialog(); return clear_simulation(); default: if (cidx < 0 || cidx >= COLOR_COUNT) { return INPUT_NO_CHANGE; } if (picked_turn != TURN_NONE) { if (picked_color != COLOR_NONE) { set_color(stgs.colors, cidx, picked_color, picked_turn); } else { set_turn(stgs.colors, cidx, picked_turn); } close_dialog(); return INPUT_MENU_CHANGED; } else if (del) { remove_color(stgs.colors, get_color_at(stgs.colors, cidx)); if (!has_enough_colors(stgs.colors)) { simulation_halt(stgs.linked_sim); } close_dialog(); } return INPUT_MENU_CHANGED; } }
BRParser::BRParser(unsigned color) { m_color = color; m_bSkip = false; add_color(); }
void MarchingCubes::create_marching_cubes_from_array(const T* scalar_field, CVector mesh_dimensions, CVector box_length, double threshold, bool larger_than) { int nx = mesh_dimensions.x; int ny = mesh_dimensions.y; int nz = mesh_dimensions.z; initialize(nx*ny*nz); num_vertices = 0; num_triangles = 0; Random *rnd = new Random(-time(NULL), 0, 0); float r = 111/255.0; float g = 133/255.0; float b = 144/255.0; // float r = rnd->next_double(); // float g = rnd->next_double(); // float b = rnd->next_double(); CIsoSurface<T> surf; surf.GenerateSurface(scalar_field,threshold,nx-1,ny-1,nz-1,box_length.x, box_length.y, box_length.z, larger_than); for(int triangle=0; triangle<surf.m_nTriangles; triangle++) { unsigned int p1_index = surf.m_piTriangleIndices[3*triangle+0]; unsigned int p2_index = surf.m_piTriangleIndices[3*triangle+1]; unsigned int p3_index = surf.m_piTriangleIndices[3*triangle+2]; CVector p1(surf.m_ppt3dVertices[p1_index][0], surf.m_ppt3dVertices[p1_index][1], surf.m_ppt3dVertices[p1_index][2]); CVector p2(surf.m_ppt3dVertices[p2_index][0], surf.m_ppt3dVertices[p2_index][1], surf.m_ppt3dVertices[p2_index][2]); CVector p3(surf.m_ppt3dVertices[p3_index][0], surf.m_ppt3dVertices[p3_index][1], surf.m_ppt3dVertices[p3_index][2]); VECTOR3D &norm1 = surf.m_pvec3dNormals[p1_index]; VECTOR3D &norm2 = surf.m_pvec3dNormals[p2_index]; VECTOR3D &norm3 = surf.m_pvec3dNormals[p3_index]; // CVector n1 = (p2 - p1).cross(p3 - p1).normalize(); // CVector n2 = (p2 - p1).cross(p3 - p1).normalize(); // CVector n3 = (p2 - p1).cross(p3 - p1).normalize(); CVector n1(norm1[0], norm1[1], norm1[2]); CVector n2(norm2[0], norm2[1], norm2[2]); CVector n3(norm3[0], norm3[1], norm3[2]); CVector color(r,g,b); // n1 = n1*(-1); // n2 = n2*(-1); // n3 = n3*(-1); add_vertex(p1); add_normal(n1); add_color(color, 1.0); add_vertex(p2); add_normal(n2); add_color(color, 1.0); add_vertex(p3); add_normal(n3); add_color(color, 1.0); continue; n1 = n1*(-1); n2 = n2*(-1); n3 = n3*(-1); p1 = p1+n1*0.01; p2 = p2+n2*0.01; p3 = p3+n3*0.01; add_vertex(p1); add_normal(n1); add_color(color, 1.0); add_vertex(p2); add_normal(n2); add_color(color, 1.0); add_vertex(p3); add_normal(n3); add_color(color, 1.0); } cout << "Marching cubes created with " << surf.m_nTriangles << " triangles." << endl; }
void read_color_scheme_file() { FILE *fp; char config_file[PATH_MAX]; char line[MAX_LEN]; char *s1 = NULL; char *s2 = NULL; char *s3 = NULL; char *sx = NULL; int args; struct stat stat_buf; snprintf(config_file, sizeof(config_file), "%s/colorschemes", cfg.config_dir); if(stat(config_file, &stat_buf) == 0) curr_stats.colorscheme_file_mtime = stat_buf.st_mtime; else curr_stats.config_file_mtime = 0; if((fp = fopen(config_file, "r")) == NULL) { load_default_colors(); cfg.color_scheme_num++; cfg.color_pairs_num = 12; return; } while(fgets(line, MAX_LEN, fp)) { args = 0; if(line[0] == '#') continue; if((sx = s1 = strchr(line, '=')) != NULL) { s1++; chomp(s1); *sx = '\0'; args = 1; } else continue; if((sx = s2 = strchr(s1, '=')) != NULL) { s2++; chomp(s2); *sx = '\0'; args = 2; } if((args == 2) && ((sx = s3 = strchr(s2, '=')) != NULL)) { s3++; chomp(s3); *sx = '\0'; args = 3; } if(args == 1) { if(!strcmp(line, "COLORSCHEME")) { //check if last colorscheme is complete and pad it before starting // a new scheme // verify_scheme(); //col_schemes = (Col_scheme *)realloc(col_schemes, // sizeof(Col_scheme *) +1); snprintf(col_schemes[cfg.color_scheme_num].name, NAME_MAX, "%s", s1); cfg.color_scheme_num++; if (cfg.color_scheme_num > 8) break; continue; } if(!strcmp(line, "DIRECTORY")) { snprintf(col_schemes[cfg.color_scheme_num - 1].dir, PATH_MAX, "%s", s1); continue; } } if(!strcmp(line, "COLOR") && args == 3) { add_color(s1, s2, s3); } } fclose(fp); //verify_color_schemes(); return; }
static void init_grays() { int i; for (i = 15; i < 255; i += 16) add_color(i, i, i, TRUE); }
void color_manager::load_default() { // Color Name Color Pair Invert add_color(def_c_black, "c_black", COLOR_PAIR(30), def_i_black ); add_color(def_c_white, "c_white", COLOR_PAIR(1) | A_BOLD, def_i_white ); add_color(def_c_ltgray, "c_ltgray", COLOR_PAIR(1), def_i_ltgray ); add_color(def_c_dkgray, "c_dkgray", COLOR_PAIR(30) | A_BOLD, def_i_dkgray ); add_color(def_c_red, "c_red", COLOR_PAIR(2), def_i_red ); add_color(def_c_green, "c_green", COLOR_PAIR(3), def_i_green ); add_color(def_c_blue, "c_blue", COLOR_PAIR(4), def_i_blue ); add_color(def_c_cyan, "c_cyan", COLOR_PAIR(5), def_i_cyan ); add_color(def_c_magenta, "c_magenta", COLOR_PAIR(6), def_i_magenta ); add_color(def_c_brown, "c_brown", COLOR_PAIR(7), def_i_brown ); add_color(def_c_ltred, "c_ltred", COLOR_PAIR(2) | A_BOLD, def_i_ltred ); add_color(def_c_ltgreen, "c_ltgreen", COLOR_PAIR(3) | A_BOLD, def_i_ltgreen ); add_color(def_c_ltblue, "c_ltblue", COLOR_PAIR(4) | A_BOLD, def_i_ltblue ); add_color(def_c_ltcyan, "c_ltcyan", COLOR_PAIR(5) | A_BOLD, def_i_ltcyan ); add_color(def_c_pink, "c_pink", COLOR_PAIR(6) | A_BOLD, def_i_pink ); add_color(def_c_yellow, "c_yellow", COLOR_PAIR(7) | A_BOLD, def_i_yellow ); add_color(def_h_black, "h_black", COLOR_PAIR(20), def_c_blue ); add_color(def_h_white, "h_white", COLOR_PAIR(15) | A_BOLD, def_c_ltblue_white ); add_color(def_h_ltgray, "h_ltgray", COLOR_PAIR(15), def_c_blue_white ); add_color(def_h_dkgray, "h_dkgray", COLOR_PAIR(20) | A_BOLD, def_c_ltblue ); add_color(def_h_red, "h_red", COLOR_PAIR(16), def_c_blue_red ); add_color(def_h_green, "h_green", COLOR_PAIR(17), def_c_blue_green ); add_color(def_h_blue, "h_blue", COLOR_PAIR(20), def_h_blue ); add_color(def_h_cyan, "h_cyan", COLOR_PAIR(19), def_c_blue_cyan ); add_color(def_h_magenta, "h_magenta", COLOR_PAIR(21), def_c_blue_magenta ); add_color(def_h_brown, "h_brown", COLOR_PAIR(22), def_c_blue_yellow ); add_color(def_h_ltred, "h_ltred", COLOR_PAIR(16) | A_BOLD, def_c_ltblue_red ); add_color(def_h_ltgreen, "h_ltgreen", COLOR_PAIR(17) | A_BOLD, def_c_ltblue_green ); add_color(def_h_ltblue, "h_ltblue", COLOR_PAIR(18) | A_BOLD, def_h_ltblue ); add_color(def_h_ltcyan, "h_ltcyan", COLOR_PAIR(19) | A_BOLD, def_c_ltblue_cyan ); add_color(def_h_pink, "h_pink", COLOR_PAIR(21) | A_BOLD, def_c_ltblue_magenta ); add_color(def_h_yellow, "h_yellow", COLOR_PAIR(22) | A_BOLD, def_c_ltblue_yellow ); add_color(def_i_black, "i_black", COLOR_PAIR(32), def_c_black ); add_color(def_i_white, "i_white", COLOR_PAIR(8) | A_BLINK, def_c_white ); add_color(def_i_ltgray, "i_ltgray", COLOR_PAIR(8), def_c_ltgray ); add_color(def_i_dkgray, "i_dkgray", COLOR_PAIR(32) | A_BLINK, def_c_dkgray ); add_color(def_i_red, "i_red", COLOR_PAIR(9), def_c_red ); add_color(def_i_green, "i_green", COLOR_PAIR(10), def_c_green ); add_color(def_i_blue, "i_blue", COLOR_PAIR(11), def_c_blue ); add_color(def_i_cyan, "i_cyan", COLOR_PAIR(12), def_c_cyan ); add_color(def_i_magenta, "i_magenta", COLOR_PAIR(13), def_c_magenta ); add_color(def_i_brown, "i_brown", COLOR_PAIR(14), def_c_brown ); add_color(def_i_ltred, "i_ltred", COLOR_PAIR(9) | A_BLINK, def_c_ltred ); add_color(def_i_ltgreen, "i_ltgreen", COLOR_PAIR(10) | A_BLINK, def_c_ltgreen ); add_color(def_i_ltblue, "i_ltblue", COLOR_PAIR(11) | A_BLINK, def_c_ltblue ); add_color(def_i_ltcyan, "i_ltcyan", COLOR_PAIR(12) | A_BLINK, def_c_ltcyan ); add_color(def_i_pink, "i_pink", COLOR_PAIR(13) | A_BLINK, def_c_pink ); add_color(def_i_yellow, "i_yellow", COLOR_PAIR(14) | A_BLINK, def_c_yellow ); add_color(def_c_white_red, "c_white_red", COLOR_PAIR(23) | A_BOLD, def_c_red_white ); add_color(def_c_ltgray_red, "c_ltgray_red", COLOR_PAIR(23), def_c_ltred_white ); add_color(def_c_dkgray_red, "c_dkgray_red", COLOR_PAIR(9), def_c_dkgray_red ); add_color(def_c_red_red, "c_red_red", COLOR_PAIR(9), def_c_red_red ); add_color(def_c_green_red, "c_green_red", COLOR_PAIR(25), def_c_red_green ); add_color(def_c_blue_red, "c_blue_red", COLOR_PAIR(26), def_h_red ); add_color(def_c_cyan_red, "c_cyan_red", COLOR_PAIR(27), def_c_red_cyan ); add_color(def_c_magenta_red, "c_magenta_red", COLOR_PAIR(28), def_c_red_magenta ); add_color(def_c_brown_red, "c_brown_red", COLOR_PAIR(29), def_c_red_yellow ); add_color(def_c_ltred_red, "c_ltred_red", COLOR_PAIR(24) | A_BOLD, def_c_red_red ); add_color(def_c_ltgreen_red, "c_ltgreen_red", COLOR_PAIR(25) | A_BOLD, def_c_ltred_green ); add_color(def_c_ltblue_red, "c_ltblue_red", COLOR_PAIR(26) | A_BOLD, def_h_ltred ); add_color(def_c_ltcyan_red, "c_ltcyan_red", COLOR_PAIR(27) | A_BOLD, def_c_ltred_cyan ); add_color(def_c_pink_red, "c_pink_red", COLOR_PAIR(28) | A_BOLD, def_c_ltred_magenta ); add_color(def_c_yellow_red, "c_yellow_red", COLOR_PAIR(29) | A_BOLD, def_c_red_yellow ); add_color(def_c_unset, "c_unset", COLOR_PAIR(31), def_c_unset ); add_color(def_c_black_white, "c_black_white", COLOR_PAIR(32), def_c_ltgray ); add_color(def_c_dkgray_white, "c_dkgray_white", COLOR_PAIR(32) | A_BOLD, def_c_white ); add_color(def_c_ltgray_white, "c_ltgray_white", COLOR_PAIR(33), def_c_ltgray_white ); add_color(def_c_white_white, "c_white_white", COLOR_PAIR(33) | A_BOLD, def_c_white_white ); add_color(def_c_red_white, "c_red_white", COLOR_PAIR(34), def_c_white_red ); add_color(def_c_ltred_white, "c_ltred_white", COLOR_PAIR(34) | A_BOLD, def_c_ltgray_red ); add_color(def_c_green_white, "c_green_white", COLOR_PAIR(35), def_c_ltgray_green ); add_color(def_c_ltgreen_white, "c_ltgreen_white", COLOR_PAIR(35) | A_BOLD, def_c_white_green ); add_color(def_c_brown_white, "c_brown_white", COLOR_PAIR(36), def_c_ltgray_yellow ); add_color(def_c_yellow_white, "c_yellow_white", COLOR_PAIR(36) | A_BOLD, def_c_white_yellow ); add_color(def_c_blue_white, "c_blue_white", COLOR_PAIR(37), def_h_ltgray ); add_color(def_c_ltblue_white, "c_ltblue_white", COLOR_PAIR(37) | A_BOLD, def_h_white ); add_color(def_c_magenta_white, "c_magenta_white", COLOR_PAIR(38), def_c_ltgray_magenta ); add_color(def_c_pink_white, "c_pink_white", COLOR_PAIR(38) | A_BOLD, def_c_white_magenta ); add_color(def_c_cyan_white, "c_cyan_white", COLOR_PAIR(39), def_c_ltgray_cyan ); add_color(def_c_ltcyan_white, "c_ltcyan_white", COLOR_PAIR(39) | A_BOLD, def_c_white_cyan ); add_color(def_c_black_green, "c_black_green", COLOR_PAIR(40), def_c_green ); add_color(def_c_dkgray_green, "c_dkgray_green", COLOR_PAIR(40) | A_BOLD, def_c_ltgreen ); add_color(def_c_ltgray_green, "c_ltgray_green", COLOR_PAIR(41), def_c_green_white ); add_color(def_c_white_green, "c_white_green", COLOR_PAIR(41) | A_BOLD, def_c_ltgreen_white ); add_color(def_c_red_green, "c_red_green", COLOR_PAIR(42), def_c_green_red ); add_color(def_c_ltred_green, "c_ltred_green", COLOR_PAIR(42) | A_BOLD, def_c_ltgreen_red ); add_color(def_c_green_green, "c_green_green", COLOR_PAIR(43), def_c_green_green ); add_color(def_c_ltgreen_green, "c_ltgreen_green", COLOR_PAIR(43) | A_BOLD, def_c_ltgreen_green ); add_color(def_c_brown_green, "c_brown_green", COLOR_PAIR(44), def_c_green_yellow ); add_color(def_c_yellow_green, "c_yellow_green", COLOR_PAIR(44) | A_BOLD, def_c_ltgreen_yellow ); add_color(def_c_blue_green, "c_blue_green", COLOR_PAIR(45), def_h_green ); add_color(def_c_ltblue_green, "c_ltblue_green", COLOR_PAIR(45) | A_BOLD, def_h_ltgreen ); add_color(def_c_magenta_green, "c_magenta_green", COLOR_PAIR(46), def_c_green_magenta ); add_color(def_c_pink_green, "c_pink_green", COLOR_PAIR(46) | A_BOLD, def_c_ltgreen_magenta ); add_color(def_c_cyan_green, "c_cyan_green", COLOR_PAIR(47), def_c_green_cyan ); add_color(def_c_ltcyan_green, "c_ltcyan_green", COLOR_PAIR(47) | A_BOLD, def_c_ltgreen_cyan ); add_color(def_c_black_yellow, "c_black_yellow", COLOR_PAIR(48), def_c_brown ); add_color(def_c_dkgray_yellow, "c_dkgray_yellow", COLOR_PAIR(48) | A_BOLD, def_c_yellow ); add_color(def_c_ltgray_yellow, "c_ltgray_yellow", COLOR_PAIR(49), def_c_brown_white ); add_color(def_c_white_yellow, "c_white_yellow", COLOR_PAIR(49) | A_BOLD, def_c_yellow_white ); add_color(def_c_red_yellow, "c_red_yellow", COLOR_PAIR(50), def_c_yellow_red ); add_color(def_c_ltred_yellow, "c_ltred_yellow", COLOR_PAIR(50) | A_BOLD, def_c_yellow_red ); add_color(def_c_green_yellow, "c_green_yellow", COLOR_PAIR(51), def_c_brown_green ); add_color(def_c_ltgreen_yellow, "c_ltgreen_yellow", COLOR_PAIR(51) | A_BOLD, def_c_yellow_green ); add_color(def_c_brown_yellow, "c_brown_yellow", COLOR_PAIR(52), def_c_brown_yellow ); add_color(def_c_yellow_yellow, "c_yellow_yellow", COLOR_PAIR(52) | A_BOLD, def_c_yellow_yellow ); add_color(def_c_blue_yellow, "c_blue_yellow", COLOR_PAIR(53), def_h_brown ); add_color(def_c_ltblue_yellow, "c_ltblue_yellow", COLOR_PAIR(53) | A_BOLD, def_h_yellow ); add_color(def_c_magenta_yellow, "c_magenta_yellow", COLOR_PAIR(54), def_c_brown_magenta ); add_color(def_c_pink_yellow, "c_pink_yellow", COLOR_PAIR(54) | A_BOLD, def_c_yellow_magenta ); add_color(def_c_cyan_yellow, "c_cyan_yellow", COLOR_PAIR(55), def_c_brown_cyan ); add_color(def_c_ltcyan_yellow, "c_ltcyan_yellow", COLOR_PAIR(55) | A_BOLD, def_c_yellow_cyan ); add_color(def_c_black_magenta, "c_black_magenta", COLOR_PAIR(56), def_c_magenta ); add_color(def_c_dkgray_magenta, "c_dkgray_magenta", COLOR_PAIR(56) | A_BOLD, def_c_pink ); add_color(def_c_ltgray_magenta, "c_ltgray_magenta", COLOR_PAIR(57), def_c_magenta_white ); add_color(def_c_white_magenta, "c_white_magenta", COLOR_PAIR(57) | A_BOLD, def_c_pink_white ); add_color(def_c_red_magenta, "c_red_magenta", COLOR_PAIR(58), def_c_magenta_red ); add_color(def_c_ltred_magenta, "c_ltred_magenta", COLOR_PAIR(58) | A_BOLD, def_c_pink_red ); add_color(def_c_green_magenta, "c_green_magenta", COLOR_PAIR(59), def_c_magenta_green ); add_color(def_c_ltgreen_magenta, "c_ltgreen_magenta", COLOR_PAIR(59) | A_BOLD, def_c_pink_green ); add_color(def_c_brown_magenta, "c_brown_magenta", COLOR_PAIR(60), def_c_magenta_yellow ); add_color(def_c_yellow_magenta, "c_yellow_magenta", COLOR_PAIR(60) | A_BOLD, def_c_pink_yellow ); add_color(def_c_blue_magenta, "c_blue_magenta", COLOR_PAIR(61), def_h_magenta ); add_color(def_c_ltblue_magenta, "c_ltblue_magenta", COLOR_PAIR(61) | A_BOLD, def_h_pink ); add_color(def_c_magenta_magenta, "c_magenta_magenta", COLOR_PAIR(62), def_c_magenta_magenta ); add_color(def_c_pink_magenta, "c_pink_magenta", COLOR_PAIR(62) | A_BOLD, def_c_pink_magenta ); add_color(def_c_cyan_magenta, "c_cyan_magenta", COLOR_PAIR(63), def_c_magenta_cyan ); add_color(def_c_ltcyan_magenta, "c_ltcyan_magenta", COLOR_PAIR(63) | A_BOLD, def_c_pink_cyan ); add_color(def_c_black_cyan, "c_black_cyan", COLOR_PAIR(64), def_c_cyan ); add_color(def_c_dkgray_cyan, "c_dkgray_cyan", COLOR_PAIR(64) | A_BOLD, def_c_ltcyan ); add_color(def_c_ltgray_cyan, "c_ltgray_cyan", COLOR_PAIR(65), def_c_cyan_white ); add_color(def_c_white_cyan, "c_white_cyan", COLOR_PAIR(65) | A_BOLD, def_c_ltcyan_white ); add_color(def_c_red_cyan, "c_red_cyan", COLOR_PAIR(66), def_c_cyan_red ); add_color(def_c_ltred_cyan, "c_ltred_cyan", COLOR_PAIR(66) | A_BOLD, def_c_ltcyan_red ); add_color(def_c_green_cyan, "c_green_cyan", COLOR_PAIR(67), def_c_cyan_green ); add_color(def_c_ltgreen_cyan, "c_ltgreen_cyan", COLOR_PAIR(67) | A_BOLD, def_c_ltcyan_green ); add_color(def_c_brown_cyan, "c_brown_cyan", COLOR_PAIR(68), def_c_cyan_yellow ); add_color(def_c_yellow_cyan, "c_yellow_cyan", COLOR_PAIR(68) | A_BOLD, def_c_ltcyan_yellow ); add_color(def_c_blue_cyan, "c_blue_cyan", COLOR_PAIR(69), def_h_cyan ); add_color(def_c_ltblue_cyan, "c_ltblue_cyan", COLOR_PAIR(69) | A_BOLD, def_h_ltcyan ); add_color(def_c_magenta_cyan, "c_magenta_cyan", COLOR_PAIR(70), def_c_cyan_magenta ); add_color(def_c_pink_cyan, "c_pink_cyan", COLOR_PAIR(70) | A_BOLD, def_c_ltcyan_magenta ); add_color(def_c_cyan_cyan, "c_cyan_cyan", COLOR_PAIR(71), def_c_cyan_cyan ); add_color(def_c_ltcyan_cyan, "c_ltcyan_cyan", COLOR_PAIR(71) | A_BOLD, def_c_ltcyan_cyan ); }
static void init_mac_palette() { add_color(255, 255, 204, TRUE); add_color(255, 255, 0, TRUE); add_color(255, 204, 153, TRUE); add_color(255, 102, 204, TRUE); add_color(255, 102, 51, TRUE); add_color(221, 0, 0, TRUE); add_color(204, 204, 255, TRUE); add_color(204, 153, 102, TRUE); add_color(153, 255, 255, TRUE); add_color(153, 153, 255, TRUE); add_color(153, 102, 153, TRUE); add_color(153, 0, 102, TRUE); add_color(102, 102, 204, TRUE); add_color(51, 255, 153, TRUE); add_color(51, 153, 102, TRUE); add_color(51, 102, 102, TRUE); add_color(51, 51, 102, TRUE); add_color(51, 0, 153, TRUE); add_color(0, 187, 0, TRUE); add_color(0, 153, 255, TRUE); add_color(0, 0, 221, TRUE); }
void img_makePalette(int cmapsize, int tablesize, int lookupsize, float lscale, float weight, int prevclrs, int doMac, unsigned char *reds, unsigned char *greens, unsigned char *blues, unsigned char *lookup) { CmapEntry *pCmap; int i, ix; #ifdef STATS double ave_dL, ave_dE; double max_dL, max_dE; #endif /* STATS */ #ifdef TIMES clock_t start, mid, tbl, end; start = clock(); #endif /* TIMES */ init_matrices(); Lscale = lscale; Weight = weight; cmapmax = cmapsize; total = 0; for (i = 0; i < prevclrs; i++) { add_color(reds[i], greens[i], blues[i], TRUE); } add_color(0, 0, 0, TRUE); add_color(255,255,255, TRUE); /* do grays next; otherwise find_nearest may break! */ init_grays(); if (doMac) { init_mac_palette(); } init_pastels(); init_primaries(); /* special case some blues */ add_color(0,0,192,TRUE); add_color(0x30,0x20,0x80,TRUE); add_color(0x20,0x60,0xc0,TRUE); init_virt_cmap(lookupsize, tablesize); while (total < cmapsize) { handle_biggest_offenders(tablesize, cmapsize); } memcpy(reds, cmap_r, cmapsize); memcpy(greens, cmap_g, cmapsize); memcpy(blues, cmap_b, cmapsize); #ifdef TIMES mid = clock(); #endif /* TIMES */ pCmap = virt_cmap; for (i = 0; i < num_virt_cmap_entries; i++, pCmap++) { if (pCmap->nextidx < 0) { continue; } if (pCmap->nextidx < total) { ix = find_nearest(pCmap); } } #ifdef TIMES tbl = clock(); #endif /* TIMES */ pCmap = virt_cmap; if (tablesize != lookupsize) { int r, g, b; for (r = 0; r < lookupsize; ++r) { for (g = 0; g < lookupsize; ++g) { for (b = 0; b < lookupsize; ++b, pCmap++) { float L, U, V; float bestd = 0; CmapEntry *pTest; if (pCmap->nextidx >= 0) { continue; } #ifdef DEBUG if (r == g && g == b) { jio_fprintf(stderr, "GRAY VALUE!?\n"); } #endif /* DEBUG */ L = pCmap->L; U = pCmap->U; V = pCmap->V; for (i = 0; i < 8; i++) { int ri, gi, bi; float d, t; ri = (i & 1) ? prevtest[r] : nexttest[r]; gi = (i & 2) ? prevtest[g] : nexttest[g]; bi = (i & 4) ? prevtest[b] : nexttest[b]; pTest = &virt_cmap[((ri * lookupsize) + gi) * lookupsize + bi]; #ifdef DEBUG if (pTest->nextidx < 0) { jio_fprintf(stderr, "OOPS!\n"); } #endif /* DEBUG */ ix = pTest->bestidx; t = Ltab[ix] - L; d = t * t * Lscale; if (i != 0 && d > bestd) continue; t = Utab[ix] - U; d += t * t; if (i != 0 && d > bestd) continue; t = Vtab[ix] - V; d += t * t; if (i != 0 && d > bestd) continue; bestd = d; pCmap->bestidx = ix; } } } } } pCmap = virt_cmap; for (i = 0; i < num_virt_cmap_entries; i++) { *lookup++ = (pCmap++)->bestidx; } #ifdef TIMES end = clock(); #endif /* TIMES */ #ifdef STATS max_dL = 0.0; max_dE = 0.0; ave_dL = 0.0; ave_dE = 0.0; pCmap = virt_cmap; for (i = 0; i < num_virt_cmap_entries; i++, pCmap++) { double t, dL, dU, dV, dE; if (pCmap->nextidx < 0) { int ix = pCmap->bestidx; dL = pCmap->L - Ltab[ix]; dL *= dL; dU = pCmap->U - Utab[ix]; dU *= dU; dV = pCmap->V - Vtab[ix]; dV *= dV; dE = dL * Lscale + dU + dV; dE = WEIGHT_DIST(dE, pCmap->L); } else { dL = pCmap->dL; dE = pCmap->dE; } if (dL > max_dL) max_dL = dL; t = UNWEIGHT_DIST(dE,dL) - dL*(Lscale-1); if (t > max_dE) max_dE = t; ave_dL += (dL > 0) ? sqrt(dL) : 0.0; ave_dE += (t > 0) ? sqrt(t) : 0.0; } jio_fprintf(stderr, "colors=%d, tablesize=%d, cubesize=%d, ", cmapsize, tablesize, lookupsize); jio_fprintf(stderr, "Lscale=%5.3f, Weight=%5.3f mac=%s\n", (double)lscale, (double)weight, doMac ? "true" : "false"); jio_fprintf(stderr, "Worst case error dL = %5.3f, dE = %5.3f\n", sqrt(max_dL), sqrt(max_dE)); jio_fprintf(stderr, "Average error dL = %5.3f, dE = %5.3f\n", ave_dL / num_virt_cmap_entries, ave_dE / num_virt_cmap_entries); #endif /* STATS */ #ifdef TIMES jio_fprintf(stderr, "%f seconds to find colors\n", (double)(mid - start) / CLOCKS_PER_SEC); jio_fprintf(stderr, "%f seconds to finish nearest colors\n", (double)(tbl - mid) / CLOCKS_PER_SEC); jio_fprintf(stderr, "%f seconds to make lookup table\n", (double)(end - tbl) / CLOCKS_PER_SEC); jio_fprintf(stderr, "%f seconds total\n", (double)(end - start) / CLOCKS_PER_SEC); #endif /* TIMES */ free(virt_cmap); virt_cmap = 0; }