PreviousUpNext

15.3.738  src/lib/x-kit/widget/xkit/theme/widget/default/look/object-imp.api

## object-imp.api
#

# Compiled by:
#     src/lib/x-kit/widget/xkit-widget.sublib


stipulate
    include package   threadkit;                                # threadkit                     is from   src/lib/src/lib/thread-kit/src/core-thread-kit/threadkit.pkg
    #
#   package ap  =  client_to_atom;                              # client_to_atom                is from   src/lib/x-kit/xclient/src/iccc/client-to-atom.pkg
#   package au  =  authentication;                              # authentication                is from   src/lib/x-kit/xclient/src/stuff/authentication.pkg
#   package cpm =  cs_pixmap;                                   # cs_pixmap                     is from   src/lib/x-kit/xclient/src/window/cs-pixmap.pkg
#   package cpt =  cs_pixmat;                                   # cs_pixmat                     is from   src/lib/x-kit/xclient/src/window/cs-pixmat.pkg
#   package dy  =  display;                                     # display                       is from   src/lib/x-kit/xclient/src/wire/display.pkg
#   package xet =  xevent_types;                                # xevent_types                  is from   src/lib/x-kit/xclient/src/wire/xevent-types.pkg
#   package w2x =  windowsystem_to_xserver;                     # windowsystem_to_xserver       is from   src/lib/x-kit/xclient/src/window/windowsystem-to-xserver.pkg
#   package fil =  file__premicrothread;                        # file__premicrothread          is from   src/lib/std/src/posix/file--premicrothread.pkg
#   package fti =  font_index;                                  # font_index                    is from   src/lib/x-kit/xclient/src/window/font-index.pkg
#   package r2k =  xevent_router_to_keymap;                     # xevent_router_to_keymap       is from   src/lib/x-kit/xclient/src/window/xevent-router-to-keymap.pkg
#   package mtx =  rw_matrix;                                   # rw_matrix                     is from   src/lib/std/src/rw-matrix.pkg
#   package rgb =  rgb;                                         # rgb                           is from   src/lib/x-kit/xclient/src/color/rgb.pkg
#   package rop =  ro_pixmap;                                   # ro_pixmap                     is from   src/lib/x-kit/xclient/src/window/ro-pixmap.pkg
#   package rw  =  root_window;                                 # root_window                   is from   src/lib/x-kit/widget/lib/root-window.pkg
#   package rwv =  rw_vector;                                   # rw_vector                     is from   src/lib/std/src/rw-vector.pkg
#   package sep =  client_to_selection;                         # client_to_selection           is from   src/lib/x-kit/xclient/src/window/client-to-selection.pkg
#   package shp =  shade;                                       # shade                         is from   src/lib/x-kit/widget/lib/shade.pkg
#   package sj  =  socket_junk;                                 # socket_junk                   is from   src/lib/internet/socket-junk.pkg
#   package x2s =  xclient_to_sequencer;                        # xclient_to_sequencer          is from   src/lib/x-kit/xclient/src/wire/xclient-to-sequencer.pkg
#   package tr  =  logger;                                      # logger                        is from   src/lib/src/lib/thread-kit/src/lib/logger.pkg
#   package tsr =  thread_scheduler_is_running;                 # thread_scheduler_is_running   is from   src/lib/src/lib/thread-kit/src/core-thread-kit/thread-scheduler-is-running.pkg
#   package u1  =  one_byte_unt;                                # one_byte_unt                  is from   src/lib/std/one-byte-unt.pkg
#   package v1u =  vector_of_one_byte_unts;                     # vector_of_one_byte_unts       is from   src/lib/std/src/vector-of-one-byte-unts.pkg
#   package v2w =  value_to_wire;                               # value_to_wire                 is from   src/lib/x-kit/xclient/src/wire/value-to-wire.pkg
#   package wg  =  widget;                                      # widget                        is from   src/lib/x-kit/widget/old/basic/widget.pkg
#   package wi  =  window;                                      # window                        is from   src/lib/x-kit/xclient/src/window/window.pkg
#   package wme =  window_map_event_sink;                       # window_map_event_sink         is from   src/lib/x-kit/xclient/src/window/window-map-event-sink.pkg
#   package wpp =  client_to_window_watcher;                    # client_to_window_watcher      is from   src/lib/x-kit/xclient/src/window/client-to-window-watcher.pkg
#   package wy  =  widget_style;                                # widget_style                  is from   src/lib/x-kit/widget/lib/widget-style.pkg
#   package e2s =  xevent_to_string;                            # xevent_to_string              is from   src/lib/x-kit/xclient/src/to-string/xevent-to-string.pkg
#   package xc  =  xclient;                                     # xclient                       is from   src/lib/x-kit/xclient/xclient.pkg
#   package xj  =  xsession_junk;                               # xsession_junk                 is from   src/lib/x-kit/xclient/src/window/xsession-junk.pkg
#   package xt  =  xtypes;                                      # xtypes                        is from   src/lib/x-kit/xclient/src/wire/xtypes.pkg
#   package xtr =  xlogger;                                     # xlogger                       is from   src/lib/x-kit/xclient/src/stuff/xlogger.pkg

    package gtg =  guiboss_to_guishim;                          # guiboss_to_guishim            is from   src/lib/x-kit/widget/theme/guiboss-to-guishim.pkg

    package gd  =  gui_displaylist;                             # gui_displaylist               is from   src/lib/x-kit/widget/theme/gui-displaylist.pkg

    package pp  =  standard_prettyprinter;                      # standard_prettyprinter        is from   src/lib/prettyprint/big/src/standard-prettyprinter.pkg
    package r8  =  rgb8;                                        # rgb8                          is from   src/lib/x-kit/xclient/src/color/rgb8.pkg
    #
    package w2p =  object_to_objectspace;                       # object_to_objectspace         is from   src/lib/x-kit/widget/space/object/object-to-objectspace.pkg
    package p2w =  objectspace_to_object;                       # objectspace_to_object         is from   src/lib/x-kit/widget/space/object/objectspace-to-object.pkg
    #
    package g2d =  geometry2d;                                  # geometry2d                    is from   src/lib/std/2d/geometry2d.pkg
    package evt =  gui_event_types;                             # gui_event_types               is from   src/lib/x-kit/widget/gui/gui-event-types.pkg
    package gts =  gui_event_to_string;                         # gui_event_to_string           is from   src/lib/x-kit/widget/gui/gui-event-to-string.pkg

    package gt  =  guiboss_types;                               # guiboss_types                 is from   src/lib/x-kit/widget/gui/guiboss-types.pkg
    package wt  =  widget_theme;                                # widget_theme                  is from   src/lib/x-kit/widget/theme/widget/widget-theme.pkg

    package g2p =  gadget_to_pixmap;                            # gadget_to_pixmap              is from   src/lib/x-kit/widget/theme/gadget-to-pixmap.pkg

    #
    tracefile   =  "widget-unit-test.trace.log";

    nb = log::note_on_stderr;                                   # log                           is from   src/lib/std/src/log.pkg
