summaryrefslogtreecommitdiffstats
path: root/abs/mv-core/ghosd/ghosd-0.0.1/ghosd/ghosd-main.c
diff options
context:
space:
mode:
Diffstat (limited to 'abs/mv-core/ghosd/ghosd-0.0.1/ghosd/ghosd-main.c')
-rw-r--r--abs/mv-core/ghosd/ghosd-0.0.1/ghosd/ghosd-main.c158
1 files changed, 0 insertions, 158 deletions
diff --git a/abs/mv-core/ghosd/ghosd-0.0.1/ghosd/ghosd-main.c b/abs/mv-core/ghosd/ghosd-0.0.1/ghosd/ghosd-main.c
deleted file mode 100644
index bac397e..0000000
--- a/abs/mv-core/ghosd/ghosd-0.0.1/ghosd/ghosd-main.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/* ghosd -- OSD with fake transparency, cairo, and pango.
- * Copyright (C) 2006 Evan Martin <martine@danga.com>
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/time.h>
-#include <sys/poll.h>
-#include <time.h>
-#include <unistd.h>
-
-#include "ghosd.h"
-#include "ghosd-internal.h"
-
-static void
-ghosd_main_iteration(Ghosd *ghosd) {
- XEvent ev, pev;
- XNextEvent(ghosd->dpy, &ev);
-
- /* smash multiple configure/exposes into one. */
- if (ev.type == ConfigureNotify) {
- while (XPending(ghosd->dpy)) {
- XPeekEvent(ghosd->dpy, &pev);
- if (pev.type != ConfigureNotify && pev.type != Expose)
- break;
- XNextEvent(ghosd->dpy, &ev);
- }
- }
-
- switch (ev.type) {
- case Expose:
- break;
- case ConfigureNotify:
- if (ghosd->width > 0) {
- /* XXX if the window manager disagrees with our positioning here,
- * we loop. */
- if (ghosd->x != ev.xconfigure.x ||
- ghosd->y != ev.xconfigure.y) {
- /*width = ev.xconfigure.width;
- height = ev.xconfigure.height;*/
- XMoveResizeWindow(ghosd->dpy, ghosd->win,
- ghosd->x, ghosd->y, ghosd->width, ghosd->height);
- }
- }
- break;
- }
-}
-
-void
-ghosd_main_iterations(Ghosd *ghosd) {
- while (XPending(ghosd->dpy))
- ghosd_main_iteration(ghosd);
-}
-
-typedef struct {
- GhosdRenderFunc render_func;
- void *render_data;
- cairo_surface_t* surface;
- float alpha;
-} GhosdFlashData;
-
-static void
-ghosd_flash_render(Ghosd *ghosd, cairo_t *cr, void* data) {
- GhosdFlashData *flash = data;
-
- /* the first time we render, let the client render into their own surface. */
- if (flash->surface == NULL) {
- cairo_t *rendered_cr;
- flash->surface = cairo_surface_create_similar(cairo_get_target(cr),
- CAIRO_CONTENT_COLOR_ALPHA,
- ghosd->width, ghosd->height);
- rendered_cr = cairo_create(flash->surface);
- flash->render_func(ghosd, rendered_cr, flash->render_data);
- cairo_destroy(rendered_cr);
- }
-
- /* now that we have a rendered surface, all we normally do is copy that to
- * the screen. */
- cairo_set_source_surface(cr, flash->surface, 0, 0);
- cairo_paint_with_alpha(cr, flash->alpha);
-}
-
-void
-ghosd_main_until(Ghosd *ghosd, struct timeval *until) {
- struct timeval tv_now;
-
- ghosd_main_iterations(ghosd);
-
- for (;;) {
- gettimeofday(&tv_now, NULL);
- int dt = (until->tv_sec - tv_now.tv_sec )*1000 +
- (until->tv_usec - tv_now.tv_usec)/1000;
- if (dt <= 0) break;
-
- struct pollfd pollfd = { ghosd_get_socket(ghosd), POLLIN, 0 };
- int ret = poll(&pollfd, 1, dt);
- if (ret < 0) {
- perror("poll");
- exit(1);
- } else if (ret > 0) {
- ghosd_main_iterations(ghosd);
- } else {
- /* timer expired. */
- break;
- }
- }
-}
-
-void
-ghosd_flash(Ghosd *ghosd, int fade_ms, int total_display_ms) {
- GhosdFlashData flash = {0};
- flash.render_func = ghosd->render_func;
- flash.render_data = ghosd->render_data;
- ghosd->render_func = ghosd_flash_render;
- ghosd->render_data = &flash;
-
- ghosd_render(ghosd);
- ghosd_show(ghosd);
-
- const int STEP_MS = 50;
- const float dalpha = 1.0 / (fade_ms / (float)STEP_MS);
- struct timeval tv_nextupdate;
-
- /* fade in. */
- for (flash.alpha = 0; flash.alpha < 1.0; flash.alpha += dalpha) {
- if (flash.alpha > 1.0) flash.alpha = 1.0;
- ghosd_render(ghosd);
-
- gettimeofday(&tv_nextupdate, NULL);
- tv_nextupdate.tv_usec += STEP_MS*1000;
- ghosd_main_until(ghosd, &tv_nextupdate);
- }
-
- /* full display. */
- flash.alpha = 1.0;
- ghosd_render(ghosd);
-
- gettimeofday(&tv_nextupdate, NULL);
- tv_nextupdate.tv_usec += (total_display_ms - (2*fade_ms))*1000;
- ghosd_main_until(ghosd, &tv_nextupdate);
-
- /* fade out. */
- for (flash.alpha = 1.0; flash.alpha > 0.0; flash.alpha -= dalpha) {
- ghosd_render(ghosd);
-
- gettimeofday(&tv_nextupdate, NULL);
- tv_nextupdate.tv_usec += STEP_MS*1000;
- ghosd_main_until(ghosd, &tv_nextupdate);
- }
-
- flash.alpha = 0;
- ghosd_render(ghosd);
- ghosd_main_iterations(ghosd);
-}
-
-/* vim: set ts=2 sw=2 et cino=(0 : */