pike.git
/
src
/
modules
/
Image
/
colors.c
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/src/modules/Image/colors.c:1:
/* || This file is part of Pike. For copyright information see COPYRIGHT. || Pike is distributed under GPL, LGPL and MPL. See the file COPYING || for more information.
-
|| $Id$
+
*/ /* **! module Image **! submodule Color **! **! This module keeps names and easy handling **! for easy color support. It gives you an easy **! way to get colors from names. **!
pike.git/src/modules/Image/colors.c:135:
**! **! array orig=({Color.black,Color.red,Color.green,Color.yellow, **! Color.blue,Color.violet,Color.cyan,Color.white}); **! cs-=orig; **! cs-=({Color.pikegreen,Color.avantgardepikegreen,Color.roxenorange, **! Color.pikeblue}); // Lame sort of easter egg. **! **! array grey=Array.filter(cs,lambda(object c) { return c->s==0; }); **! array colored=cs-grey; **!
+
**! sort(grey->name(), grey);
**! sort(grey->v,grey);
-
+
**! sort(colored->name(), colored);
**! sort(Array.map(colored,lambda(object c) **! { **! return (c->h*50-c->s)*10+c->v; **! }),colored); **! **! Array.map(({orig}),color_info); **! // write("\240"); **! Array.map(({grey}),color_info); **! // write("\240"); **! Array.map(colored/8.0,color_info);
pike.git/src/modules/Image/colors.c:196:
#include <math.h> #include "stralloc.h" #include "pike_macros.h" #include "object.h" #include "interpret.h" #include "svalue.h" #include "array.h" #include "mapping.h" #include "builtin_functions.h"
-
#include "dmalloc.h"
+
#include "operators.h" #include "module_support.h" #include "sscanf.h" #include "program_id.h"
-
+
#include "pike_types.h"
#include "image.h" #include "colortable.h" #define sp Pike_sp static struct mapping *colors=NULL; static struct object *colortable=NULL; static struct array *colornames=NULL; struct program *image_color_program=NULL; extern struct program *image_colortable_program;
-
static struct pike_string *str_array;
-
static struct pike_string *str_string;
-
static struct pike_string *str_int;
+
static struct pike_string *str_r; static struct pike_string *str_g; static struct pike_string *str_b; static struct pike_string *str_h; static struct pike_string *str_s; static struct pike_string *str_v; static struct pike_string *no_name; /* forward */
pike.git/src/modules/Image/colors.c:276:
for (i=0; (size_t)i<sizeof(html_color)/sizeof(html_color[0]); i++) html_color[i].pname=make_shared_string(html_color[i].name); for (i=0;i<n;i++) { struct color_struct *cs; push_text(c[i].name); copy_shared_string(c[i].pname,sp[-1].u.string); push_object(clone_object(image_color_program,0));
-
cs=
(struct color_struct*)
-
get_storage(sp[-1].u.object,image_color_program);
+
cs=get_storage(sp[-1].u.object,image_color_program);
cs->rgb.r=(COLORTYPE)c[i].r; cs->rgb.g=(COLORTYPE)c[i].g; cs->rgb.b=(COLORTYPE)c[i].b; RGB_TO_RGBL(cs->rgbl,cs->rgb); copy_shared_string(cs->name,c[i].pname); } f_aggregate_mapping(n*2); colors=sp[-1].u.mapping; sp--; dmalloc_touch_svalue(sp);
pike.git/src/modules/Image/colors.c:323:
sp--; dmalloc_touch_svalue(sp); } #ifdef THIS #undef THIS /* Needed for NT */ #endif #define THIS ((struct color_struct*)(Pike_fp->current_storage)) #define THISOBJ (Pike_fp->current_object)
-
static void init_color_struct(struct object *dummy)
+
static void init_color_struct(struct object *
UNUSED(
dummy)
)
{ THIS->rgb.r=THIS->rgb.g=THIS->rgb.b=0; THIS->name=NULL; }
-
static void exit_color_struct(struct object *dummy)
+
static void exit_color_struct(struct object *
UNUSED(
dummy)
)
{ if (THIS->name) { free_string(THIS->name); THIS->name=NULL; } } void _img_nct_map_to_flat_cubicles(rgb_group *s, rgb_group *d,
pike.git/src/modules/Image/colors.c:453:
{ INT_TYPE r,g,b; if (args==0) { r=87; g=127; b=41; } else {
-
get_all_args("
Image.Color.Color->
greylevel
()
",args,"%i%i%i",&r,&g,&b);
+
get_all_args("greylevel",args,"%i%i%i",&r,&g,&b);
} pop_n_elems(args); if (r+g+b==0) r=g=b=1; push_int((r*THIS->rgb.r+g*THIS->rgb.g+b*THIS->rgb.b)/(r+g+b)); } #define MAX3(X,Y,Z) MAXIMUM(MAXIMUM(X,Y),Z) #define MIN3(X,Y,Z) MINIMUM(MINIMUM(X,Y),Z) static void image_color_hsvf(INT32 args)
pike.git/src/modules/Image/colors.c:502:
Pike_error("internal error, max==0.0\n"); delta = max-min; if(r==max) h = (g-b)/delta; else if(g==max) h = 2+(b-r)/delta; else /*if(b==max)*/ h = 4+(r-g)/delta; h *= 60; /* now in degrees. */ if(h<0) h+=360;
-
push_float(
DO_NOT_WARN
(
(
FLOAT_TYPE)h)
)
;
-
push_float(
DO_NOT_WARN
(
(
FLOAT_TYPE)s)
)
;
-
push_float(
DO_NOT_WARN
(
(
FLOAT_TYPE)v)
)
;
+
push_float((FLOAT_TYPE)h);
+
push_float((FLOAT_TYPE)s);
+
push_float((FLOAT_TYPE)v);
f_aggregate(3); } static void image_color_hsv(INT32 args) { double h,s,v; image_color_hsvf(args); h=sp[-1].u.array->item[0].u.float_number; s=sp[-1].u.array->item[1].u.float_number; v=sp[-1].u.array->item[2].u.float_number;
pike.git/src/modules/Image/colors.c:539:
r=COLORL_TO_FLOAT(THIS->rgbl.r); g=COLORL_TO_FLOAT(THIS->rgbl.g); b=COLORL_TO_FLOAT(THIS->rgbl.b); k=1.0-MAX3(r,g,b); c=1.0-r-k; m=1.0-g-k; y=1.0-b-k;
-
push_float(
DO_NOT_WARN
(
(
FLOAT_TYPE)(c*100.0))
)
;
-
push_float(
DO_NOT_WARN
(
(
FLOAT_TYPE)(m*100.0))
)
;
-
push_float(
DO_NOT_WARN
(
(
FLOAT_TYPE)(y*100.0))
)
;
-
push_float(
DO_NOT_WARN
(
(
FLOAT_TYPE)(k*100.0))
)
;
+
push_float((FLOAT_TYPE)(c*100.0));
+
push_float((FLOAT_TYPE)(m*100.0));
+
push_float((FLOAT_TYPE)(y*100.0));
+
push_float((FLOAT_TYPE)(k*100.0));
f_aggregate(4); } /* **! method object grey() **! method object grey(int red,int green,int blue) **! Gives a new color, containing a grey color, **! which is calculated by the <ref>greylevel</ref> method. **! returns a new <ref>Image.Color.Color</ref> object **! see also: greylevel
pike.git/src/modules/Image/colors.c:652:
**! returns a new <ref>Image.Color.Color</ref> object **! see also: rgb, hsv, Image.Color */ static void image_color_hex(INT32 args) { char buf[80]; INT_TYPE i=sizeof(COLORTYPE)*2; if (args)
-
get_all_args("
Image.Color.Color->
hex
()
",args,"%i",&i);
+
get_all_args("hex",args,"%i",&i);
pop_n_elems(args); if (i<1) {
-
push_
constant
_text("#"); /* stupid */
+
push_
static
_text("#"); /* stupid */
return; } else if (i!=sizeof(COLORTYPE)*2) { ptrdiff_t sh; if (i>8) i=8; sh=4*(sizeof(COLORTYPE)*2-i); if (sh>0) sprintf(buf,"#%0*x%0*x%0*x",
pike.git/src/modules/Image/colors.c:753:
**! and blue (equal to <tt>-><ref>rgb</ref>()</tt>), or **! to a string, giving the name (equal to <tt>-><ref>name</ref>()</tt>). **! returns the name as string or rgb as array **! see also: rgb, name */ static void image_color_cast(INT32 args) { if (args!=1 || TYPEOF(sp[-1]) != T_STRING)
-
bad_arg_error("
Image.Color.Color->
cast",sp-args,args,0,"",sp-args,
-
"Bad arguments to
Image.Color.Color->
cast
()
\n");
+
bad_arg_error("cast",sp-args,args,0,"",sp-args,
+
"Bad arguments to
cast
.\n");
-
if (sp[-1].u.string==
str
_array)
+
if (sp[-1].u.string==
literal
_array
_string
)
{ image_color_rgb(args); return; }
-
if (sp[-1].u.string==
str
_string)
+
if (sp[-1].u.string==
literal
_string
_string
)
{ image_color_name(args); return; }
-
if (sp[-1].u.string==
str
_int)
+
if (sp[-1].u.string==
literal
_int
_string
)
{ pop_stack(); push_int( (THIS->rgb.r << 8 | THIS->rgb.g) << 8 | THIS->rgb.b ); return; }
-
Pike
_
error
(
"Image.Color.Color->cast(
)
:
Can't
cast
to that\n"
);
+
pop
_
stack
()
;
+
push_undefined(
);
} static void image_color__sprintf(INT32 args) { int prec,x; if (args<2) SIMPLE_TOO_FEW_ARGS_ERROR("_sprintf",2); if (TYPEOF(sp[-args]) != T_INT)
-
SIMPLE_BAD_ARG_ERROR("_sprintf",0,"
integer
");
+
SIMPLE_BAD_ARG_ERROR("_sprintf",0,"
int
");
if (TYPEOF(sp[1-args]) != T_MAPPING) SIMPLE_BAD_ARG_ERROR("_sprintf",1,"mapping"); pop_n_elems(args-2);
-
push_text("precision");
+
push_
static_
text("precision");
f_index(2); if (TYPEOF(sp[-1]) != T_INT) SIMPLE_BAD_ARG_ERROR("_sprintf",1,"mapping(\"precision\":int)"); prec=sp[-1].u.integer; x=sp[-2].u.integer; pop_n_elems(2); switch (x) { /* case 'c': */ /* case 'd': */ case 't':
-
push_
constant
_text("Image.Color.Color");
+
push_
static
_text("Image.Color.Color");
return; case 'O': if (!THIS->name) try_find_name(THIS); if (THIS->name==no_name) {
-
push_
constant
_text("Image.Color(\"");
+
push_
static
_text("Image.Color(\"");
if (prec) { push_int(prec); image_color_hex(1); } else image_color_hex(0);
-
push_
constant
_text("\")");
+
push_
static
_text("\")");
f_add(3); return; } else {
-
push_
constant
_text("Image.Color.");
+
push_
static
_text("Image.Color.");
ref_push_string(THIS->name); f_add(2); return; } break; case 's': if (prec) { push_int(prec); image_color_name(1);
pike.git/src/modules/Image/colors.c:946:
*/ static void image_color_equal(INT32 args) { if (args!=1) Pike_error("Image.Color.Color->`==: illegal number of arguments\n"); if (TYPEOF(sp[-1]) == T_OBJECT) { struct color_struct *other;
-
other=
(struct color_struct*)
-
get_storage(sp[-1].u.object,image_color_program);
+
other=get_storage(sp[-1].u.object,image_color_program);
if (other&& other->rgbl.r==THIS->rgbl.r && other->rgbl.g==THIS->rgbl.g && other->rgbl.b==THIS->rgbl.b) { pop_stack(); push_int(1); return; } }
pike.git/src/modules/Image/colors.c:1070:
*/ static void image_color_light(INT32 args) { pop_n_elems(args); image_color_hsvf(0); sp--; dmalloc_touch_svalue(sp); push_array_items(sp->u.array); /* frees */
-
sp[-1].u.float_number +=
DO_NOT_WARN
(
(
FLOAT_TYPE)0.2
)
;
+
sp[-1].u.float_number += (FLOAT_TYPE)0.2;
if (((double)sp[-1].u.float_number) >= 1.0)
-
sp[-2].u.float_number -=
DO_NOT_WARN
(
(
FLOAT_TYPE)(sp[-1].u.float_number -
-
1.0)
)
;
+
sp[-2].u.float_number -= (FLOAT_TYPE)(sp[-1].u.float_number - 1.0);
image_make_hsv_color(3); } static void image_color_dark(INT32 args) { pop_n_elems(args); image_color_hsvf(0); sp--; dmalloc_touch_svalue(sp);
pike.git/src/modules/Image/colors.c:1126:
{ pop_n_elems(args); image_color_hsvf(0); sp--; dmalloc_touch_svalue(sp); push_array_items(sp->u.array); /* frees */ if (sp[-2].u.float_number==0.0) {
-
sp[-1].u.float_number -=
DO_NOT_WARN
(
(
FLOAT_TYPE)0.2
)
;
+
sp[-1].u.float_number -= (FLOAT_TYPE)0.2;
} else {
-
sp[-2].u.float_number -=
DO_NOT_WARN
(
(
FLOAT_TYPE)0.2
)
;
-
sp[-1].u.float_number -=
DO_NOT_WARN
(
(
FLOAT_TYPE)0.2
)
;
+
sp[-2].u.float_number -= (FLOAT_TYPE)0.2;
+
sp[-1].u.float_number -= (FLOAT_TYPE)0.2;
} image_make_hsv_color(3); } static void image_color_bright(INT32 args) { pop_n_elems(args); image_color_hsvf(0); sp--; dmalloc_touch_svalue(sp);
pike.git/src/modules/Image/colors.c:1160:
sp[-2].u.float_number+=0.2; sp[-1].u.float_number+=0.2; } image_make_hsv_color(3); } static void image_color_mult(INT32 args) { FLOAT_TYPE x=0.0;
-
get_all_args("
Image.Color.Color->
`*",args,"%f",&x);
+
get_all_args("`*",args,"%f",&x);
pop_n_elems(args); _image_make_rgb_color(DOUBLE_TO_INT(THIS->rgb.r*x), DOUBLE_TO_INT(THIS->rgb.g*x), DOUBLE_TO_INT(THIS->rgb.b*x)); } int image_color_svalue(struct svalue *v,rgb_group *rgb) { if (TYPEOF(*v) == T_OBJECT) {
-
struct color_struct *cs=
(struct color_struct*)
-
get_storage(v->u.object,image_color_program);
+
struct color_struct *cs=get_storage(v->u.object,image_color_program);
if (cs) { *rgb=cs->rgb; return 1; } } else if (TYPEOF(*v) == T_ARRAY) { if (v->u.array->size==3 &&
pike.git/src/modules/Image/colors.c:1199:
rgb->b=(COLORTYPE)(v->u.array->item[2].u.integer); return 1; } } else if (TYPEOF(*v) == T_STRING) { push_svalue(v); image_make_color(1); if (TYPEOF(sp[-1]) == T_OBJECT) {
-
struct color_struct *cs=
(struct color_struct*)
-
get_storage(sp[-1].u.object,image_color_program);
+
struct color_struct *cs=get_storage(sp[-1].u.object,image_color_program);
*rgb=cs->rgb; pop_stack(); return 1; } pop_stack(); } return 0; } int image_color_arg(INT32 args,rgb_group *rgb)
pike.git/src/modules/Image/colors.c:1222:
if (args>=0) return 0; return image_color_svalue(sp+args,rgb); } static void image_color_add(INT32 args) { rgb_group rgb; if (!image_color_arg(-args,&rgb))
-
SIMPLE_BAD_ARG_ERROR("
Image.Color.Color->
`+",1,"Color");
+
SIMPLE_BAD_ARG_ERROR("`+",1,"
Image.
Color");
pop_n_elems(args); _image_make_rgb_color((int)(THIS->rgb.r+rgb.r), (int)(THIS->rgb.g+rgb.g), (int)(THIS->rgb.b+rgb.b)); } #define HEXTONUM(C) \
pike.git/src/modules/Image/colors.c:1320:
(INT32)rgb[1], (INT32)rgb[2]); return; } } if (sp[-1].u.string->len>=4 && sp[-1].u.string->str[0]=='@') { /* @h,s,v; h=0..359, s,v=0..100 */ stack_dup();
-
push_text("@%f,%f,%f\n");
+
push_
static_
text("@%f,%f,%f\n");
f_sscanf(2); if (TYPEOF(sp[-1]) == T_ARRAY && sp[-1].u.array->size==3) { FLOAT_TYPE h,s,v; stack_swap(); pop_stack(); sp--; dmalloc_touch_svalue(sp); push_array_items(sp->u.array);
-
get_all_args("
Image.Color()
",3,"%f%f%f",&h,&s,&v);
+
get_all_args("
create
",3,"%f%f%f",&h,&s,&v);
pop_n_elems(3); push_int(DOUBLE_TO_INT(h/360.0*256.0)); push_int(DOUBLE_TO_INT(s/100.0*255.4)); push_int(DOUBLE_TO_INT(v/100.0*255.4)); image_make_hsv_color(3); return; } pop_stack(); } if (sp[-1].u.string->len>=4 && sp[-1].u.string->str[0]=='%') { /* @c,m,y,k; 0..100 */ stack_dup();
-
push_text("%%%f,%f,%f,%f\n");
+
push_
static_
text("%%%f,%f,%f,%f\n");
f_sscanf(2); if (TYPEOF(sp[-1]) == T_ARRAY && sp[-1].u.array->size==4) { stack_swap(); pop_stack(); sp--; dmalloc_touch_svalue(sp); push_array_items(sp->u.array); image_make_cmyk_color(4); return; } pop_stack(); } for (n=0; (size_t)n<sizeof(callables)/sizeof(callables[0]); n++) if (sp[-1].u.string->len>(ptrdiff_t)strlen(callables[n]) && memcmp(sp[-1].u.string->str,callables[n],strlen(callables[n]))==0) {
-
push_int(
DO_NOT_WARN
(
(
INT32)strlen(callables[n]))
)
;
+
push_int((INT32)strlen(callables[n]));
push_int(1000000); f_index(3); image_get_color(1); if (TYPEOF(sp[-1]) != T_OBJECT) return; /* no way */ safe_apply(sp[-1].u.object,callables[n],0); stack_swap(); pop_stack(); return; } if (sp[-1].u.string->len>=4 && sp[-1].u.string->str[0]=='g') { /* greyx; x=0..99 */ stack_dup();
-
push_text("gr%*[ea]y%f\n");
+
push_
static_
text("gr%*[ea]y%f\n");
f_sscanf(2); if (TYPEOF(sp[-1]) == T_ARRAY && sp[-1].u.array->size==1) { double f; f = sp[-1].u.array->item[0].u.float_number; pop_stack(); pop_stack();
-
push_int(
DO_NOT_WARN
(
(
int)(255*f/100)
)
);
+
push_int( (int)(255*f/100) );
/* grey100 is white, grey0 is black */ stack_dup(); stack_dup(); image_make_rgb_color(3); return; } pop_stack(); } }
pike.git/src/modules/Image/colors.c:1411:
/* try other stuff here */ pop_stack(); push_undefined(); return; } static void image_guess_color(INT32 args) { if (args!=1 && TYPEOF(sp[-args]) != T_STRING)
-
bad_arg_error("
Image.Color->
guess",sp-args,args,0,"",sp-args,
-
"Bad arguments to
Image.Color->
guess
()
\n");
+
bad_arg_error("guess",sp-args,args,0,"",sp-args,
+
"Bad arguments to
guess
.\n");
f_lower_case(1);
-
push_
constant
_text(" ");
+
push_
static
_text(" ");
o_subtract(); stack_dup(); image_get_color(1); if (TYPEOF(sp[-1]) == T_OBJECT) { stack_swap(); pop_stack(); return; } pop_stack();
-
push_
constant
_text("#");
+
push_
static
_text("#");
stack_swap(); f_add(2); image_get_color(1); } static void image_colors_index(INT32 args) { struct svalue s; object_index_no_free2(&s, THISOBJ, 0, sp-1);
pike.git/src/modules/Image/colors.c:1497:
static void _image_make_rgbl_color(INT32 r,INT32 g,INT32 b) { struct color_struct *cs; if (r<0) r=0; else if (r>COLORLMAX) r=COLORLMAX; /* >=2^31? no way... */ if (g<0) g=0; else if (g>COLORLMAX) g=COLORLMAX; if (b<0) b=0; else if (b>COLORLMAX) b=COLORLMAX; push_object(clone_object(image_color_program,0));
-
cs=
(struct color_struct*)
-
get_storage(sp[-1].u.object,image_color_program);
+
cs=get_storage(sp[-1].u.object,image_color_program);
cs->rgbl.r=(INT32)r; cs->rgbl.g=(INT32)g; cs->rgbl.b=(INT32)b; RGBL_TO_RGB(cs->rgb,cs->rgbl); }
-
static void image_color__encode( INT32 args )
+
static void image_color__encode( INT32
UNUSED(
args
)
)
{ push_int( THIS->rgbl.r ); push_int( THIS->rgbl.g ); push_int( THIS->rgbl.b ); f_aggregate( 3 ); }
-
static void image_color__decode( INT32 args )
+
static void image_color__decode( INT32
UNUSED(
args
)
)
{ struct svalue *a; if( TYPEOF(Pike_sp[-1]) != PIKE_T_ARRAY || Pike_sp[-1].u.array->size != 3 ) Pike_error("Illegal argument to _decode\n"); a=Pike_sp[-1].u.array->item; THIS->rgbl.r = a[0].u.integer; THIS->rgbl.g = a[1].u.integer; THIS->rgbl.b = a[2].u.integer; RGBL_TO_RGB(THIS->rgb,THIS->rgbl); pop_stack();
pike.git/src/modules/Image/colors.c:1544:
void _image_make_rgb_color(INT32 r,INT32 g,INT32 b) { struct color_struct *cs; if (r<0) r=0; else if (r>COLORMAX) r=COLORMAX; if (g<0) g=0; else if (g>COLORMAX) g=COLORMAX; if (b<0) b=0; else if (b>COLORMAX) b=COLORMAX; push_object(clone_object(image_color_program,0));
-
cs=
(struct color_struct*)
-
get_storage(sp[-1].u.object,image_color_program);
+
cs=get_storage(sp[-1].u.object,image_color_program);
cs->rgb.r=(COLORTYPE)r; cs->rgb.g=(COLORTYPE)g; cs->rgb.b=(COLORTYPE)b; RGB_TO_RGBL(cs->rgbl,cs->rgb); } static void image_make_rgb_color(INT32 args) { INT_TYPE r=0,g=0,b=0;
pike.git/src/modules/Image/colors.c:1567:
if( args==1 && TYPEOF(sp[-1]) == T_INT ) { r = sp[-1].u.integer; b = r & 0xff; r >>= 8; g = r & 0xff; r >>= 8; r &= 0xff; } else
-
get_all_args("
Image.Color.
rgb
()
",args,"%i%i%i",&r,&g,&b);
+
get_all_args("rgb",args,"%i%i%i",&r,&g,&b);
_image_make_rgb_color(r,g,b); } static void image_make_hsv_color(INT32 args) { FLOAT_TYPE h,s,v; FLOAT_TYPE r=0,g=0,b=0; /* to avoid warning */ if (args && TYPEOF(sp[-args]) == T_INT) { INT_TYPE hi,si,vi;
-
get_all_args("
Image.Color.
hsv
()
",args,"%i%i%i",
-
&hi,&si,&vi);
+
get_all_args("hsv",args,"%i%i%i",&hi,&si,&vi);
pop_n_elems(args); if (hi<0) hi=(hi%COLORMAX)+COLORMAX; else if (hi>COLORMAX) hi%=COLORMAX; /* repeating */ if (si<0) si=0; else if (si>COLORMAX) si=COLORMAX; if (vi<0) vi=0; else if (vi>COLORMAX) vi=COLORMAX; h = (hi/((double)COLORMAX))*(360.0/60.0); s = si/((double)COLORMAX); v = vi/((double)COLORMAX); } else {
-
get_all_args("
Image.Color.
hsv
()
",args,"%f%f%f",
-
&h,&s,&v);
+
get_all_args("hsv",args,"%f%f%f",&h,&s,&v);
pop_n_elems(args); if (h<0) h = 360 + h - ((DOUBLE_TO_INT(h)/360)*360); if (h>360.0) h -= ((DOUBLE_TO_INT(h)/360)*360); h/=60; } if(s==0.0) { r = g = b = v; } else {
pike.git/src/modules/Image/colors.c:1638:
#undef p #undef q #undef t _image_make_rgbf_color(r,g,b); } static void image_make_cmyk_color(INT32 args) { FLOAT_TYPE c,m,y,k,r,g,b;
-
get_all_args("
Image.Color.
cmyk
()
",args,"%F%F%F%F",&c,&m,&y,&k);
+
get_all_args("cmyk",args,"%F%F%F%F",&c,&m,&y,&k);
pop_n_elems(args); r=100-(c+k); g=100-(m+k); b=100-(y+k); _image_make_rgbf_color(r*0.01,g*0.01,b*0.01); } static void image_make_greylevel_color(INT32 args) { INT_TYPE i;
-
get_all_args("
Image.Color.
greylevel
()
",args,"%i",&i);
+
get_all_args("greylevel",args,"%i",&i);
pop_n_elems(args); _image_make_rgb_color(i,i,i); } static void image_make_html_color(INT32 args) { int i; if (args!=1 || TYPEOF(sp[-1]) != T_STRING) {
-
bad_arg_error("
Image.Color.
html",sp-args,args,0,"",sp-args,
-
"Bad arguments to
Image.Color.
html
()
\n");
+
bad_arg_error("html",sp-args,args,0,"",sp-args,
+
"Bad arguments to
html
.\n");
return; } f_lower_case(1); for (i=0; (size_t)i<sizeof(html_color)/sizeof(html_color[0]); i++) if (html_color[i].pname==sp[-1].u.string) { _image_make_rgb_color(html_color[i].r, html_color[i].g, html_color[i].b); return; } if (sp[-1].u.string->len>0 && sp[-1].u.string->str[0]=='#') image_get_color(1); else {
-
push_
constant
_text("#");
+
push_
static
_text("#");
stack_swap(); f_add(2); image_get_color(1); } } /* **! method array(string) _indices() **! method array(object) _values() **! (ie as <tt>indices(Image.Color)</tt> or <tt>values(Image.Color)</tt>)
pike.git/src/modules/Image/colors.c:1719:
static void image_colors_values(INT32 args) { pop_n_elems(args); if (!colors) make_colors(); ref_push_mapping(colors); f_values(1); } void init_image_colors(void) {
-
str_array=make_shared_string("array");
-
str_string=make_shared_string("string");
-
str_int=make_shared_string("int");
+
str_r=make_shared_string("r"); str_g=make_shared_string("g"); str_b=make_shared_string("b"); str_h=make_shared_string("h"); str_s=make_shared_string("s"); str_v=make_shared_string("v"); no_name=make_shared_string(""); /* make color object program */ start_new_program(); ADD_STORAGE(struct color_struct); set_init_callback(init_color_struct); set_exit_callback(exit_color_struct); /* color info methods */
-
ADD_FUNCTION("cast",image_color_cast,tFunc(tStr,tOr(tArray,tStr)),
0
);
+
ADD_FUNCTION("cast",image_color_cast,tFunc(tStr,tOr(tArray,tStr)),
ID_PROTECTED
);
ADD_FUNCTION("_sprintf",image_color__sprintf, tFunc(tInt tMap(tStr,tMix),tStr),0); ADD_FUNCTION("`[]",image_color_index,tFunc(tOr(tStr,tInt),tOr(tInt,tFunction)),0); ADD_FUNCTION("`->",image_color_index,tFunc(tOr(tStr,tInt),tOr(tInt,tFunction)),0);
-
ADD_FUNCTION("`==",image_color_equal,tFunc(tOr(tObjImpl_IMAGE_COLOR_COLOR
_ID
,tInt),
+
ADD_FUNCTION("`==",image_color_equal,tFunc(tOr(tObjImpl_IMAGE_COLOR_COLOR,tInt),
tInt),0); ADD_FUNCTION("__hash",image_color___hash,tFunc(tNone,tInt),0); ADD_FUNCTION("_encode", image_color__encode,tFunc(tNone,tArr(tInt)),0); ADD_FUNCTION("_decode", image_color__decode,tFunc(tInt,tVoid),0); ADD_FUNCTION("name",image_color_name,tFunc(tNone,tStr),0); ADD_FUNCTION("hex",image_color_hex,tFunc(tNone,tStr),0); ADD_FUNCTION("html",image_color_html,tFunc(tNone,tStr),0);
pike.git/src/modules/Image/colors.c:1769:
ADD_FUNCTION("rgbf",image_color_rgbf,tFunc(tNone,tArr(tFlt)),0); ADD_FUNCTION("hsv",image_color_hsv,tFunc(tNone,tArr(tInt)),0); ADD_FUNCTION("hsvf",image_color_hsvf,tFunc(tNone,tArr(tFlt)),0); ADD_FUNCTION("cmyk",image_color_cmyk,tFunc(tNone,tArr(tFlt)),0); ADD_FUNCTION("greylevel",image_color_greylevel,tOr(tFunc(tNone,tInt), tFunc(tInt tInt tInt,tInt)),0); /* color conversion methods */ ADD_FUNCTION("grey",image_color_grey,
-
tOr(tFunc(tNone,tObjIs_IMAGE_COLOR_COLOR
_ID
),
-
tFunc(tInt tInt tInt,tObjIs_IMAGE_COLOR_COLOR
_ID
)),0);
+
tOr(tFunc(tNone,tObjIs_IMAGE_COLOR_COLOR),
+
tFunc(tInt tInt tInt,tObjIs_IMAGE_COLOR_COLOR)),0);
-
ADD_FUNCTION("light",image_color_light,tFunc(tNone,tObjIs_IMAGE_COLOR_COLOR
_ID
),0);
-
ADD_FUNCTION("dark",image_color_dark,tFunc(tNone,tObjIs_IMAGE_COLOR_COLOR
_ID
),0);
-
ADD_FUNCTION("neon",image_color_neon,tFunc(tNone,tObjIs_IMAGE_COLOR_COLOR
_ID
),0);
-
ADD_FUNCTION("bright",image_color_bright,tFunc(tNone,tObjIs_IMAGE_COLOR_COLOR
_ID
),0);
-
ADD_FUNCTION("dull",image_color_dull,tFunc(tNone,tObjIs_IMAGE_COLOR_COLOR
_ID
),0);
+
ADD_FUNCTION("light",image_color_light,tFunc(tNone,tObjIs_IMAGE_COLOR_COLOR),0);
+
ADD_FUNCTION("dark",image_color_dark,tFunc(tNone,tObjIs_IMAGE_COLOR_COLOR),0);
+
ADD_FUNCTION("neon",image_color_neon,tFunc(tNone,tObjIs_IMAGE_COLOR_COLOR),0);
+
ADD_FUNCTION("bright",image_color_bright,tFunc(tNone,tObjIs_IMAGE_COLOR_COLOR),0);
+
ADD_FUNCTION("dull",image_color_dull,tFunc(tNone,tObjIs_IMAGE_COLOR_COLOR),0);
-
ADD_FUNCTION("`*",image_color_mult,tFunc(tFlt,tObjIs_IMAGE_COLOR_COLOR
_ID
),0);
-
ADD_FUNCTION("`+",image_color_add,tFunc(tObjImpl_IMAGE_COLOR_COLOR
_ID
,
-
tObjIs_IMAGE_COLOR_COLOR
_ID
),0);
+
ADD_FUNCTION("`*",image_color_mult,tFunc(tFlt,tObjIs_IMAGE_COLOR_COLOR),0);
+
ADD_FUNCTION("`+",image_color_add,tFunc(tObjImpl_IMAGE_COLOR_COLOR,
+
tObjIs_IMAGE_COLOR_COLOR),0);
image_color_program=end_program(); image_color_program->flags |= PROGRAM_CONSTANT | PROGRAM_NO_EXPLICIT_DESTRUCT ; PIKE_MODULE_EXPORT(Image, image_color_program); /* this is the Image.Color stuff */
-
ADD_FUNCTION("`[]",image_colors_index,tFunc(tStr,tObjIs_IMAGE_COLOR_COLOR
_ID
),0);
+
ADD_FUNCTION("`[]",image_colors_index,tFunc(tStr,tObjIs_IMAGE_COLOR_COLOR),0);
ADD_FUNCTION("`()",image_make_color,
-
tOr3(tFunc(tStr,tObjIs_IMAGE_COLOR_COLOR
_ID
),
-
tFunc(tInt,tObjIs_IMAGE_COLOR_COLOR
_ID
),
-
tFunc(tInt tInt tInt,tObjIs_IMAGE_COLOR_COLOR
_ID
)),0);
+
tOr3(tFunc(tStr,tObjIs_IMAGE_COLOR_COLOR),
+
tFunc(tInt,tObjIs_IMAGE_COLOR_COLOR),
+
tFunc(tInt tInt tInt,tObjIs_IMAGE_COLOR_COLOR)),0);
ADD_FUNCTION("rgb",image_make_rgb_color,
-
tOr(tFunc(tInt,tObjIs_IMAGE_COLOR_COLOR
_ID
),
-
tFunc(tInt tInt tInt,tObjIs_IMAGE_COLOR_COLOR
_ID
)),0);
+
tOr(tFunc(tInt,tObjIs_IMAGE_COLOR_COLOR),
+
tFunc(tInt tInt tInt,tObjIs_IMAGE_COLOR_COLOR)),0);
ADD_FUNCTION("hsv",image_make_hsv_color,
-
tOr(tFunc(tInt tInt tInt,tObjIs_IMAGE_COLOR_COLOR
_ID
),
-
tFunc(tFlt tFlt tFlt,tObjIs_IMAGE_COLOR_COLOR
_ID
))
,0);
+
tOr(tFunc(tInt tInt tInt,tObjIs_IMAGE_COLOR_COLOR),
+
tFunc(tFlt tFlt tFlt,tObjIs_IMAGE_COLOR_COLOR)),0);
ADD_FUNCTION("cmyk",image_make_cmyk_color,tFunc(tOr(tInt,tFlt) tOr(tInt,tFlt) tOr(tInt,tFlt) tOr(tInt,tFlt),
-
tObjIs_IMAGE_COLOR_COLOR
_ID
), 0);
+
tObjIs_IMAGE_COLOR_COLOR), 0);
ADD_FUNCTION("html",image_make_html_color,
-
tFunc(tStr,tObjIs_IMAGE_COLOR_COLOR
_ID
),0);
+
tFunc(tStr,tObjIs_IMAGE_COLOR_COLOR),0);
ADD_FUNCTION("guess",image_guess_color,
-
tFunc(tStr,tObjIs_IMAGE_COLOR_COLOR
_ID
),0);
+
tFunc(tStr,tObjIs_IMAGE_COLOR_COLOR),0);
ADD_FUNCTION("greylevel",image_make_greylevel_color,
-
tFunc(tInt,tObjIs_IMAGE_COLOR_COLOR
_ID
),0);
+
tFunc(tInt,tObjIs_IMAGE_COLOR_COLOR),0);
ADD_FUNCTION("_indices",image_colors_indices, tFunc(tNone,tArr(tStr)),0); ADD_FUNCTION("_values",image_colors_values,
-
tFunc(tNone,tArr(tObjIs_IMAGE_COLOR_COLOR
_ID
)),0);
+
tFunc(tNone,tArr(tObjIs_IMAGE_COLOR_COLOR)),0);
image_color_program->id = PROG_IMAGE_COLOR_COLOR_ID; add_program_constant("Color",image_color_program,0); } void exit_image_colors(void) { free_program(image_color_program); if (colors)
pike.git/src/modules/Image/colors.c:1841:
free_object(colortable); free_array(colornames); colors=NULL; colortable=NULL; colornames=NULL; for (i=0; (size_t)i<sizeof(html_color)/sizeof(html_color[0]); i++) free_string(html_color[i].pname); }
-
free_string(str_array);
-
free_string(str_string);
-
free_string(str_int);
+
free_string(str_r); free_string(str_g); free_string(str_b); free_string(str_h); free_string(str_s); free_string(str_v); free_string(no_name); }