herein

    # This api is implemented in:
    #
    #     src/lib/x-kit/widget/xkit/theme/widget/default/look/object-imp.pkg
    #
    api Object_Imp {

        #
        Object                                                                                          # This turns out not to get used in practice, and probably should be dropped if no use turns up for it.
          =
          { id:                                 Id,                                                     # Unique id to facilitate storing node_state instances in indexed datastructures like red-black trees.
            pass_something:                     Replyqueue -> (Int -> Void) -> Void,
            do_something:                       Int -> Void,
            do:                                 (Void -> Void) -> Void                                  # Used by widget subthreads to run code in main widget microthread.
          };

        Startup_Fn
          =
          { 
            gadget_to_guiboss:                  gt::Gadget_To_Guiboss,
            object_to_objectspace:              w2p::Object_To_Objectspace,
            do:                                 (Void -> Void) -> Void                                  # Used by widget subthreads to run code in main widget microthread.
          }
          ->
          Void;

        Shutdown_Fn
          =
          Void
          ->
          Void;                                                                                         # 

        Initialize_Gadget_Fn
          =
          {
            id:                                 Id,                                                     # Unique id.
            doc:                                String,
            site:                               g2d::Box,                                               # Window rectangle in which to draw.
            gadget_to_guiboss:                  gt::Gadget_To_Guiboss,
            object_to_objectspace:              w2p::Object_To_Objectspace,
            theme:                              wt::Widget_Theme,
            pass_font:                          List(String) -> Replyqueue
                                                             -> (evt::Font -> Void) -> Void,            # Nonblocking version of next, for use in imps.
             get_font:                          List(String) ->  evt::Font,                             # Accepts a list of font names which are tried in order.
            make_rw_pixmap:                     g2d::Size -> g2p::Gadget_To_Rw_Pixmap,                  # Make an Xserver-side rw_pixmap for scratch use by widget.  In general there is no need for the object to explicitly free these -- guiboss_imp will do this automatically when the gui is killed.
            #
            do:                                 (Void -> Void) -> Void                                  # Used by widget subthreads to run code in main widget microthread.
          }
          ->
          Void;


        Redraw_Request_Fn
          =
          {
            id:                                 Id,                                                     # Unique id.
            doc:                                String,
            frame_number:                       Int,                                                    # 1,2,3,... Purely for convenience of widget, guiboss-imp makes no use of this.
            site:                               g2d::Box,                                               # Window rectangle in which to draw.
            duration_in_seconds:                Float,                                                  # If state has changed look-imp should call redraw_gadget() before this time is up. Also useful for motionblur.
            gadget_to_guiboss:                  gt::Gadget_To_Guiboss,
            object_to_objectspace:              w2p::Object_To_Objectspace,
            gadget_mode:                        gt::Gadget_Mode,
            theme:                              wt::Widget_Theme,
            do:                                 (Void -> Void) -> Void,                                 # Used by widget subthreads to run code in main widget microthread.
            popup_nesting_depth:                Int                                                     # 0 for gadgets on basewindow, 1 for gadgets on popup on basewindow, 2 for gadgets on popup on popup, etc.
          }
          ->
          Void;


        Mouse_Click_Fn
          =
          {
            id:                                 Id,                                                     # Unique id.
            doc:                                String,
            event:                              gt::Mousebutton_Event,                                  # MOUSEBUTTON_PRESS or MOUSEBUTTON_RELEASE.
            button:                             evt::Mousebutton,
            point:                              g2d::Point,
            site:                               g2d::Box,                                               # Widget's assigned area in window coordinates.
            modifier_keys_state:                evt::Modifier_Keys_State,                               # State of the modifier keys (shift, ctrl...).
            mousebuttons_state:                 evt::Mousebuttons_State,                                # State of mouse buttons as a bool record.
            gadget_to_guiboss:                  gt::Gadget_To_Guiboss,
            object_to_objectspace:              w2p::Object_To_Objectspace,
            theme:                              wt::Widget_Theme
          }
          ->
          Void;

        Mouse_Drag_Fn
          =
          {
            id:                                 Id,                                                     # Unique id.
            doc:                                String,
            event_point:                        g2d::Point,
            start_point:                        g2d::Point,
            last_point:                         g2d::Point,
            site:                               g2d::Box,                                               # Widget's assigned area in window coordinates.
            phase:                              gt::Drag_Phase, 
            button:                             evt::Mousebutton,
            modifier_keys_state:                evt::Modifier_Keys_State,                               # State of the modifier keys (shift, ctrl...).
            mousebuttons_state:                 evt::Mousebuttons_State,                                # State of mouse buttons as a bool record.
            gadget_to_guiboss:                  gt::Gadget_To_Guiboss,
            object_to_objectspace:              w2p::Object_To_Objectspace,
            theme:                              wt::Widget_Theme,
            do:                                 (Void -> Void) -> Void                                  # Used by widget subthreads to run code in main widget microthread.
          }
          ->
          Void;

        Mouse_Transit_Fn                                                                                # Note that buttons are always all up in a mouse-transit event -- otherwise it is a mouse-drag event.
          =
          {
            id:                                 Id,                                                     # Unique id.
            doc:                                String,
            event_point:                        g2d::Point,
            site:                               g2d::Box,                                               # Widget's assigned area in window coordinates.
            transit:                            gt::Gadget_Transit,                                     # Mouse is entering (CAME) or leaving (LEFT) widget, or moving (MOVE) across it.
            modifier_keys_state:                evt::Modifier_Keys_State,                               # State of the modifier keys (shift, ctrl...).
            gadget_to_guiboss:                  gt::Gadget_To_Guiboss,
            object_to_objectspace:              w2p::Object_To_Objectspace,
            theme:                              wt::Widget_Theme,
            do:                                 (Void -> Void) -> Void                                  # Used by widget subthreads to run code in main widget microthread.
          }
          ->
          Void;

        Key_Event_Fn
          =
          {
            id:                                 Id,                                                     # Unique id.
            doc:                                String,
            keystroke:                          gt::Keystroke_Info,                                     # Keystring etc for event.
            site:                               g2d::Box,                                               # Widget's assigned area in window coordinates.
            gadget_to_guiboss:                  gt::Gadget_To_Guiboss,
            object_to_objectspace:              w2p::Object_To_Objectspace,
            theme:                              wt::Widget_Theme
          }
          ->
          Void;

        Note_Keyboard_Focus_Fn_Arg
          =
          {
            id:                                 Id,                                                     # Unique id.
            doc:                                String,
            have_keyboard_focus:                Bool,                                                   # 
            gadget_to_guiboss:                  gt::Gadget_To_Guiboss,
            object_to_objectspace:              w2p::Object_To_Objectspace,
            theme:                              wt::Widget_Theme,
            do:                                 (Void -> Void) -> Void                                  # Used by widget subthreads to run code in main widget microthread.
          };
        Note_Keyboard_Focus_Fn = Note_Keyboard_Focus_Fn_Arg -> Void;

        Object_Option
            #
            = MICROTHREAD_NAME                  String                                                  # 
            | ID                                Id                                                      # Unique ID for imp, issued by issue_unique_id::issue_unique_id().
            | DOC                               String                                                  # Documentation string for widget, for debugging purposes.
            #
            | WIDGET_CONTROL_CALLBACK           ( p2w::Objectspace_To_Object -> Void    )               # Gui boss registers this maildrop to get a port to us once we start up.
            | OBJECT_CALLBACK                   (     Null_Or(Object) -> Void   )                       # App      registers this maildrop to get (THE object_port) from us once we start up, and NULL when we shut down.
            #
            | STARTUP_FN                        Startup_Fn                                              # Application-specific handler for object-imp startup.
            | SHUTDOWN_FN                       Shutdown_Fn                                             # Application-specific handler for object-imp shutdown -- mainly saving state for possible later object restart.
            #                                                                                           #
            | INITIALIZE_GADGET_FN              Initialize_Gadget_Fn                                    # Typically used to set up widget background.
            | REDRAW_REQUEST_FN                 Redraw_Request_Fn                                       # Application-specific handler for start-of-frame events from guiboss-imp.
            #
            | MOUSE_CLICK_FN                    Mouse_Click_Fn                                          # Application-specific handler for mousebutton clicks.
            #
            | MOUSE_DRAG_FN                     Mouse_Drag_Fn                                           # Application-specific handler for mouse motions.
            | MOUSE_TRANSIT_FN                  Mouse_Transit_Fn                                        # Application-specific handler for mouse motions.
            #
            | KEY_EVENT_FN                      Key_Event_Fn                                            # Application-specific handler for keyboard key-press and key-release events.
            | NOTE_KEYBOARD_FOCUS_FN            Note_Keyboard_Focus_Fn
            ;

        Object_Arg        =  List(Object_Option);                                                       # No required components at present.

        make_object_start_fn
            :
            Object_Arg
            ->
            gt::Object_Start_Fn
            ;


        pprint_object_arg:      pp::Prettyprinter -> Object_Arg -> Void;
    };


end;


Comments and suggestions to: bugs@mythryl.org

PreviousUpNext