dockapps/wmomikuzi/wmomikuzi.c
2017-02-21 11:15:02 +00:00

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;
}