167 lines
4.9 KiB
C
167 lines
4.9 KiB
C
/*
|
|
*
|
|
* 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 <unistd.h>
|
|
#include <stdio.h>
|
|
#include <time.h>
|
|
#include <libdockapp/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;
|
|
}
|