/* * * Copyright (c) 2000 Makoto Sugano * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * */ #include #include #include #include "./dockapp.h" #include "XPM/back.xpm" #include "XPM/button_pressed.xpm" #include "XPM/daikichi.xpm" #include "XPM/chukichi.xpm" #include "XPM/shoukichi.xpm" #include "XPM/suekichi.xpm" #include "XPM/kyou.xpm" #include "XPM/daikyou.xpm" #define USLEEP 30000 #define OFF 0 #define ON 1 char *displayName = ""; Pixmap pixmap; Pixmap back_pixmap, back_mask; Pixmap button_pressed_pixmap; GC gc; int i, j, animation = ON; static void buttonReleaseCallback (int button, int state, int x, int y) { if (button == 1 && 0 < x && x < 64 && 44 < y && y < 64){ srand(time(0L) * (getpid())); i = 0; j = rand() / (RAND_MAX / 6 + 1) + 18; animation = ON; } XCopyArea(DADisplay, back_pixmap, pixmap, gc, 0, 44, 64, 64, 0, 44); DASetPixmap(pixmap); } static void buttonPressCallback (int button, int state, int x, int y) { if (button == 1 && 0 < x && x < 64 && 44 < y && y < 64){ XCopyArea(DADisplay, button_pressed_pixmap, pixmap, gc, 0, 44, 64, 64, 0, 44); DASetPixmap(pixmap); } } static DAProgramOption options[] = { {"-d", "--displayname", "display to use.", DOString, False, {&displayName}}, }; main(int argc, char **argv) { Pixmap daikichi_pixmap; Pixmap chukichi_pixmap; Pixmap shoukichi_pixmap; Pixmap suekichi_pixmap; Pixmap kyou_pixmap; Pixmap daikyou_pixmap; int w = 64, h = 64; DACallbacks callbacks = {NULL,buttonPressCallback ,buttonReleaseCallback,NULL,NULL,NULL,NULL}; DAParseArguments(argc, argv, options, sizeof(options)/sizeof(DAProgramOption), "dockapp that predict your luck", "wmomikuzi 0.122"); DAInitialize(displayName, "wmomikuzi", 64, 64, argc, argv); pixmap = DAMakePixmap(); /* making pixmaps for the panel */ DAMakePixmapFromData(back_xpm, &back_pixmap, &back_mask, &w, &h); DAMakePixmapFromData(button_pressed_xpm, &button_pressed_pixmap, NULL, &w, &h); DAMakePixmapFromData(daikichi_xpm, &daikichi_pixmap, NULL, &w, &h); DAMakePixmapFromData(chukichi_xpm, &chukichi_pixmap, NULL, &w, &h); DAMakePixmapFromData(shoukichi_xpm, &shoukichi_pixmap, NULL, &w, &h); DAMakePixmapFromData(suekichi_xpm, &suekichi_pixmap, NULL, &w, &h); DAMakePixmapFromData(kyou_xpm, &kyou_pixmap, NULL, &w, &h); DAMakePixmapFromData(daikyou_xpm, &daikyou_pixmap, NULL, &w, &h); /* setting up the mask for the panel */ DASetShape(back_mask); DASetPixmap(back_pixmap); /* setting up the graphic context */ gc = DefaultGC(DADisplay, DefaultScreen(DADisplay)); DASetCallbacks(&callbacks); DAShow(); srand(time(0L) * (getpid())); i = 0; j = rand() / (RAND_MAX / 6 + 1) + 18; /* draws the button part */ XCopyArea(DADisplay, back_pixmap, pixmap, gc, 0, 44, 64, 64, 0, 44); while (1) { XEvent ev; /* draws the display part */ XCopyArea(DADisplay, back_pixmap, pixmap, gc, 0, 0, 64, 44, 0, 0); if ((i % 6) == 1){ XCopyArea(DADisplay, daikichi_pixmap, pixmap, gc, 0, 0, 64, 39, 5, 5); } else if ((i % 6) == 2){ XCopyArea(DADisplay, chukichi_pixmap, pixmap, gc, 0, 0, 64, 39, 5, 5); } else if ((i % 6) == 3){ XCopyArea(DADisplay, shoukichi_pixmap, pixmap, gc, 0, 0, 64, 39, 5, 5); } else if ((i % 6) == 4){ XCopyArea(DADisplay, suekichi_pixmap, pixmap, gc, 0, 0, 64, 39, 5, 5); } else if ((i % 6) == 5){ XCopyArea(DADisplay, kyou_pixmap, pixmap, gc, 0, 0, 64, 39, 5, 5); } else if ((i % 6) == 0){ XCopyArea(DADisplay, daikyou_pixmap, pixmap, gc, 0, 0, 64, 39, 5, 5); } DASetPixmap(pixmap); usleep(USLEEP); /* j is the destination number */ if (i <= j){ i++; } else { animation = OFF; } while (animation == OFF) { /* handle all pending X events */ while (XPending(DADisplay)) { XNextEvent(DADisplay, &ev); DAProcessEvent(&ev); } usleep(USLEEP); } } return 0; }