Back to index

plt-scheme  4.2.1
Defines | Functions | Variables
xwScrollText.c File Reference
#include <X11/IntrinsicP.h>
#include <X11/StringDefs.h>
#include <X11/Xaw/AsciiText.h>
#include <xwScrollTextP.h>

Go to the source code of this file.

Defines

#define CLASS(field)   scrollingTextClassRec.scrolling_text_class.field
#define PRIVATE(w, field)   (((ScrollingTextWidget) w)->scrollingText.field)
#define Offset(field)   XtOffsetOf(ScrollingTextRec, scrollingText.field)

Functions

static void ClassInitialize ()
static void Initialize ()
static void Destroy ()
static Boolean SetValues ()
static void AdjustForMovement ()
static void AdjustForChange ()
static Boolean AfterAction ()
static void Initialize (Widget req, Widget new, ArgList args, Cardinal *num_args)
static Boolean SetValues (Widget old, Widget request, Widget new, ArgList args, Cardinal *num_args)
static void Destroy (Widget w)
static void AdjustForMovement (Widget widget, XtPointer client_data, String action, XEvent *event, String *params, Cardinal *num_params)
static Boolean AfterAction (XtPointer client_data)
static void AdjustForChange (Widget widget, XtPointer client_data, XtPointer call_data)

Variables

static XtResource resources []
static char translations [] = "<Key>Return:no-op() \n <Key>Linefeed:no-op()"
ScrollingTextClassRec scrollingTextClassRec
WidgetClass scrollingTextWidgetClass = (WidgetClass) &scrollingTextClassRec

Define Documentation

#define CLASS (   field)    scrollingTextClassRec.scrolling_text_class.field

Definition at line 36 of file xwScrollText.c.

#define Offset (   field)    XtOffsetOf(ScrollingTextRec, scrollingText.field)
#define PRIVATE (   w,
  field 
)    (((ScrollingTextWidget) w)->scrollingText.field)

Definition at line 37 of file xwScrollText.c.


Function Documentation

static void AdjustForChange ( )

Here is the caller graph for this function:

static void AdjustForChange ( Widget  widget,
XtPointer  client_data,
XtPointer  call_data 
) [static]

Definition at line 259 of file xwScrollText.c.

{
    Widget source, sink, text = XtParent(widget), porthole = XtParent(text);
    Position x, prevx, top;
    Dimension lm, width, phwidth, fwidth = PRIVATE(porthole,font_width);
    XawTextPosition pos, eol, junk;
    int pd, ed, morejunk;

    XtVaGetValues(text,
                XtNtextSource, &source,
                XtNtextSink, &sink,
                XtNleftMargin, &lm,
                XtNx, &prevx,
                NULL);

    XtVaGetValues(porthole, XtNwidth, &phwidth, NULL);
    top = phwidth - fwidth - fwidth;

    pos = XawTextGetInsertionPoint(text);
    eol = XawTextSourceScan(source, pos, XawstAll, XawsdRight, 1, True);

    /* Calculations of pd and ed take tabs into account */
    XawTextSinkFindDistance(sink, 0, lm, pos, &pd, &junk, &morejunk);
    XawTextSinkFindDistance(sink, 0, lm, eol, &ed, &junk, &morejunk);

    if (pd > top - prevx)
    {
       x =  top - pd;
    }
    else if (pd < fwidth - prevx)
    {
       x = fwidth - pd;
    }
    else
    {
       x = prevx;
    }

    /* Stretch widget to eliminate solid block at end of line */
    width = ed + fwidth;
    
    XtVaSetValues(text, XtNx, x, XtNwidth, width, NULL);
}
static void AdjustForMovement ( ) [static]

Here is the caller graph for this function:

static void AdjustForMovement ( Widget  widget,
XtPointer  client_data,
String  action,
XEvent *  event,
String *  params,
Cardinal *  num_params 
) [static]

Definition at line 200 of file xwScrollText.c.

