glenda.party
term% ls -F
term% cat index.txt
BITBLT(2)                     System Calls Manual                    BITBLT(2)

NAME
       bitblt, bitbltclip, clipline, point, segment, polysegment, arc, circle,
       disc,  ellipse,  texture,  border,  string,  strsize, strwidth, Fcode -
       graphics functions

SYNOPSIS
       #include <u.h>
       #include <libg.h>

       void  bitblt(Bitmap *db, Point dp, Bitmap *sb,
                 Rectangle sr, Fcode f)

       int   bitbltclip(void *)

       int   clipline(Rectangle r, Point *p0, Point *p1)

       void  point(Bitmap *b, Point p, int v, Fcode f)

       void  segment(Bitmap *b, Point p, Point q, int v, Fcode f)

       void  polysegment(Bitmap *b, int n, Point *pp, int v, Fcode f)

       void  circle(Bitmap *b, Point p, int r, int v, Fcode f)

       void  disc(Bitmap *b, Point p, int r, int v, Fcode)

       void  arc(Bitmap *b, Point p0, Point p1, Point p2, int v, Fcode f)

       void  ellipse(Bitmap *b, Point p, int a, int b, int v, Fcode f)

       void  texture(Bitmap *b, Rectangle r, Bitmap *t, Fcode f)

       void  border(Bitmap *b, Rectangle r, int w, Fcode f)

       Point string(Bitmap *b, Point p, Font *ft, char *s, Fcode f)

       Point strsize(Font *ft, char *s)

       long  strwidth(Font *ft, char *s)

       enum Fcode {
               Zero,     DnorS,    DandnotS, notS,
               notDandS, notD,     DxorS,    DnandS,
               DandS,    DxnorS,   D,        DornotS,
               S,        notDorS,  DorS,     F,
       } Fcode;

DESCRIPTION
       Bitblt (bit-block transfer) takes bits from rectangle sr in the  source
       Bitmap  sb and overlays them on a congruent rectangle with the min cor‐
       ner at point dp in the destination bitmap, db.  The f parameter defines
       each destination pixel as a function of the source and destination pix‐
       els.  The sixteen codes in Fcode give all possible  boolean  operations
       on the source S and destination D.  The code values may be expressed as
       boolean  operations  on  the values S and D.  For example, D|S computes
       the result as the logical or of the destination pixel's old  value  and
       the  overlaying  source pixel's value.  If pixels are more than one bit
       deep, the operations are still bitwise.  The Zero and F codes result in
       new pixel values that are all zeros or all ones, respectively.

       If the source and destination bitmaps have different depths, the source
       rectangle is first converted to have the same depth as the destination,
       as follows: conversion to a smaller number of bits per pixel is  accom‐
       plished  by taking the desired number of high order bits; conversion to
       a larger number of bits per pixel is accomplished by putting the  small
       value  into  the  high  order bits, and replicating it as many times as
       necessary to fill the lower order bits.

       All of the drawing graphics functions clip the  rectangle  against  the
       source  and  destination  bitmaps' clip rectangles, so that only pixels
       within the destination bitmap are changed and  none  are  changed  that
       would have come from areas outside the source bitmap.  Bitbltclip takes
       a  pointer to the first argument of a bitblt argument list and clips dp
       and sr so the resulting bitblt is confined to the source  and  destina‐
       tion  bitmaps.  It returns one if the x and y dimensions of the result‐
       ing bitblt are positive; zero otherwise.

       Point changes the value of the destination point p in bitmap b  accord‐
       ing  to function code f.  The source is a pixel with value v.  The con‐
       stant ~0 represents the maximum pixel value.

       Segment, circle, disc, and ellipse all draw in bitmap b  with  function
       code  f and a source pixel with value v.  Arc draws a circular arc cen‐
       tered on p0, traveling clockwise from p1 to p2 or a point on the circle
       near p2.  Segment draws a line segment in bitmap b from point p  to  q.
       The  segment is half-open: p is the first point of the segment and q is
       the first point beyond the segment, so adjacent segments  sharing  end‐
       points  abut.   Polysegment draws the n-1 segments joining the n points
       in the array pointed to by pp.  Clipline clips the  line  segment  from
       *p0  to *p1 (p0 is closed, p1 is open) to rectangle r, adjusting p0 and
       p1 so that the segment is within the rectangle and *p1 is  closed.   It
       returns 0 if none of the segment is in the rectangle, 1 otherwise.

       Circle draws a circle with radius r and center at point p.  Disc is the
       same  except  that  it fills the circle.  Ellipse draws an ellipse with
       horizontal semi-axis a and vertical semi-axis b.

       Border draws, with function f in bitmap b, the rectangular outline with
       lines of width w fitting just inside rectangle r.

       Texture draws, with function f in bitmap b, a texture using the  bitmap
       specified by t.  The texture bitmap is aligned on b's coordinate system
       so that (0,0) in both coordinate systems coincide, and then t is repli‐
       cated  to  form a tiling of b.  The tiling is clipped to rectangle r in
       b, and then transferred to b using the specified function.

       String draws the text  characters  given  by  the  null-terminated  UTF
       string  s  into  bitmap b, using font ft.  The upper left corner of the
       first character (i.e., a point that is ft->ascent above  the  baseline)
       is  placed at point p, and subsequent characters are placed on the same
       baseline, displaced to the right by  the  previous  character's  width.
       The  individual  characters  are  bitblt'ed into the destination, using
       drawing function f.  String returns the point after the final character
       of s; this can be outside b if the string was clipped.

       If a character in the string would have zero width,  either  explicitly
       or  because  no  image is present for the character in the font, string
       replaces it with the image of the character with value zero (tradition‐
       ally a ‘Peter face').  If that character has zero  width,  string  will
       get a fatal error.

       The  bounding  box  for  text to be drawn with string in font ft can be
       found with strsize; it returns the max point of the bounding  box,  as‐
       suming  a  min point of (0,0).  Strwidth returns the x-component of the
       max point.

SOURCE
       /sys/src/libg

SEE ALSO
       graphics(2), utf(6), add(2)

DIAGNOSTICS
       These routines call the graphics error function on fatal errors.

                                                                     BITBLT(2)