/* * (c) Copyright 1989 Sun Microsystems, Inc. Sun design patents * pending in the U.S. and foreign countries. See LEGAL NOTICE * file for terms of the license. */ /* * (c) Copyright 1989 Sun Microsystems, Inc. Sun design patents * pending in the U.S. and foreign countries. See LEGAL NOTICE * file for terms of the license. */ #ifndef __openwin_impl_h #define __openwin_impl_h /* * Package: openwin * * Module: ow_impl.h * * Description: defines internal data structures for managing openlook windows * */ #include #include #include #include #include /* * Global Defines: */ /* macros to convert variable from/to public/private form */ #define OPENWIN_PRIVATE(win) \ XV_PRIVATE(Xv_openwin_info, Xv_openwin, win) #define OPENWIN_PUBLIC(win) XV_PUBLIC(win) #define OPENWIN_REGULAR_VIEW_MARGIN 2 #define OPENWIN_VIEW_BORDER_WIDTH 2 #define OPENWIN_SPLIT_VERTICAL_MINIMUM 50 #define OPENWIN_SPLIT_HORIZONTAL_MINIMUM 50 #define OPENWIN_SCROLLBAR_LEFT 0 #define OPENWIN_SCROLLBAR_RIGHT 1 #define openwin_sb(view, direction) \ ((view)->sb[((direction) == SCROLLBAR_VERTICAL) ? 0 : 1]) #define openwin_set_sb(view, direction, sb) \ openwin_sb((view), (direction)) = sb /* * Typedefs: */ typedef struct openwin_view_struct Openwin_view_info; typedef struct openwin_info_struct Xv_openwin_info; struct openwin_view_struct { Xv_opaque view; Scrollbar sb[2]; /* 0 -> vertical 1 -> horizontal */ Rect enclosing_rect; /* full area the view takes up -- includes margins, borders and scrollabrs */ int right_edge; /* view against openwin's right edge */ int bottom_edge; /* view against bottom edge */ Openwin_view_info *next_view; Xv_openwin_info *owin; }; #define STATUS(ow, field) ((ow)->status_bits.field) #define STATUS_SET(ow, field) STATUS(ow, field) = TRUE #define STATUS_RESET(ow, field) STATUS(ow, field) = FALSE #define BOOLEAN_FIELD(field) unsigned field : 1 struct openwin_info_struct { Openwin public_self; /* Back pointer */ Xv_pkg *view_class; Openwin_view_info *views; int margin; Rect cached_rect; Scrollbar vsb_on_create; /* cached scrollbar until view is */ Scrollbar hsb_on_create; /* created */ Attr_avlist view_avlist; /* cached view avlist on create */ Attr_avlist view_end_avlist; #ifdef SELECTABLE_VIEWS Seln_client seln_client; /* selection svc client id */ Openwin_view_info *seln_view; /* selected view, if any */ #endif SELECTABLE_VIEWS struct { BOOLEAN_FIELD(auto_clear); BOOLEAN_FIELD(adjust_vertical); BOOLEAN_FIELD(adjust_horizontal); BOOLEAN_FIELD(no_margin); BOOLEAN_FIELD(created); BOOLEAN_FIELD(show_borders); BOOLEAN_FIELD(removing_scrollbars); BOOLEAN_FIELD(mapped); BOOLEAN_FIELD(left_scrollbars); #ifndef NO_OPENWIN_PAINT_BG BOOLEAN_FIELD(paint_bg); #endif /* NO_OPENWIN_PAINT_BG */ } status_bits; int nbr_cols; /* WIN_COLUMNS specified by client */ int nbr_rows; /* WIN_ROWS specified by client */ int (*layout_proc)(); void (*split_init_proc)(); void (*split_destroy_proc)(); #ifndef NO_OPENWIN_PAINT_BG XColor background; #endif /* NO_OPENWIN_PAINT_BG */ }; /* * Global Variable Declarations: */ extern Attr_attribute openwin_view_context_key; /* * Package private function declarations: */ /* openwin.c */ Pkg_private int openwin_init(); Pkg_private int openwin_destroy(); /* ow_get.c */ Pkg_private Xv_opaque openwin_get(); /* ow_set.c */ Pkg_private Xv_opaque openwin_set(); /* ow_evt.c */ Pkg_private Notify_value openwin_event(); Pkg_private Notify_value openwin_view_event(); /* ow_resize.c */ Pkg_private int openwin_adjust_views(); Pkg_private void openwin_adjust_view(); Pkg_private void openwin_place_scrollbar(); /* ow_paint.c */ Pkg_private void openwin_clear_damage(); #ifdef SELECTABLE_VIEWS /* openwin_seln.c */ extern void openwin_seln_function(); extern Xv_opaque openwin_seln_reply(); extern void openwin_select(); extern void openwin_select_view(); #endif SELECTABLE_VIEWS /* openwin_view.c */ extern void openwin_create_initial_view(); extern void openwin_destroy_views(); extern int openwin_count_views(); extern Openwin_view_info *openwin_nth_view(); extern int openwin_viewdata_for_view(); extern void openwin_split_view(); extern int openwin_fill_view_gap(); extern void openwin_copy_scrollbar(); #endif __openwin_impl_h