💾 Archived View for gmi.noulin.net › gitRepositories › heartbeat › file › shpPackages › termbox › ga… captured on 2024-06-20 at 11:55:59. Gemini links have been rewritten to link to archived content

View Raw

More Information

-=-=-=-=-=-=-

heartbeat

Log

Files

Refs

README

gallery.c (3352B)

     1 #! /usr/bin/env sheepy
     2 /* or direct path to sheepy: #! /usr/local/bin/sheepy */
     3 
     4 /* Libsheepy documentation: https://spartatek.se/libsheepy/ */
     5 #include "libsheepyObject.h"
     6 #include "termbox.h"
     7 #include <stdarg.h>
     8 
     9 #include "images.h"
    10 
    11 int argc; char **argv;
    12 
    13 /* enable/disable logging */
    14 /* #undef pLog */
    15 /* #define pLog(...) */
    16 
    17 typ struct {
    18   bool quit;
    19   u32 onCount;
    20 } contextt;
    21 
    22 typ struct {
    23   u32 x;
    24   u32 y;
    25   u32 width;
    26   u32 height;
    27   u32 color;
    28   char line[2048];
    29 } bubblet;
    30 
    31 bubblet bub[300] = init0Var;
    32 
    33 void print_tb(const char *str, int x, int y, uint16_t fg, uint16_t bg)
    34 {
    35   while (*str) {
    36     uint32_t uni;
    37     str += tb_utf8_char_to_unicode(&uni, str);
    38     tb_change_cell(x, y, uni, fg, bg);
    39     x++;
    40   }
    41 }
    42 
    43 void printf_tb(int x, int y, uint16_t fg, uint16_t bg, const char *fmt, ...)
    44 {
    45   char buf[4096];
    46   va_list vl;
    47   va_start(vl, fmt);
    48   vsnprintf(buf, sizeof(buf), fmt, vl);
    49   va_end(vl);
    50   print_tb(buf, x, y, fg, bg);
    51 }
    52 
    53 
    54 int main(int ARGC, char** ARGV) {
    55 
    56   argc = ARGC; argv = ARGV;
    57 
    58   initLibsheepy(ARGV[0]);
    59   setLogMode(LOG_FUNC);
    60   //openProgLogFile();
    61   //setLogSymbols(LOG_UTF8);
    62   //disableLibsheepyErrorLogs;
    63 
    64   int r = tb_init();
    65   if (r) {
    66     logE("tb_init() failed with error code %d\n", r);
    67     XFailure;
    68   }
    69 
    70   tb_select_output_mode(TB_OUTPUT_TRUECOLOR);
    71 
    72   //tb_set_cursor(0,0);
    73 
    74   void draw_all(void) {
    75     tb_clear();
    76     //tb_change_cell(/*x*/ 2, /*y*/ 2, '@', TB_GREEN, TB_WHITE | TB_BOLD);
    77     tb_present();
    78   }
    79 
    80   draw_all();
    81 
    82   /* range(j, ybmXT_549309366Height) { */
    83   /*   range(i, ybmXT_549309366Width) { */
    84   /*     if (j & 1) { */
    85   /*       // odd line */
    86   /*       tb_change_cell(#<{(|x|)}># i, #<{(|y|)}># j/2, 0x2584, ybmXT_549309366Pixels[j * ybmXT_549309366Width + i], ybmXT_549309366Pixels[(j-1) * ybmXT_549309366Width + i]); */
    87   /*     } */
    88   /*     else { */
    89   /*       // even line */
    90   /*       tb_change_cell(#<{(|x|)}># i, #<{(|y|)}># j/2, 0x2584, TB_DEFAULT, ybmXT_549309366Pixels[j * ybmXT_549309366Width + i]); */
    91   /*     } */
    92   /*   } */
    93   /* } */
    94 
    95   int imageIndex = 0;
    96 
    97   void showImage() {
    98     tb_clear();
    99     range(j, heights[imageIndex]) {
   100       range(i, widths[imageIndex]) {
   101         if (j & 1) {
   102           // odd line
   103           tb_change_cell(/*x*/ i, /*y*/ j/2, 0x2584, pixels[imageIndex][j * widths[imageIndex] + i], pixels[imageIndex][(j-1) * widths[imageIndex] + i]);
   104         }
   105         else {
   106           // even line
   107           tb_change_cell(/*x*/ i, /*y*/ j/2, 0x2584, TB_BLACK, pixels[imageIndex][j * widths[imageIndex] + i]);
   108         }
   109       }
   110     }
   111   }
   112   showImage();
   113 
   114   tb_present();
   115 
   116   struct tb_event ev;
   117   while (tb_poll_event(&ev)) {
   118     switch (ev.type) {
   119       case TB_EVENT_KEY:
   120         switch (ev.key) {
   121           /* case TB_KEY_ESC: */
   122           /*   ctx.quit = yes; */
   123           /*   goto done; */
   124           /*   break; */
   125           case TB_KEY_SPACE:
   126             inc imageIndex;
   127             if (imageIndex == ARRAY_SIZE(widths)) imageIndex = 0;
   128             showImage();
   129             break;
   130         }
   131         if (ev.ch == 'q') {
   132           goto done;
   133         }
   134 
   135         //tb_stringf(2, 30, TB_WHITE, TB_DEFAULT, "key code: %5d, char: %5d, mod: %5d", ev.key, ev.ch, ev.mod);
   136         break;
   137       case TB_EVENT_RESIZE:
   138         draw_all();
   139         break;
   140     }
   141     tb_present();
   142   }
   143 
   144   done:
   145   tb_shutdown();
   146   XSuccess;
   147 }
   148 // vim: set expandtab ts=2 sw=2: