void ol_backend_gamma_relative_rgb(struct ol_backend_gamma_s* self, int gamma_ramp_size, struct ol_color_s color, struct ol_gamma_s gamma) { ol_color_channel_t redc = 0; ol_color_channel_t greenc = 0; ol_color_channel_t bluec = 0; unsigned int color_div; for (int j = 0; j < gamma_ramp_size; j++) { #define do_color(col) \ { \ color_div = ((int)col##c); \ gamma.col[j] = OL_BACKEND_DATA()->col[color_div]; \ } do_color(red); do_color(green); do_color(blue); redc += color.red; greenc += color.green; bluec += color.blue; } }
int key_colors(int key, t_app *app) { if (key == 20) { if (!app->maj) app->scene.cur_obj->obj_color++; else app->scene.cur_obj->obj_color--; if (app->scene.cur_obj->obj_color < 0) app->scene.cur_obj->obj_color = 9; else if (app->scene.cur_obj->obj_color >= 10) app->scene.cur_obj->obj_color = 0; do_color(app, app->scene.cur_obj); render(app); return (1); } return (0); }
static int unit_spheremonics (ModeInfo *mi, int resolution, Bool wire, int *m, XColor *colors) { spheremonics_configuration *cc = &ccs[MI_SCREEN(mi)]; int polys = 0; int i, j; double du, dv; XYZ q[4]; XYZ n[4]; int res = (wire == 2 ? resolution / 2 : resolution); cc->bbox[0].x = cc->bbox[0].y = cc->bbox[0].z = 0; cc->bbox[1].x = cc->bbox[1].y = cc->bbox[1].z = 0; du = (M_PI+M_PI) / (double)res; /* Theta */ dv = M_PI / (double)res; /* Phi */ if (wire) glColor3f (1, 1, 1); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); for (i = 0; i < res; i++) { double u = i * du; for (j = 0; j < res; j++) { double v = j * dv; q[0] = sphere_eval (u, v, m); n[0] = calc_normal(q[0], sphere_eval (u+du/10, v, m), sphere_eval (u, v+dv/10, m)); glNormal3f(n[0].x,n[0].y,n[0].z); if (!wire) do_color (i, colors); glVertex3f(q[0].x,q[0].y,q[0].z); q[1] = sphere_eval (u+du, v, m); n[1] = calc_normal(q[1], sphere_eval (u+du+du/10, v, m), sphere_eval (u+du, v+dv/10, m)); glNormal3f(n[1].x,n[1].y,n[1].z); if (!wire) do_color ((i+1)%res, colors); glVertex3f(q[1].x,q[1].y,q[1].z); q[2] = sphere_eval (u+du, v+dv, m); n[2] = calc_normal(q[2], sphere_eval (u+du+du/10, v+dv, m), sphere_eval (u+du, v+dv+dv/10, m)); glNormal3f(n[2].x,n[2].y,n[2].z); if (!wire) do_color ((i+1)%res, colors); glVertex3f(q[2].x,q[2].y,q[2].z); q[3] = sphere_eval (u,v+dv, m); n[3] = calc_normal(q[3], sphere_eval (u+du/10, v+dv, m), sphere_eval (u, v+dv+dv/10, m)); glNormal3f(n[3].x,n[3].y,n[3].z); if (!wire) do_color (i, colors); glVertex3f(q[3].x,q[3].y,q[3].z); polys++; # define CHECK_BBOX(N) \ if (q[(N)].x < cc->bbox[0].x) cc->bbox[0].x = q[(N)].x; \ if (q[(N)].y < cc->bbox[0].y) cc->bbox[0].y = q[(N)].y; \ if (q[(N)].z < cc->bbox[0].z) cc->bbox[0].z = q[(N)].z; \ if (q[(N)].x > cc->bbox[1].x) cc->bbox[1].x = q[(N)].x; \ if (q[(N)].y > cc->bbox[1].y) cc->bbox[1].y = q[(N)].y; \ if (q[(N)].z > cc->bbox[1].z) cc->bbox[1].z = q[(N)].z CHECK_BBOX(0); CHECK_BBOX(1); CHECK_BBOX(2); CHECK_BBOX(3); # undef CHECK_BBOX } } glEnd(); { GLfloat w = cc->bbox[1].x - cc->bbox[0].x; GLfloat h = cc->bbox[1].y - cc->bbox[0].y; GLfloat d = cc->bbox[1].z - cc->bbox[0].z; GLfloat wh = (w > h ? w : h); GLfloat hd = (h > d ? h : d); GLfloat scale = (wh > hd ? wh : hd); cc->scale = 1/scale; if (wire < 2 && (do_bbox || do_grid)) { GLfloat s = scale * 1.5; glPushMatrix(); glScalef(s, s, s); draw_bounding_box (mi); glPopMatrix(); } } return polys; }
static void add_resource_to_menu (Widget menu, Resource * node, XtCallbackProc callback) { int i, j; char *v; Widget sub, btn; Resource *r; for (i = 0; i < node->c; i++) switch (resource_type (node->v[i])) { case 101: /* named subnode */ n = 0; stdarg (XmNtearOffModel, XmTEAR_OFF_ENABLED); sub = XmCreatePulldownMenu (menu, node->v[i].name, args, n); XtSetValues (sub, args, n); n = 0; stdarg (XmNsubMenuId, sub); btn = XmCreateCascadeButton (menu, node->v[i].name, args, n); XtManageChild (btn); add_resource_to_menu (sub, node->v[i].subres, callback); break; case 1: /* unnamed subres */ n = 0; #if 0 if ((v = resource_value (node->v[i].subres, "fg"))) { do_color (v, XmNforeground); } if ((v = resource_value (node->v[i].subres, "bg"))) { do_color (v, XmNbackground); } if ((v = resource_value (node->v[i].subres, "font"))) { XFontStruct *fs = XLoadQueryFont (display, v); if (fs) { XmFontList fl = XmFontListCreate (fs, XmSTRING_DEFAULT_CHARSET); stdarg (XmNfontList, fl); } } #endif if ((v = resource_value (node->v[i].subres, "m"))) { stdarg (XmNmnemonic, v); } if ((r = resource_subres (node->v[i].subres, "a"))) { XmString as = XmStringCreateLocalized (r->v[0].value); stdarg (XmNacceleratorText, as); //stdarg(XmNaccelerator, r->v[1].value); note_accelerator (r->v[1].value, node->v[i].subres); } v = "button"; for (j = 0; j < node->v[i].subres->c; j++) if (resource_type (node->v[i].subres->v[j]) == 10) { v = node->v[i].subres->v[j].value; break; } stdarg (XmNlabelString, XmStringCreateLocalized (v)); if (node->v[i].subres->flags & FLAG_S) { int nn = n; stdarg (XmNtearOffModel, XmTEAR_OFF_ENABLED); sub = XmCreatePulldownMenu (menu, v, args + nn, n - nn); n = nn; stdarg (XmNsubMenuId, sub); btn = XmCreateCascadeButton (menu, "menubutton", args, n); XtManageChild (btn); add_resource_to_menu (sub, node->v[i].subres, callback); } else { Resource *radio = resource_subres (node->v[i].subres, "radio"); char *checked = resource_value (node->v[i].subres, "checked"); char *label = resource_value (node->v[i].subres, "sensitive"); if (radio) { ToggleItem *ti = (ToggleItem *) malloc (sizeof (ToggleItem)); ti->next = toggle_items; ti->group = radio->v[0].value; ti->item = radio->v[1].value; ti->callback = callback; ti->node = node->v[i].subres; toggle_items = ti; if (resource_value (node->v[i].subres, "set")) { stdarg (XmNset, True); } stdarg (XmNindicatorType, XmONE_OF_MANY); btn = XmCreateToggleButton (menu, "menubutton", args, n); ti->w = btn; XtAddCallback (btn, XmNvalueChangedCallback, (XtCallbackProc) radio_callback, (XtPointer) ti); } else if (checked) { if (strchr (checked, ',')) stdarg (XmNindicatorType, XmONE_OF_MANY); else stdarg (XmNindicatorType, XmN_OF_MANY); btn = XmCreateToggleButton (menu, "menubutton", args, n); XtAddCallback (btn, XmNvalueChangedCallback, callback, (XtPointer) node->v[i].subres); } else if (label && strcmp (label, "false") == 0) { stdarg (XmNalignment, XmALIGNMENT_BEGINNING); btn = XmCreateLabel (menu, "menulabel", args, n); } else { btn = XmCreatePushButton (menu, "menubutton", args, n); XtAddCallback (btn, XmNactivateCallback, callback, (XtPointer) node->v[i].subres); } for (j = 0; j < node->v[i].subres->c; j++) switch (resource_type (node->v[i].subres->v[j])) { case 110: /* named value = X resource */ { char *n = node->v[i].subres->v[j].name; if (strcmp (n, "fg") == 0) n = "foreground"; if (strcmp (n, "bg") == 0) n = "background"; if (strcmp (n, "m") == 0 || strcmp (n, "a") == 0 || strcmp (n, "sensitive") == 0) break; if (strcmp (n, "checked") == 0) { note_widget_flag (btn, XmNset, node->v[i].subres->v[j].value); break; } if (strcmp (n, "active") == 0) { note_widget_flag (btn, XmNsensitive, node->v[i].subres->v[j].value); break; } XtVaSetValues (btn, XtVaTypedArg, n, XtRString, node->v[i].subres->v[j].value, strlen (node->v[i].subres->v[j].value) + 1, NULL); } break; } XtManageChild (btn); } break; case 10: /* unnamed value */ n = 0; if (node->v[i].value[0] == '@') { if (strcmp (node->v[i].value, "@layerview") == 0) insert_layerview_buttons (menu); if (strcmp (node->v[i].value, "@layerpick") == 0) insert_layerpick_buttons (menu); if (strcmp (node->v[i].value, "@routestyles") == 0) lesstif_insert_style_buttons (menu); } else if (strcmp (node->v[i].value, "-") == 0) { btn = XmCreateSeparator (menu, "sep", args, n); XtManageChild (btn); } else if (i > 0) { btn = XmCreatePushButton (menu, node->v[i].value, args, n); XtManageChild (btn); } break; } }