123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263 |
- #include "sys-defines.h"
- #include "extern.h"
- int
- _API_openpl (S___(Plotter *_plotter))
- {
- bool retval;
- if (_plotter->data->open)
- {
- _plotter->error (R___(_plotter)
- "openpl: invalid operation");
- return -1;
- }
-
- switch ((int)_plotter->data->output_model)
- {
- case (int)PL_OUTPUT_NONE:
-
- _plotter->data->page = _new_outbuf ();
- break;
- break;
- case (int)PL_OUTPUT_ONE_PAGE:
- case (int)PL_OUTPUT_ONE_PAGE_AT_A_TIME:
-
- _plotter->data->page = _new_outbuf ();
- break;
-
- case (int)PL_OUTPUT_PAGES_ALL_AT_ONCE:
- {
- plOutbuf *new_page = _new_outbuf();
- if (_plotter->data->opened == false)
- {
- _plotter->data->page = new_page;
-
- _plotter->data->first_page = new_page;
- }
- else
-
- {
- _plotter->data->page->next = new_page;
- _plotter->data->page = new_page;
- }
- }
- break;
- case (int)PL_OUTPUT_VIA_CUSTOM_ROUTINES:
- case (int)PL_OUTPUT_VIA_CUSTOM_ROUTINES_IN_REAL_TIME:
- case (int)PL_OUTPUT_VIA_CUSTOM_ROUTINES_TO_NON_STREAM:
-
- _plotter->data->page = (plOutbuf *)NULL;
- break;
- default:
- break;
- }
-
- _plotter->data->open = true;
- _plotter->data->opened = true;
- _plotter->data->page_number++;
-
- _plotter->data->fontsize_invoked = false;
- _plotter->data->linewidth_invoked = false;
-
- _plotter->data->frame_number = 0;
-
- _pl_g_create_first_drawing_state (S___(_plotter));
-
- {
- const char *bg_color_name_s;
- bg_color_name_s =
- (const char *)_get_plot_param (_plotter->data, "BG_COLOR");
- if (bg_color_name_s)
- _API_bgcolorname (R___(_plotter) bg_color_name_s);
- }
-
- retval = _plotter->begin_page (S___(_plotter));
-
- _API_fsetmatrix (R___(_plotter)
- _plotter->drawstate->transform.m_user_to_ndc[0],
- _plotter->drawstate->transform.m_user_to_ndc[1],
- _plotter->drawstate->transform.m_user_to_ndc[2],
- _plotter->drawstate->transform.m_user_to_ndc[3],
- _plotter->drawstate->transform.m_user_to_ndc[4],
- _plotter->drawstate->transform.m_user_to_ndc[5]);
- return (retval == true ? 0 : -1);
- }
- bool
- _pl_g_begin_page (S___(Plotter *_plotter))
- {
- return true;
- }
- void
- _pl_g_create_first_drawing_state (S___(Plotter *_plotter))
- {
- plDrawState *drawstate;
- const plDrawState *copyfrom;
- char *fill_rule, *line_mode, *join_mode, *cap_mode;
-
- drawstate = (plDrawState *)_pl_xmalloc (sizeof(plDrawState));
-
-
- copyfrom = &_default_drawstate;
- memcpy (drawstate, copyfrom, sizeof(plDrawState));
-
- fill_rule = (char *)_pl_xmalloc (strlen (copyfrom->fill_rule) + 1);
- line_mode = (char *)_pl_xmalloc (strlen (copyfrom->line_mode) + 1);
- join_mode = (char *)_pl_xmalloc (strlen (copyfrom->join_mode) + 1);
- cap_mode = (char *)_pl_xmalloc (strlen (copyfrom->cap_mode) + 1);
- strcpy (fill_rule, copyfrom->fill_rule);
- strcpy (line_mode, copyfrom->line_mode);
- strcpy (join_mode, copyfrom->join_mode);
- strcpy (cap_mode, copyfrom->cap_mode);
- drawstate->fill_rule = fill_rule;
- drawstate->line_mode = line_mode;
- drawstate->join_mode = join_mode;
- drawstate->cap_mode = cap_mode;
-
- if (copyfrom->dash_array_len > 0)
- {
- int i;
- double *dash_array;
- dash_array = (double *)_pl_xmalloc (copyfrom->dash_array_len * sizeof(double));
- for (i = 0; i < copyfrom->dash_array_len; i++)
- dash_array[i] = copyfrom->dash_array[i];
- drawstate->dash_array = dash_array;
- }
-
- {
- const char *font_name_init;
- char *font_name, *true_font_name;
- int typeface_index, font_index;
-
- switch (_plotter->data->default_font_type)
- {
- case PL_F_HERSHEY:
- default:
- font_name_init = PL_DEFAULT_HERSHEY_FONT;
- typeface_index = PL_DEFAULT_HERSHEY_TYPEFACE_INDEX;
- font_index = PL_DEFAULT_HERSHEY_FONT_INDEX;
- break;
- case PL_F_POSTSCRIPT:
- font_name_init = PL_DEFAULT_POSTSCRIPT_FONT;
- typeface_index = PL_DEFAULT_POSTSCRIPT_TYPEFACE_INDEX;
- font_index = PL_DEFAULT_POSTSCRIPT_FONT_INDEX;
- break;
- case PL_F_PCL:
- font_name_init = PL_DEFAULT_PCL_FONT;
- typeface_index = PL_DEFAULT_PCL_TYPEFACE_INDEX;
- font_index = PL_DEFAULT_PCL_FONT_INDEX;
- break;
- case PL_F_STICK:
- font_name_init = PL_DEFAULT_STICK_FONT;
- typeface_index = PL_DEFAULT_STICK_TYPEFACE_INDEX;
- font_index = PL_DEFAULT_STICK_FONT_INDEX;
- break;
- }
-
- font_name = (char *)_pl_xmalloc (strlen (font_name_init) + 1);
- strcpy (font_name, font_name_init);
- drawstate->font_name = font_name;
- true_font_name = (char *)_pl_xmalloc (strlen (font_name_init) + 1);
- strcpy (true_font_name, font_name_init);
- drawstate->true_font_name = true_font_name;
- drawstate->font_type = _plotter->data->default_font_type;
- drawstate->typeface_index = typeface_index;
- drawstate->font_index = font_index;
-
-
- if (drawstate->fill_rule_type == PL_FILL_ODD_WINDING
- && _plotter->data->have_odd_winding_fill == 0)
- drawstate->fill_rule_type = PL_FILL_NONZERO_WINDING;
- else if (drawstate->fill_rule_type == PL_FILL_NONZERO_WINDING
- && _plotter->data->have_nonzero_winding_fill == 0)
- drawstate->fill_rule_type = PL_FILL_ODD_WINDING;
- }
-
- drawstate->path = (plPath *)NULL;
- drawstate->paths = (plPath **)NULL;
- drawstate->num_paths = 0;
-
- drawstate->previous = NULL;
- _plotter->drawstate = drawstate;
- }
|