Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NCSCALE_NONE blit smudges the last line #2799

Open
mulle-nat opened this issue Oct 31, 2024 · 0 comments
Open

NCSCALE_NONE blit smudges the last line #2799

mulle-nat opened this issue Oct 31, 2024 · 0 comments
Labels
bug Something isn't working

Comments

@mulle-nat
Copy link
Contributor

mulle-nat commented Oct 31, 2024

#define _XOPEN_SOURCE       /* See feature_test_macros(7) */
#include <wchar.h>
#include <notcurses/notcurses.h>
#include <stdio.h>
#include <assert.h>



#define R   0xFF, 0x00, 0x00, 0xFF
#define G   0x00, 0xFF, 0x00, 0xFF
#define B   0x00, 0x00, 0xFF, 0xFF
#define Y   0xFF, 0xFF, 0x00, 0xFF
#define W   0xFF, 0xFF, 0xFF, 0xFF
#define _   0x00, 0x00, 0x00, 0xFF

#define small_bitmap_h   32
#define small_bitmap_w   32

static unsigned char    small_bitmap[ 4 * small_bitmap_h * small_bitmap_w] =
{
   W, _, W, _,  W, _, W, _,  W, _, W, _,  W, _, W, _,  W, _, W, _,  W, _, W, _,  W, _, W, _,  W, _, W, _,
   _, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, R, R,  Y, Y, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, W,
   W, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, R, R,  Y, Y, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, _,
   _, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, R, R,  Y, Y, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, W,
   W, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, R, R,  Y, Y, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, _,
   _, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, R, R,  Y, Y, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, W,
   W, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, R, R,  Y, Y, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, _,
   _, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, R, R,  Y, Y, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, W,

   W, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, R, R,  Y, Y, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, _,
   _, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, R, R,  Y, Y, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, W,
   W, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, R, R,  Y, Y, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, _,
   _, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, R, R,  Y, Y, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, W,
   W, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, _, _,  _, _, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, _,
   _, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, _, _,  _, _, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, W,
   W, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, _, _,  _, _, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, _,
   _, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, _, _,  _, _, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, W,

   W, B, B, B,  B, B, B, B,  R, R, R, R,  _, _, _, _,  _, _, _, _,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, _,
   _, B, B, B,  B, B, B, B,  R, R, R, R,  R, _, _, _,  _, _, _, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, W,
   W, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, _, _,  _, _, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, _,
   _, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, R, _,  _, Y, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, W,
   W, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, R, R,  Y, Y, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, _,
   _, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, R, R,  Y, Y, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, W,
   W, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, R, R,  Y, Y, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, _,
   _, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, R, R,  Y, Y, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, W,

   W, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, R, R,  Y, Y, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, _,
   _, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, R, R,  Y, Y, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, W,
   W, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, R, R,  Y, Y, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, _,
   _, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, R, R,  Y, Y, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, W,
   W, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, R, R,  Y, Y, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, _,
   _, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, R, R,  Y, Y, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, W,
   W, B, B, B,  B, B, B, B,  R, R, R, R,  R, R, R, R,  Y, Y, Y, Y,  Y, Y, Y, Y,  G, G, G, G,  G, G, G, _,
   _, W, _, W,  _, W, _, W,  _, W, _, W,  _, W, _, W,  _, W, _, W,  _, W, _, W,  _, W, _, W,  _, W, _, W
};


static int   fill_plane_with_color(struct ncplane *n, uint32_t color)
{
    uint64_t   channels = 0;
    uint64_t   ul, ur, ll, lr;

    // Set the background color
    ncchannels_set_bg_rgb8( &channels,
                            (color >> 16) & 0xFF,
                            (color >> 8) & 0xFF,
                            color & 0xFF);
    // Use the same color for all corners
    ul = ur = ll = lr = channels;

    // Fill the plane with the gradient (which is uniform in this case)
    return ncplane_gradient( n,
                             0, 0,  // offx, offy
                             ncplane_dim_y( n), ncplane_dim_x( n),
                             " ",    // Use space to fill
                             NCSTYLE_NONE,
                             ul, ur, ll, lr);
}


int main( int argc, char *argv[])
{
   struct ncplane           *imageview;
   struct ncplane           *std;
   struct notcurses         *nc;
   struct ncvisual          *image;
   struct ncvgeom           geom;
   struct ncvisual_options  vopts;
   struct notcurses_options options =
   {
      .flags    = NCOPTION_SUPPRESS_BANNERS,
      .loglevel = NCLOGLEVEL_WARNING
   };
   int                     y;
   int                     x;
   unsigned int            content_w;
   unsigned int            content_h;

   nc  = notcurses_init( &options, NULL);
   std = notcurses_stdplane( nc);

   fill_plane_with_color( std, 0x202020);

   image = ncvisual_from_rgba( small_bitmap, small_bitmap_h, small_bitmap_w * 4, small_bitmap_w);
   vopts = (struct ncvisual_options)
   {
      .n       = std,
      .flags   = NCVISUAL_OPTION_CHILDPLANE,
      .blitter = NCBLIT_PIXEL,
      .scaling = NCSCALE_NONE
   };

   memset( &geom, 0, sizeof( geom));
   if( ! ncvisual_geom( nc, image, &vopts, &geom))
   {
      vopts.y    = 0;
      vopts.x    = 0;
      vopts.begy = 0;
      vopts.begx = 0;
      vopts.leny = geom.pixy;
      vopts.lenx = geom.pixy;

      imageview = ncvisual_blit( nc, image, &vopts);

      ncplane_dim_yx( std, &content_h, &content_w);

      y = (int) content_h / 2 - (int) geom.rcelly / 2;;
      x = (int) content_w / 2 - (int) geom.rcellx / 2;;

      ncplane_move_yx( imageview, y, x);
   }

   notcurses_render( nc);
   notcurses_get_blocking(nc, NULL);

   notcurses_stop( nc);

   return( 0);
}

image

Terminals: looks correct in xterm. Looks wrong in terminator and gnome terminal. Looks slightly off in cool retro term.
My guess is xterm is the only one, that does sixel or somesuch properly, and the downgraded blitter has a bug.

project(notcurses VERSION 3.0.11
@mulle-nat mulle-nat added the bug Something isn't working label Oct 31, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant