int main(int argc, char **argv) { Display *dpy; WMScreen *scr; int x, y, i; WMInitializeApplication("Puzzle", &argc, argv); dpy = XOpenDisplay(""); if (!dpy) { printf("could not open display\n"); exit(1); } scr = WMCreateScreen(dpy, DefaultScreen(dpy)); win = WMCreateWindow(scr, "puzzle"); WMResizeWidget(win, WinSize, WinSize); WMSetWindowTitle(win, "zuPzel"); WMSetWindowMinSize(win, 80, 80); WMSetWindowAspectRatio(win, 2, 2, 2, 2); WMSetWindowResizeIncrements(win, Size, Size); WMSetViewNotifySizeChanges(WMWidgetView(win), True); WMAddNotificationObserver(resizeObserver, NULL, WMViewSizeDidChangeNotification, WMWidgetView(win)); for (i = y = 0; y < Size && i < Size*Size-1; y++) { for (x = 0; x < Size && i < Size*Size-1; x++) { char buf[32]; WMColor *color; RColor col; RHSVColor hsv; hsv.hue = i*360/(Size*Size-1); hsv.saturation = 120; hsv.value = 200; RHSVtoRGB(&hsv, &col); color = WMCreateRGBColor(scr, col.red<<8, col.green<<8, col.blue<<8, False); MAP(x,y) = i; Button[i] = WMCreateButton(win, WBTMomentaryLight); WMSetWidgetBackgroundColor(Button[i], color); WMReleaseColor(color); WMSetButtonAction(Button[i], buttonClick, (void*)i); WMResizeWidget(Button[i], WinSize/Size, WinSize/Size); WMMoveWidget(Button[i], x*(WinSize/Size), y*(WinSize/Size)); sprintf(buf, "%i", i+1); WMSetButtonText(Button[i], buf); WMSetButtonTextAlignment(Button[i], WACenter); i++; } } WMMapSubwidgets(win); WMMapWidget(win); WMRealizeWidget(win); ResetGame(); WMScreenMainLoop(scr); return 0; }
WTexSolid *wTextureMakeSolid(WScreen * scr, XColor * color) { WTexSolid *texture; int gcm; XGCValues gcv; texture = wmalloc(sizeof(WTexture)); texture->type = WTEX_SOLID; texture->subtype = 0; XAllocColor(dpy, scr->w_colormap, color); texture->normal = *color; if (color->red == 0 && color->blue == 0 && color->green == 0) { texture->light.red = 0xb6da; texture->light.green = 0xb6da; texture->light.blue = 0xb6da; texture->dim.red = 0x6185; texture->dim.green = 0x6185; texture->dim.blue = 0x6185; } else { RColor rgb; RHSVColor hsv, hsv2; int v; rgb.red = color->red >> 8; rgb.green = color->green >> 8; rgb.blue = color->blue >> 8; RRGBtoHSV(&rgb, &hsv); RHSVtoRGB(&hsv, &rgb); hsv2 = hsv; v = hsv.value * 16 / 10; hsv.value = (v > 255 ? 255 : v); RHSVtoRGB(&hsv, &rgb); texture->light.red = rgb.red << 8; texture->light.green = rgb.green << 8; texture->light.blue = rgb.blue << 8; hsv2.value = hsv2.value / 2; RHSVtoRGB(&hsv2, &rgb); texture->dim.red = rgb.red << 8; texture->dim.green = rgb.green << 8; texture->dim.blue = rgb.blue << 8; } texture->dark.red = 0; texture->dark.green = 0; texture->dark.blue = 0; XAllocColor(dpy, scr->w_colormap, &texture->light); XAllocColor(dpy, scr->w_colormap, &texture->dim); XAllocColor(dpy, scr->w_colormap, &texture->dark); gcm = GCForeground | GCBackground | GCGraphicsExposures; gcv.graphics_exposures = False; gcv.background = gcv.foreground = texture->light.pixel; texture->light_gc = XCreateGC(dpy, scr->w_win, gcm, &gcv); gcv.background = gcv.foreground = texture->dim.pixel; texture->dim_gc = XCreateGC(dpy, scr->w_win, gcm, &gcv); gcv.background = gcv.foreground = texture->dark.pixel; texture->dark_gc = XCreateGC(dpy, scr->w_win, gcm, &gcv); gcv.background = gcv.foreground = color->pixel; texture->normal_gc = XCreateGC(dpy, scr->w_win, gcm, &gcv); return texture; }