Problem with equivalent with other external scripts like C#
Hello,
I found bug if I write an example with checking printfs with xcb_screen_t in c/c++ = ok But I try to write in C# xcb_screen_t as struct and test in Console-Project but measurements are wrong example C/c++ screen->width_in_pixel = 1920 and screen->height_in_pixel = 1080 in my correct monitor
I want port to C# with p/invoke functions but they made crazy if it tells measurement is wrong. That's why how do I know to improve in c++ Example: uint16_t xcb_creen_width_in_pixel(xcb_screen_t *screen) and also height like that and p/invoke shows correct measurements. But I have made own library with xcb
I will show you on morning. Ok I will show you example: in xporto.c end of lines
/*
Custom with xcb_screen_t methods
By DeafMan1983 , Germany
*/
xcb_window_t
xcb_screen_root(xcb_screen_t *screen)
{
return screen->root;
}
xcb_colormap_t
xcb_screen_default_colormap(xcb_screen_t *screen)
{
return screen->default_colormap;
}
uint32_t
xcb_screen_white_pixel(xcb_screen_t *screen)
{
return screen->white_pixel;
}
uint32_t
xcb_screen_black_pixel(xcb_screen_t *screen)
{
return screen->black_pixel;
}
uint32_t
xcb_screen_current_input_masks(xcb_screen_t *screen)
{
return screen->current_input_masks;
}
uint16_t
xcb_screen_width_in_pixels(xcb_screen_t *screen)
{
return screen->width_in_pixels;
}
uint16_t
xcb_screen_height_in_pixels(xcb_screen_t *screen)
{
return screen->height_in_pixels;
}
uint16_t
xcb_screen_width_in_millimeters(xcb_screen_t *screen)
{
return screen->width_in_millimeters;
}
uint16_t
xcb_screen_height_in_millimeters(xcb_screen_t *screen)
{
return screen->height_in_millimeters;
}
And xporto.h
also end of line before #ifdef __cplusplus
/*
Custom with xcb_screen_t methods
By DeafMan1983 , Germany
*/
xcb_window_t
xcb_screen_root(xcb_screen_t *screen);
xcb_colormap_t
xcb_screen_default_colormap(xcb_screen_t *screen);
uint32_t
xcb_screen_white_pixel(xcb_screen_t *screen);
uint32_t
xcb_screen_black_pixel(xcb_screen_t *screen);
uint32_t
xcb_screen_current_input_masks(xcb_screen_t *screen);
uint16_t
xcb_screen_width_in_pixels(xcb_screen_t *screen);
uint16_t
xcb_screen_height_in_pixels(xcb_screen_t *screen);
uint16_t
xcb_screen_width_in_millimeters(xcb_screen_t *screen);
uint16_t
xcb_screen_height_in_millimeters(xcb_screen_t *screen);
And I test in main.c
#include <xcb/xcb.h>
#include <stdio.h>
#include <stdlib.h>
xcb_connection_t *c;
const xcb_setup_t *setup;
xcb_screen_t *screen;
int main(void)
{
c = xcb_connect(NULL, NULL);
if (xcb_connection_has_error(c))
{
printf("Error!\n");
return EXIT_FAILURE;
}
setup = xcb_get_setup(c);
screen = xcb_setup_roots_iterator(setup).data;
printf("Screen added.\n");
xcb_window_t root_old = screen->root;
xcb_window_t root_new = xcb_screen_root(screen);
printf("old root is %d and new root is %d \n", root_old, root_new);
uint16_t width_old = screen->width_in_pixels;
uint16_t width_new = xcb_screen_width_in_pixels(screen);
printf("old width is %d and new width is %d \n", width_old, width_new);
uint16_t height_old = screen->height_in_pixels;
uint16_t height_new = xcb_screen_height_in_pixels(screen);
printf("old height is %d and new height is %d \n", height_old, height_new);
xcb_disconnect(c);
return EXIT_SUCCESS;
}
Result shows like charm.
That is a great idea if you like to use for 1:1 blittable equivalent for other programming languages example Java, Python, C# or Rust etc...
But in C# crashed as Segmentation fault (core dumped) I will look and fix for team work.