main.c 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4. #include <cairo.h>
  5. #include <SDL2/SDL.h>
  6. #define SCREEN_WIDTH 800
  7. #define SCREEN_HEIGHT 600
  8. int main(int argc, char *argv[])
  9. {
  10. SDL_Rect screen_rect = {
  11. .x = 0, .y = 0,
  12. .w = SCREEN_WIDTH,
  13. .h = SCREEN_HEIGHT
  14. };
  15. SDL_Init(SDL_INIT_EVERYTHING);
  16. SDL_Window *const window = SDL_CreateWindow(
  17. "Multik",
  18. 100, 100,
  19. SCREEN_WIDTH, SCREEN_HEIGHT,
  20. SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE);
  21. SDL_Renderer *const renderer = SDL_CreateRenderer(
  22. window, -1,
  23. SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
  24. SDL_Texture *texture = SDL_CreateTexture(
  25. renderer,
  26. SDL_PIXELFORMAT_ARGB8888,
  27. SDL_TEXTUREACCESS_STREAMING,
  28. SCREEN_WIDTH, SCREEN_HEIGHT);
  29. float a = 0.0f;
  30. bool stop = false;
  31. SDL_Event event;
  32. /* TODO: FPS is not shown */
  33. while (!stop) {
  34. while (!stop && SDL_PollEvent(&event)) {
  35. switch (event.type) {
  36. case SDL_QUIT:
  37. stop = true;
  38. break;
  39. }
  40. }
  41. SDL_RenderClear(renderer);
  42. void *pixels;
  43. int pitch;
  44. SDL_LockTexture(texture, NULL, &pixels, &pitch);
  45. cairo_surface_t *surface =
  46. cairo_image_surface_create_for_data(
  47. pixels,
  48. CAIRO_FORMAT_ARGB32,
  49. SCREEN_WIDTH, SCREEN_HEIGHT, pitch);
  50. cairo_t *cr = cairo_create(surface);
  51. cairo_set_source_rgb (cr, 0, 0, 0);
  52. cairo_paint (cr);
  53. cairo_select_font_face(
  54. cr, "serif",
  55. CAIRO_FONT_SLANT_NORMAL,
  56. CAIRO_FONT_WEIGHT_BOLD);
  57. cairo_set_font_size(cr, 32.0);
  58. cairo_set_source_rgb(cr, 0.0, 1.0, 1.0);
  59. cairo_move_to(cr, 10.0, 50.0);
  60. cairo_show_text(cr, "4HEad");
  61. cairo_set_source_rgb(cr, 1.0, 0.0, 0.0);
  62. cairo_move_to(cr, 0.0, 0.0);
  63. cairo_curve_to(cr, 0.0 + a, SCREEN_HEIGHT + a,
  64. SCREEN_WIDTH - a, SCREEN_HEIGHT - a,
  65. SCREEN_WIDTH, 0.0);
  66. cairo_set_line_width(cr, 5);
  67. cairo_stroke(cr);
  68. cairo_destroy(cr);
  69. cairo_surface_destroy(surface);
  70. SDL_UnlockTexture(texture);
  71. SDL_RenderCopy(renderer, texture,
  72. &screen_rect,
  73. &screen_rect);
  74. SDL_RenderPresent(renderer);
  75. a += 1.0f;
  76. }
  77. SDL_DestroyTexture(texture);
  78. SDL_DestroyRenderer(renderer);
  79. SDL_DestroyWindow(window);
  80. SDL_Quit();
  81. return 0;
  82. }