/********************************************************************** * File: grphics.h (Formerly graphics.h) * Description: Starbase stubs for connection to sbdaemon * Author: Ray Smith * Created: Wed May 16 08:34:32 BST 1990 * * (C) Copyright 1990, Hewlett-Packard Ltd. ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** http://www.apache.org/licenses/LICENSE-2.0 ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. * **********************************************************************/ #ifndef GRPHICS_H #define GRPHICS_H //This is the main include file needed to get sbdaemon functionality //TO BUILD A PROGRAM THAT USES SBDAEMON, YOU NEED: //GRPHICS.CPP GRPHSHM.CPP AND EVNTLST.CPP. //If you want to be able to wait for events, add evnts.cpp and include evnts.h. //If you want to be able to show images, add showim.cpp and include showim.h. #include "sbgdefs.h" #include "sbgconst.h" #define STATESIZE 13 //MUST equal EDGESTYLE+1 #define line_color_index(fd,index) fd->Line_color_index(index) #define perimeter_color_index(fd,index) fd->Perimeter_color_index(index) #define fill_color_index(fd,index) fd->Fill_color_index(index) #define fill_color(fd,r,g,b) fd->Fill_color(r,g,b) #define text_color_index(fd,index) fd->Text_color_index(index) #define text_font_index(fd,index) fd->Text_font_index(index) #define character_height(fd,height) fd->Character_height(height) #define line_type(fd,style) fd->Line_type(style) #define interior_style(fd,style,edged) fd->Interior_style(style,edged) #define move2d(fd,x,y) fd->Move2d(x,y) #define draw2d(fd,x,y) fd->Draw2d(x,y) #define rectangle(fd,x1,y1,x2,y2) fd->Rectangle(x1,y1,x2,y2) #define text2d(fd,x,y,string,xform,more) fd->Text2d(x,y,string,xform,more) #define ellipse(fd,x_radius,y_radius,x_center,y_center,rotation) fd->Ellipse(x_radius,y_radius,x_center,y_center,rotation) #define destroy_window(fd) fd->Destroy_window() #define clear_view_surface(fd) fd->Clear_view_surface() #define vdc_extent(fd,xmin,ymin,xmax,ymax) fd->Vdc_extent(xmin,ymin,xmax,ymax) #define make_picture_current(fd) fd->Make_picture_current() #define set_click_handler(fd,handler) fd->Set_click_handler(handler) #define set_selection_handler(fd,handler) fd->Set_selection_handler(handler) #define set_key_handler(fd,handler) fd->Set_key_handler(handler) #define set_destroy_handler(fd,handler) fd->Set_destroy_handler(handler) #define clear_event_queue(fd) fd->Clear_event_queue() #define create_window(name,window_type,xpos,ypos,xsize,ysize,xmin,xmax,ymin,ymax,downon,moveon,upon,keyon) (*create_func)(name,window_type,xpos,ypos,xsize,ysize,xmin,xmax,ymin,ymax,downon,moveon,upon,keyon) #define overlap_picture_ops(update) (*overlap_func)(update) #define await_event(win,wait,type,event) (*await_event_func)(win,wait,type,event) typedef void (*EVENT_HANDLER) (GRAPHICS_EVENT *); /*name/title of window */ typedef WINDOW (*WINCREATEFUNC) (const char *name, INT8 window_type, /*type of window */ INT16 xpos, /*coords of window */ INT16 ypos, /*coords of window */ INT16 xsize, /*size of window */ INT16 ysize, /*size of window */ float xmin, /*scrolling limits */ float xmax, /*to stop users */ float ymin, /*getting lost in */ float ymax, /*empty space */ BOOL8 downon, /*Events wanted */ BOOL8 moveon, BOOL8 upon, BOOL8 keyon); extern WINCREATEFUNC create_func; extern void (*overlap_func) (BOOL8); extern WINDOW (*await_event_func) (WINDOW, BOOL8, INT8, GRAPHICS_EVENT *); const int kInputSize = 16; extern int input_unicode[kInputSize]; class DLLSYM WINFD { public: //Constructors for WINFD are host dependent to match different //implementations and are intended to be called only by //create_window. Use create_window to make a window. static WINDOW create( /*create a window */ const char *name, /*name/title of window */ INT8 window_type, /*type of window */ INT16 xpos, /*coords of window */ INT16 ypos, /*coords of window */ INT16 xsize, /*size of window */ INT16 ysize, /*size of window */ float xmin, /*scrolling limits */ float xmax, /*to stop users */ float ymin, /*getting lost in */ float ymax, /*empty space */ BOOL8 downon, /*Events wanted */ BOOL8 moveon, BOOL8 upon, BOOL8 keyon); WINFD(); //constructor virtual ~ WINFD (); /*set line colour */ virtual void Line_color_index(COLOUR index); /*index to use */ /*set perimeter colour */ virtual void Perimeter_color_index(COLOUR index); /*index to use */ /*set fill colour */ virtual void Fill_color_index(COLOUR index); /*index to use */ virtual void Fill_color( /*set RGB fill colour */ UINT8 red, UINT8 green, UINT8 blue); /*set marker colour */ virtual void Marker_color_index(COLOUR index); /*index to use */ /*set text colour */ virtual void Text_color_index(COLOUR index); /*index to use */ /*set text font */ virtual void Text_font_index(INT16 index); /*index to use */ /*set text height */ virtual void Character_height(float height); /*height to use */ virtual void Line_type( /*set line type */ INT16 style); /*style to use */ virtual void Marker_type( /*set marker type */ INT16 type); /*type to use */ virtual void Interior_style( /*set polygon style */ INT16 style, /*style to use */ INT16 edged); /*draw edge or not */ virtual void Marker_size( /*set marker size */ float size); /*size to use */ virtual void Move2d( /*move the pen */ float x, /*coords to move to */ float y); /*coords to move to */ virtual void Draw2d( /*draw the pen */ float x, /*coords to draw to */ float y); /*coords to draw to */ virtual void Rectangle( /*draw a rectangle */ float x1, /*coords to draw to */ float y1, /*coords to draw to */ float x2, /*coords to draw to */ float y2); /*coords to draw to */ virtual void Text_alignment( /*draw a rectangle */ INT32 h_select, //horizontal INT32 v_select, //vertical float horiz, /*coords to draw to */ float vert); /*coords to draw to */ virtual void Polyline2d ( /*draw a polyline */ float clist[], /*coordinate list */ INT16 numpts, /*number of coords */ INT16 flags); /*does it have move/draws */ virtual void Polygon2d ( /*draw a polygon */ float clist[], /*coordinate list */ INT16 numpts, /*number of coords */ INT16 flags); /*does it have move/draws */ virtual void Polymarker2d ( /*draw a polymarker */ float clist[], /*coordinate list */ INT16 numpts, /*number of coords */ INT16 flags); /*does it have move/draws */ virtual void Text2d( /*draw a text */ float x, /*coords of text */ float y, const char *string, /*text to draw */ INT16 xform, /*transform */ INT16 more); /*more text? */ void Append_text( /*draw a text */ const char *string, /*text to draw */ INT16 xform, /*transform */ INT16 more); /*more text? */ virtual void Ellipse( /*draw a ellipse */ float x_radius, /*radii of ellipse */ float y_radius, /*radii of ellipse */ float x_center, /*centre of ellipse */ float y_center, /*centre of ellipse */ float rotation); /*rotation of ellipse */ virtual void Arc( /*draw a arc */ float x_radius, /*radii of arc */ float y_radius, /*radii of arc */ float x_center, /*centre of arc */ float y_center, /*centre of arc */ float start, /*ends of arc */ float stop, /*ends of arc */ float rotation, /*rotation of arc */ INT16 close_type); /*type of closure */ /*destroy a window */ virtual void Destroy_window(); /*clear window */ virtual void Clear_view_surface(); /*Mark need to recalc */ virtual void Re_compute_colourmap(); virtual void Vdc_extent( /*set window focus */ float xmin, /*min values */ float ymin, /*min values */ float xmax, /*max values */ float ymax); /*max values */ void Set_echo( /*set window echo */ ECHO_TYPE echo_type, //type of echo float xorig, /*min values */ float yorig); /*min values */ /*update window */ virtual void Make_picture_current(); /*flush output */ friend void def_overlap_picture_ops(BOOL8 update); /*send make_ */ /*set line colour */ virtual void Synchronize_windows(WINDOW fd2); //other window /* void Show_sub_image( //show rectangle IMAGE* source, //source image INT32 xstart, //start coords INT32 ystart, INT32 xext, //extent to copy INT32 yext, INT32 xdest, //destination coords INT32 ydest);*/ INT16 get_fd() { //access return fd; } void Set_selection_handler( //set callback function EVENT_HANDLER handler); //handler function void Set_key_handler( //set callback function EVENT_HANDLER handler); //handler function void Set_destroy_handler( //set callback function EVENT_HANDLER handler); //handler function void Set_click_handler( //set callback function EVENT_HANDLER handler); //handler function /*delete all events */ virtual void Clear_event_queue(); //internal maintenance functions friend void add_event( /*add an event */ GRAPHICS_EVENT *event); /*event to add */ /*search for event */ friend GRAPHICS_EVENT *search_event_queue(INT16 &fd, /*queue to search */ INT8 event_type); /*type to search for */ /*search for event */ friend GRAPHICS_EVENT *search_single_queue(INT16 fd, /*queue to search */ INT8 event_type); /*type to search for */ protected: EVENT_HANDLER click_handler; //callback function //callback function EVENT_HANDLER selection_handler; EVENT_HANDLER key_handler; //callback function //callback function EVENT_HANDLER destroy_handler; private: void get_lock() { } //wait for lock void get_lock_for_draw() { } //kill draw thread void release_lock() { } //let it go void get_core_lock() { } //wait for lock void release_core_lock() { } //let it go INT16 fd; //"file descriptor" BOOL8 used; /*true if fd in use */ BOOL8 downevent; /*event flags */ BOOL8 moveevent; BOOL8 upevent; BOOL8 keyevent; GRAPHICS_EVENT *events; /*event queue */ GRAPHICS_EVENT *lastevent; /*event queue */ }; #endif