PreviousUpNext

15.3.693  src/lib/x-kit/xclient/pkg/window/draw-imp.api

## draw-imp.api

# Compiled by:
#     src/lib/x-kit/xclient/xclient-internals.sublib


# This api is implemented in:
#
#     src/lib/x-kit/xclient/pkg/window/draw-imp.pkg

stipulate
    include threadkit;                                  # threadkit                             is from   src/lib/src/lib/thread-kit/src/core-thread-kit/threadkit.pkg
    #
    package s2t =  xsocket_to_topwindow_router;         # xsocket_to_topwindow_router           is from   src/lib/x-kit/xclient/pkg/window/xsocket-to-topwindow-router.pkg
    package xg  =  xgeometry;                           # xgeometry                             is from   src/lib/std/2d/xgeometry.pkg
    package p2g =  pen_to_gcontext_imp;                 # pen_to_gcontext_imp                   is from   src/lib/x-kit/xclient/pkg/window/pen-to-gcontext-imp.pkg
    package m1  =  oneshot_maildrop;                    # oneshot_maildrop                      is from   src/lib/src/lib/thread-kit/src/core-thread-kit/oneshot-maildrop.pkg
    package pg  =  pen_guts;                            # pen_guts                              is from   src/lib/x-kit/xclient/pkg/window/pen-guts.pkg
    package vu8 =  vector_of_one_byte_unts;                             # vector_of_one_byte_unts                               is from   src/lib/std/src/vector-of-one-byte-unts.pkg
    package xok =  xsocket;                             # xsocket                               is from   src/lib/x-kit/xclient/pkg/wire/xsocket.pkg
    package xt  =  xtypes;                              # xtypes                                is from   src/lib/x-kit/xclient/pkg/wire/xtypes.pkg
herein

    api Draw_Imp {

        package s: api {
            #
            Mapped_State
              = TOPWINDOW_IS_NOW_UNMAPPED
              | TOPWINDOW_IS_NOW_MAPPED
              | FIRST_EXPOSE
              ;
        };

        package t: api {
            #
            Poly_Text
             = TEXT  (Int, String)
             | FONT  xt::Font_Id
             ;
        };

        package o: api {
            Draw_Opcode
             = POLY_POINT     (Bool, List( xg::Point ))
             | POLY_LINE      (Bool, List( xg::Point ))
             | FILL_POLY      (xt::Shape, Bool, List( xg::Point ))
             | POLY_SEG       List( xg::Line )
             | POLY_BOX       List( xg::Box )
             | POLY_FILL_BOX  List( xg::Box )
             | POLY_ARC       List( xg::Arc )
             | POLY_FILL_ARC  List( xg::Arc )
             | COPY_AREA
                   ( xg::Point,
                     xt::Xid,
                     xg::Box,
                     m1::Oneshot_Maildrop (Void -> List( xg::Box ) )
                   )
             | COPY_PLANE
                   ( xg::Point,
                     xt::Xid,
                     xg::Box,
                     Int,
                     m1::Oneshot_Maildrop (Void -> List( xg::Box ) )
                   )
             | COPY_PMAREA   (xg::Point, xt::Xid, xg::Box)
             | COPY_PMPLANE  (xg::Point, xt::Xid, xg::Box, Int)
             | CLEAR_AREA     xg::Box
             | PUT_IMAGE
                 {
                   to_point:  xg::Point,
                   size:      xg::Size,
                   depth:     Int,
                   lpad:      Int,
                   format:    xt::Image_Format,
                   data:      vu8::Vector
                 }
             | POLY_TEXT8   (xt::Font_Id, xg::Point, List(t::Poly_Text))
             | IMAGE_TEXT8  (xt::Font_Id, xg::Point, String)
             ;
        };

        package i: api {
            #
            Destroy_Item
             = WINDOW  xt::Window_Id
             | PIXMAP  xt::Pixmap_Id
             ;
        };

        package d: api {
            #
            Draw_Op
              = DRAW
                  { to:    xt::Xid,
                    pen:   pg::Pen,
                    op:    o::Draw_Opcode
                  }

              | LOCK_WINDOW_FOR_RUBBERBANDING  {
                  draw_slot:       Mailslot( Draw_Op ), # Stream of drawing commands for the overlay 
                  release':        Mailop( Void )               # Overlay release mailop
                }
              | DESTROY    i::Destroy_Item
              | FLUSH      Oneshot_Maildrop( Void )
              | THREAD_ID  Oneshot_Maildrop( Int  )
              | BATCHING_ON
              | BATCHING_OFF
              ;
        };

        make_draw_imp
           :
           ( Mailop( s::Mapped_State ),                         # Used to tell draw_imp when its window is un/mapped.
             p2g::Pen_To_Gcontext_Imp,
             s2t::Xsocket_To_Topwindow_Router,
             xok::Xsocket
           )
           ->
           d::Draw_Op
           ->
           Void;

    };
end;                            # stipulate



## COPYRIGHT (c) 1990, 1991 by John H. Reppy.  See COPYRIGHT file for details.
## Subsequent changes by Jeff Prothero Copyright (c) 2010-2012,
## released under Gnu Public Licence version 3.


Comments and suggestions to: bugs@mythryl.org

PreviousUpNext