extern "C" int MAMain() { bool run = true; updateScreenDimensions(); registerSensors(); setFont(); while (run) { /// Get any available events. /// On back press close program. MAEvent event; while(maGetEvent(&event)) { if(event.type == EVENT_TYPE_SENSOR) { memcpy(gSensorValue[event.sensor.type], event.sensor.values, SENSOR_VALUES * sizeof(float)); } else if((event.type == EVENT_TYPE_KEY_PRESSED) && (event.key == MAK_BACK)) { run = false; } drawSensorOutput(); maUpdateScreen(); } } unregisterSensors(); };
Image<ColorRgb> & X11Grabber::grab() { updateScreenDimensions(); if (_XRenderAvailable && !_useXGetImage) { XRenderComposite( _x11Display, // *dpy, PictOpSrc, // op, _srcPicture, // src None, // mask _dstPicture, // dst _cropLeft, // src_x _cropTop, // src_y 0, // mask_x 0, // mask_y 0, // dst_x 0, // dst_y _croppedWidth, // width _croppedHeight); // height XSync(_x11Display, False); if (_XShmAvailable) { XShmGetImage(_x11Display, _pixmap, _xImage, 0, 0, AllPlanes); } else { _xImage = XGetImage(_x11Display, _pixmap, 0, 0, _croppedWidth, _croppedHeight, AllPlanes, ZPixmap); } } else { if (_XShmAvailable && !_useXGetImage) { XShmGetImage(_x11Display, _window, _xImage, _cropLeft, _cropTop, AllPlanes); } else { _xImage = XGetImage(_x11Display, _window, _cropLeft, _cropTop, _croppedWidth, _croppedHeight, AllPlanes, ZPixmap); } } if (_xImage == nullptr) { std::cerr << "X11GRABBER ERROR: Grab failed" << std::endl; return _image; } _imageResampler.processImage(reinterpret_cast<const uint8_t *>(_xImage->data), _xImage->width, _xImage->height, _xImage->bytes_per_line, PIXELFORMAT_BGR32, _image); return _image; }
Image<ColorRgb> & X11Grabber::grab() { updateScreenDimensions(); if (_XRenderAvailable && !_useXGetImage) { double scale_x = static_cast<double>(_windowAttr.width / _horizontalDecimation) / static_cast<double>(_windowAttr.width); double scale_y = static_cast<double>(_windowAttr.height / _verticalDecimation) / static_cast<double>(_windowAttr.height); double scale = std::min(scale_y, scale_x); _transform = { { { XDoubleToFixed(1), XDoubleToFixed(0), XDoubleToFixed(0) }, { XDoubleToFixed(0), XDoubleToFixed(1), XDoubleToFixed(0) }, { XDoubleToFixed(0), XDoubleToFixed(0), XDoubleToFixed(scale) } } }; XRenderSetPictureTransform (_x11Display, _srcPicture, &_transform); XRenderComposite( _x11Display, // dpy PictOpSrc, // op _srcPicture, // src None, // mask _dstPicture, // dst _cropLeft / _horizontalDecimation, // src_x _cropLeft _cropTop / _verticalDecimation, // src_y _cropTop 0, // mask_x 0, // mask_y 0, // dst_x 0, // dst_y _croppedWidth, // width _croppedHeight); // height XSync(_x11Display, False); if (_XShmAvailable) { XShmGetImage(_x11Display, _pixmap, _xImage, 0, 0, AllPlanes); } else { _xImage = XGetImage(_x11Display, _pixmap, 0, 0, _croppedWidth, _croppedHeight, AllPlanes, ZPixmap); } } else { if (_XShmAvailable && !_useXGetImage) { XShmGetImage(_x11Display, _window, _xImage, _cropLeft, _cropTop, AllPlanes); } else { _xImage = XGetImage(_x11Display, _window, _cropLeft, _cropTop, _croppedWidth, _croppedHeight, AllPlanes, ZPixmap); } } if (_xImage == nullptr) { Error(_log, "Grab Failed!"); return _image; } _imageResampler.processImage(reinterpret_cast<const uint8_t *>(_xImage->data), _xImage->width, _xImage->height, _xImage->bytes_per_line, PIXELFORMAT_BGR32, _image); return _image; }