= stringWidth(graphics.font, "i"); double xwd = stringWidth(graphics.font, "x"); ywd += iwd; ywd /= 2.0; paint(Rectangle r) { double alpha = 1.0; double alpha2 = 0.3333; int limit = 12; graphics { gsave(); erasedrawable(0.0); // for transparent PNG rectclip(r); setrgbcolor(imgcolor.red, imgcolor.green, imgcolor.blue); translate(48 * this.scale, 44 * this.scale); for (n=0; n<limit; n++) { moveto(0.0, 0.0); setfont(this.imagefont); // "handmade" kerning show("Y", alpha); if (n == 0) { moveto(ywd, 0.0); show("o", alpha); moveto(ywd + owd - 0.3 * iwd, 0.0); show("i", alpha); moveto(ywd + owd + 0.8 * iwd, 0.0); show("x", alpha); moveto(ywd + owd + 0.8 * iwd + xwd, -this.imagefont.height * 0.33); setfont(this.regfont); show("\xAE", alpha); alpha = alpha2; } alpha *= 0.75; rotate(30); } grestore(); } } }; return(yoixlogo); } Font basefont = { String name = "ClearviewATT-plain-48"; }; double scale = height / 90.0; Font imagefont = basefont.scalefont(scale, scale); if (addshadow) { Image logo = GenImage(height, color, imagefont, scale); image = new Image { int type = TYPE_RGB_ALPHA; Image source = logo; Image img = logo; // convolve image to make a (lightened) shadow Image shadow = new Image { int type = TYPE_RGB_ALPHA; Image source = img; Array kernel = new Array[100]; Pointer ptr; for (ptr in kernel) *ptr = 0.0055; paint() { convolve(kernel); } }; // combine the image and shadow into one image paint(Rectangle r) { graphics { gsave(); moveto(0, 0); showimage(this.img); moveto(this.img.size.height * 0.005, this.img.size.height * 0.02); showimage(this.shadow); grestore(); } } }; } else { image = GenImage(height, color, imagefont, scale); } return(image); } // rudimentary argument processing (getopt is also available) // first argument is height of image double sz = (argc > 1) ? atof(argv[1]) : 270; int shdw = 1; int print = 0; // second argument: if 0/1 turn shadow off/on, otherwise // assume it is a filename for printing. if (argc > 2) { if (argv[2] =~ "^[01]$") { shdw = atoi(argv[2]); } else { print = 1; } } Image yoixlogo = BuildYoixLogoImage(sz, Color.black, (sz >= 72) && shdw); if (print) { Stream output; if ((output = open(argv[2], "w")) != NULL) { encodeImage(yoixlogo, "png", output); close(output); } } else { JFrame jf = { int visible = TRUE; Dimension size = NULL; Array layout = { new JPanel { Dimension preferredsize = { double width = yoixlogo.size.width; double height = yoixlogo.size.height; }; Color background = Color.white; Image backgroundimage = yoixlogo; int backgroundhints = SCALE_NONE; }, }; }; } References External