{
    Widget text = (Widget) client_data;

    if (widget != text)
    {
       return;
    }

    /*
     * This routine gets called before the action takes place so set
     * up a work proc to do the work after the action has taken place
     */
    if (strcmp(action, "forward-character")  == 0 ||
       strcmp(action, "backward-character") == 0 ||
       strcmp(action, "forward-word")       == 0 ||
       strcmp(action, "backward-word")      == 0 ||
       strcmp(action, "beginning-of-line")  == 0 ||
       strcmp(action, "end-of-line")        == 0)
    {
       /*
        * Positioning with the mouse results in work_proc being corrupted with
        * the result that the test fails and scrolling stops happening. I don't
        * understand what is going on. Therefore, for the time being always
        * register a work proc. It is probably unlikely that events will come
        * in fast enough anyway for there to be an unexecuted one still around.

       if (!PRIVATE(text,work_proc))
       {
        */
           PRIVATE(text,work_proc) =
              XtAppAddWorkProc(XtWidgetToApplicationContext(widget),
                                          AfterAction, (XtPointer) widget);
     /* } */
    }
}
static Boolean AfterAction ( ) [static]
static Boolean AfterAction ( XtPointer  client_data) [static]

Definition at line 244 of file xwScrollText.c.

{
    Widget text = (Widget) client_data;


    AdjustForChange(XawTextGetSource(text), (XtPointer) 0, (XtPointer) 0);

    PRIVATE(text,work_proc) = (XtWorkProcId) 0;

    return True;
}

Here is the call graph for this function:

static void ClassInitialize ( ) [static]

Definition at line 109 of file xwScrollText.c.

{
     CLASS(translations) = XtParseTranslationTable(translations);
}
static void Destroy ( )

Here is the caller graph for this function:

static void Destroy ( Widget  w) [static]

Definition at line 189 of file xwScrollText.c.

{
    if (PRIVATE(w,action_hook))
    {
       XtRemoveActionHook(PRIVATE(w,action_hook));
    }
}
static void Initialize ( )

Here is the caller graph for this function:

static void Initialize ( Widget  req,
Widget  new,
ArgList  args,
Cardinal *  num_args 
) [static]

Definition at line 116 of file xwScrollText.c.

{
    XFontStruct *font;
    Dimension width, height;

    Widget text = PRIVATE(new,text_widget) =
        XtVaCreateManagedWidget("text", asciiTextWidgetClass, new, NULL);

    XtOverrideTranslations(text, CLASS(translations));
    XtAddCallback(XawTextGetSource(text), XtNcallback, AdjustForChange, NULL);

    if (PRIVATE(new,scroll_on_movement))
    {
       PRIVATE(new,action_hook) = 
           XtAppAddActionHook(XtWidgetToApplicationContext(new),
                                        AdjustForMovement, (XtPointer) text);
    }
    else
    {
       PRIVATE(new,action_hook) = (XtActionHookId) 0;
    }

    XtVaGetValues(text,
                XtNfont, &font,
                XtNwidth, &width,
                XtNheight, &height,
                NULL);

    PRIVATE(new,font_width) = font->max_bounds.width;

    if (!new->core.width)
    {
       new->core.width = width;
    }

    if (!new->core.height)
    {
       new->core.height = height;
    }

    PRIVATE(new,work_proc) = (XtWorkProcId) 0;
}

Here is the call graph for this function:

static Boolean SetValues ( ) [static]
static Boolean SetValues ( Widget  old,
Widget  request,
Widget  new,
ArgList  args,
Cardinal *  num_args 
) [static]

Definition at line 164 of file xwScrollText.c.

{
    if (PRIVATE(old,scroll_on_movement) != PRIVATE(new,scroll_on_movement))
    {
       if (PRIVATE(new,scroll_on_movement))
       {
           PRIVATE(new,action_hook) = 
              XtAppAddActionHook
                  (XtWidgetToApplicationContext(new),
                   AdjustForMovement, (XtPointer) PRIVATE(new,text_widget));
       }
       else
       {
           XtRemoveActionHook(PRIVATE(new,action_hook));
           PRIVATE(new,action_hook) = (XtActionHookId) 0;
       }
    }

    return False;
}

Here is the call graph for this function:


Variable Documentation

XtResource resources[] [static]
Initial value:
 {
#define Offset(field) 
    { XtNscrollOnMovement, XtCScrollOnMovement, XtRBoolean, sizeof(Boolean),
       Offset(scroll_on_movement), XtRImmediate, (XtPointer) True },
    { XtNtextWidget, XtCTextWidget, XtRWidget, sizeof(Widget),
       Offset(text_widget), XtRImmediate, (XtPointer) NULL },

}

Definition at line 39 of file xwScrollText.c.

Definition at line 56 of file xwScrollText.c.

WidgetClass scrollingTextWidgetClass = (WidgetClass) &scrollingTextClassRec

Definition at line 106 of file xwScrollText.c.

char translations[] = "<Key>Return:no-op() \n <Key>Linefeed:no-op()" [static]

Definition at line 54 of file xwScrollText.c.