This is old C++ code originally intended to be a playground for 3D math.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

69 lines
2.0 KiB

using namespace std;
#include <cstdlib>
#include "canvas_x11.h"
#include "../canvas_imps/canvas_imp_rgb.h"
canvas_x11::canvas_x11(unsigned xs, unsigned ys) : canvas(xs, ys) {
disp=new xdisplay();
scr=disp->defaultscreen();
win=new xwindow(scr->getrootwin(), 100, 100, 1, x_size, y_size);
win->map();
switch(scr->getvisual()->c_class) {
XVisualInfo vi;
int result;
case TrueColor:
result=XMatchVisualInfo(disp->getdisplay(), disp->defaultscreenid(),
scr->getdepth(), TrueColor, &vi);
if(result)
sinfo=new canvas_imp_rgb(scr->getvisual()->red_mask,
scr->getvisual()->green_mask,
scr->getvisual()->blue_mask,
scr->getbytespp(), vi.depth/8);
else {
exit(EXIT_FAILURE);
}
break;
case PseudoColor:
case StaticColor:
case GrayScale:
case StaticGray:
case DirectColor:
exit(EXIT_FAILURE);
}
sinfo->p_screenbuf=new unsigned char[x_size*y_size*scr->getbytespp()];
ximg=XCreateImage(disp->getdisplay(), scr->getvisual(), scr->getdepth(),
ZPixmap, 0, (char*)sinfo->p_screenbuf,
x_size, y_size, scr->getscanlinepad(), 0);
}
canvas_x11::~canvas_x11() {
delete sinfo;
if(ximg) {
XDestroyImage(ximg);
ximg=NULL;
}
delete disp;
}
void canvas_x11::create_buffer(void) {
// wenn ich factorys habe sollte ich irgendwie das buffer erzeugen
// auslagern, da ich bei shm den buffer aus dem ximg erzeuge und
// ansonsten andersherum, sonst hab ich noch keine rechte idee wie
// ich das konsistent bewerkstelligen kann...
}
void canvas_x11::blit_screen(void) {
while(blit != NO_BLIT) {}
blit=BLIT;
XPutImage(disp->getdisplay(), win->getwindow(), scr->getgc(),
ximg, 0,0,0,0, x_size, y_size);
blit=NO_BLIT;
}