This is video.h in view mode; [Download] [Up]
/*
* video.h - X11 graphics routines.
*
* Written by
* Ettore Perazzoli (ettore@comm2000.it)
* Teemu Rantanen (tvr@cs.hut.fi)
*
* This file is part of VICE, the Versatile Commodore Emulator.
* See README for copyright notice.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
* 02111-1307 USA.
*
*/
#ifndef _VIDEO_X_H
#define _VIDEO_X_H
#include "vice.h"
#include "palette.h"
#include <X11/Xlib.h>
#if defined( MITSHM )
#include <X11/extensions/XShm.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#endif
#include "types.h"
#include "ui.h"
#include "resources.h" /* app_resources.useXSync */
struct _canvas {
unsigned int width, height;
ui_window_t emuwindow;
Window drawable;
};
typedef struct _canvas *canvas_t;
/* Triple buffering is never available on X11. */
#define CANVAS_USES_TRIPLE_BUFFERING(c) 0
struct _frame_buffer {
XImage *x_image;
#if defined (MITSHM)
XShmSegmentInfo xshm_info;
#endif
#if X_DISPLAY_DEPTH == 0
PIXEL *tmpframebuffer;
int tmpframebufferlinesize;
#endif
GC gc;
};
typedef struct _frame_buffer frame_buffer_t;
typedef PIXEL *frame_buffer_ptr_t;
typedef ui_exposure_handler_t canvas_redraw_t;
extern Display *display;
extern void (*_refresh_func) ();
#if X_DISPLAY_DEPTH == 0
extern void (*_convert_func) (frame_buffer_t *p, int x, int y, int w, int h);
#endif
extern GC _video_gc;
extern int _video_use_xsync;
#if X_DISPLAY_DEPTH == 0
#define FRAME_BUFFER_START(i) ((i).tmpframebuffer)
#define FRAME_BUFFER_LINE_SIZE(i) ((i).tmpframebufferlinesize)
#define FRAME_BUFFER_LINE_START(i, n) ((i).tmpframebuffer \
+ (n) * (i).tmpframebufferlinesize)
#else
#define FRAME_BUFFER_START(i) ((PIXEL *)((i).x_image->data))
#define FRAME_BUFFER_LINE_SIZE(i) ((i).x_image->bytes_per_line/sizeof(PIXEL))
#define FRAME_BUFFER_LINE_START(i, n) (PIXEL *)((i).x_image->data \
+ (n) * (i).x_image->bytes_per_line)
#endif
inline static void canvas_refresh(canvas_t canvas, frame_buffer_t frame_buffer,
unsigned int xs, unsigned int ys,
unsigned int xi, unsigned int yi,
unsigned int w, unsigned int h)
{
#if X_DISPLAY_DEPTH == 0
if (_convert_func)
_convert_func(&frame_buffer, xs, ys, w, h);
#endif
_refresh_func(display, canvas->drawable, _video_gc,
frame_buffer.x_image, xs, ys, xi, yi, w, h, False);
if (_video_use_xsync)
XSync(display, False);
}
/* ------------------------------------------------------------------------- */
extern int video_init_resources(void);
extern int video_init_cmdline_options(void);
extern int video_init(void);
extern int frame_buffer_alloc(frame_buffer_t * i, unsigned int width,
unsigned int height);
extern void frame_buffer_free(frame_buffer_t * i);
extern void frame_buffer_clear(frame_buffer_t * i, PIXEL value);
extern canvas_t canvas_create(const char *win_name, unsigned int *width,
unsigned int *height, int mapped,
canvas_redraw_t exposure_handler,
const palette_t *palette, PIXEL *pixel_return);
extern int canvas_set_palette(canvas_t c, const palette_t *palette,
PIXEL *pixel_return);
extern void canvas_destroy(canvas_t s);
extern void canvas_map(canvas_t s);
extern void canvas_unmap(canvas_t s);
extern void canvas_resize(canvas_t s, unsigned int width, unsigned int height);
extern void text_enable(void);
extern void text_disable(void);
extern int num_text_lines(void);
extern void enable_text(void);
extern void disable_text(void);
#endif /* !defined (_VIDEO_X_H) */
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.