⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gvxmeas.c

📁 GSview 4.6 PostScript previewer。Ghostscript在MS-Windows, OS/2 and Unix下的图形化接口
💻 C
📖 第 1 页 / 共 2 页
字号:
    CTMTEXT t;
    update_ctm_text(&t, ctm);
    gtk_entry_set_text(GTK_ENTRY(dlg->ctmxx), t.xx);
    gtk_entry_set_text(GTK_ENTRY(dlg->ctmxy), t.xy);
    gtk_entry_set_text(GTK_ENTRY(dlg->ctmyx), t.yx);
    gtk_entry_set_text(GTK_ENTRY(dlg->ctmyy), t.yy);
    gtk_entry_set_text(GTK_ENTRY(dlg->ctmtx), t.tx);
    gtk_entry_set_text(GTK_ENTRY(dlg->ctmty), t.ty);
}

void dialog_put_float(GtkWidget *entry, float fx)
{
    char buf[64];
    sprintf(buf, ctmfmt, fx);
    gtk_entry_set_text(GTK_ENTRY(entry), buf);
}


BOOL dialog_get_float_error(CTMDLG *dlg, GtkWidget *entry, float *fres, 
   BOOL error)
{
  float ftemp ;
  char *s;

  s = gtk_entry_get_text(GTK_ENTRY(entry));
  if ((1 > sscanf(s,"%g",&ftemp)) && error)
  {
    gserror(IDS_INVALIDNUMBER, NULL, MB_ICONEXCLAMATION, SOUND_NONUMBER) ;
    gtk_window_set_focus(GTK_WINDOW(dlg->window), entry);
    gtk_editable_select_region(GTK_EDITABLE(entry), 0, -1);
  }
  else
  {
    *fres = ftemp ;
    return TRUE ;
  }
  return FALSE;
}

BOOL dialog_get_float(CTMDLG *dlg, GtkWidget *entry, float *fres)
{
  return dialog_get_float_error(dlg, entry, fres, TRUE);
}

BOOL dialog_get_ctm(CTMDLG *dlg, MATRIX *ctm, BOOL error)
{
BOOL result = TRUE;
   if (result)
       result = dialog_get_float_error(dlg, dlg->ctmxx, &ctm->xx, error);
   if (result)
       result = dialog_get_float_error(dlg, dlg->ctmxy, &ctm->xy, error);
   if (result)
       result = dialog_get_float_error(dlg, dlg->ctmyx, &ctm->yx, error);
   if (result)
       result = dialog_get_float_error(dlg, dlg->ctmyy, &ctm->yy, error);
   if (result)
       result = dialog_get_float_error(dlg, dlg->ctmtx, &ctm->tx, error);
   if (result)
       result = dialog_get_float_error(dlg, dlg->ctmty, &ctm->ty, error);
   return result;
}

void calc_enable_custom(CTMDLG *dlg, BOOL enable)
{
    gtk_widget_set_sensitive(dlg->tx, enable);
    gtk_widget_set_sensitive(dlg->ty, enable);
    gtk_widget_set_sensitive(dlg->translate, enable);
    gtk_widget_set_sensitive(dlg->angle, enable);
    gtk_widget_set_sensitive(dlg->rotate, enable);
    gtk_widget_set_sensitive(dlg->sx, enable);
    gtk_widget_set_sensitive(dlg->sy, enable);
    gtk_widget_set_sensitive(dlg->scale, enable);
    gtk_widget_set_sensitive(dlg->initmatrix, enable);
    gtk_widget_set_sensitive(dlg->invertmatrix, enable);
}

void calc_units(CTMDLG *dlg, int unit)
{
    dlg->measure.unit = unit;
    if (unit != IDM_UNITCUSTOM) {
	matrix_set_unit(&dlg->ctm, unit);
	update_dialog_ctm(dlg, &dlg->ctm) ;
    }
    calc_enable_custom(dlg, unit == IDM_UNITCUSTOM);
}

void calc_pts(GtkWidget *w, gpointer data)
{
    calc_units((CTMDLG *)data, IDM_UNITPT);
}

void calc_mm(GtkWidget *w, gpointer data)
{
    calc_units((CTMDLG *)data, IDM_UNITMM);
}

void calc_inch(GtkWidget *w, gpointer data)
{
    calc_units((CTMDLG *)data, IDM_UNITINCH);
}

void calc_custom(GtkWidget *w, gpointer data)
{
    calc_units((CTMDLG *)data, IDM_UNITCUSTOM);
}

void calc_ro(GtkWidget *w, gpointer data)
{
    float angle;
    CTMDLG *dlg = (CTMDLG *)data;
    if (dialog_get_ctm(dlg, &dlg->ctm, TRUE) 
	&& dialog_get_float(dlg, dlg->angle, &angle)) {
	matrix_rotate(&dlg->ctm, angle, &dlg->ctm) ;
	update_dialog_ctm(dlg, &dlg->ctm) ;
    }
}

void calc_tr(GtkWidget *w, gpointer data)
{
    float tx, ty;
    CTMDLG *dlg = (CTMDLG *)data;
    if (dialog_get_ctm(dlg, &dlg->ctm, TRUE) 
      && dialog_get_float(dlg, dlg->tx, &tx)
      && dialog_get_float(dlg, dlg->ty, &ty)) {
	matrix_translate(&dlg->ctm, tx, ty, &dlg->ctm);
	update_dialog_ctm(dlg, &dlg->ctm) ;
    }
}

void calc_sc(GtkWidget *w, gpointer data)
{
    float sx, sy;
    CTMDLG *dlg = (CTMDLG *)data;
    if (dialog_get_ctm(dlg, &dlg->ctm, TRUE) 
     && dialog_get_float(dlg, dlg->sx, &sx)
     && dialog_get_float(dlg, dlg->sy, &sy)) {
	matrix_scale(&dlg->ctm, sx, sy, &dlg->ctm);
	update_dialog_ctm(dlg, &dlg->ctm) ;
    }
}

void calc_ini(GtkWidget *w, gpointer data)
{
    CTMDLG *dlg = (CTMDLG *)data;
    matrix_set_unit(&dlg->ctm, IDM_UNITPT) ;
    update_dialog_ctm(dlg, &dlg->ctm) ;
}

void calc_inv(GtkWidget *w, gpointer data)
{
    CTMDLG *dlg = (CTMDLG *)data;
    if (!dialog_get_ctm(dlg, &dlg->ctm, TRUE))
	return;
    if (-1 == matrix_invert(&dlg->ctm, &dlg->ctm))
	gserror(IDS_CANTINVERT, NULL, MB_ICONEXCLAMATION, SOUND_NONUMBER) ;
    else
	update_dialog_ctm(dlg, &dlg->ctm) ;
}

void show_calc_dialog(void)
{
    int rc;
    CTMDLG dlg;
    GtkWidget *hbox_unit;
    GtkWidget *vbox;
    GtkWidget *table;
    GtkWidget *label;
    GtkWidget *con;
    GtkWidget *hbox;
    int y;

    dlg.window=gtk_window_new(GTK_WINDOW_DIALOG);
    gtk_container_set_border_width(GTK_CONTAINER(dlg.window), 10);
    gtk_window_set_title(GTK_WINDOW(dlg.window), get_string(IDS_AACALCXFORM));
    gtk_signal_connect(GTK_OBJECT(dlg.window), "delete-event",
                       GTK_SIGNAL_FUNC(modal_delete), &rc);

    vbox = gtk_vbox_new(FALSE, 5);
    gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
    gtk_container_add(GTK_CONTAINER(dlg.window), vbox);
    gtk_widget_show(vbox);

    /* radio buttons for units */
    hbox_unit = gtk_hbox_new(TRUE, 0);
    gtk_box_pack_start(GTK_BOX(vbox), hbox_unit, FALSE, FALSE, 5);
    gtk_widget_show(hbox_unit);

    dlg.unit_pt = gtk_radio_button_new_with_label(NULL, get_string(IDS_UNITPT));
    gtk_box_pack_start(GTK_BOX(hbox_unit), dlg.unit_pt, TRUE, FALSE, 5);
    gtk_signal_connect(GTK_OBJECT(dlg.unit_pt), "clicked",
			  GTK_SIGNAL_FUNC(calc_pts), &dlg);
    gtk_widget_show(dlg.unit_pt);

    dlg.unit_mm = gtk_radio_button_new_with_label_from_widget(
	GTK_RADIO_BUTTON(dlg.unit_pt), get_string(IDS_UNITMM));
    gtk_box_pack_start(GTK_BOX(hbox_unit), dlg.unit_mm, TRUE, FALSE, 5);
    gtk_signal_connect(GTK_OBJECT(dlg.unit_mm), "clicked",
			  GTK_SIGNAL_FUNC(calc_mm), &dlg);
    gtk_widget_show(dlg.unit_mm);

    dlg.unit_inch = gtk_radio_button_new_with_label_from_widget(
	GTK_RADIO_BUTTON(dlg.unit_pt), get_string(IDS_UNITINCH));
    gtk_box_pack_start(GTK_BOX(hbox_unit), dlg.unit_inch, TRUE, FALSE, 5);
    gtk_signal_connect(GTK_OBJECT(dlg.unit_inch), "clicked",
			  GTK_SIGNAL_FUNC(calc_inch), &dlg);
    gtk_widget_show(dlg.unit_inch);

    dlg.unit_custom = gtk_radio_button_new_with_label_from_widget(
	GTK_RADIO_BUTTON(dlg.unit_pt), get_string(IDS_UNITCUSTOM));
    gtk_box_pack_start(GTK_BOX(hbox_unit), dlg.unit_custom, TRUE, FALSE, 5);
    gtk_signal_connect(GTK_OBJECT(dlg.unit_custom), "clicked",
			  GTK_SIGNAL_FUNC(calc_custom), &dlg);
    gtk_widget_show(dlg.unit_custom);


    /* table for CTM etc */
     y=0;
    table = gtk_table_new(3, 8, FALSE);
    gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 5);
    gtk_widget_show(table);
    gtk_table_set_col_spacing(GTK_TABLE(table), 0, 5);
    gtk_table_set_col_spacing(GTK_TABLE(table), 1, 10);

    label = gtk_label_new("CTM");
    gtk_widget_show(label);
    con = gtk_alignment_new(0, 0, 0, 0);
    gtk_widget_show(con);
    gtk_container_add(GTK_CONTAINER(con), label);
    gtk_table_attach_defaults(GTK_TABLE(table), con, 0, 1, y, y+1);
    y++;

    dlg.ctmxx = gtk_entry_new();
    gtk_entry_set_max_length(GTK_ENTRY(dlg.ctmxx), 32);
    gtk_table_attach_defaults(GTK_TABLE(table), dlg.ctmxx, 0, 1, y, y+1);
    gtk_signal_connect(GTK_OBJECT(dlg.ctmxx), "size-request",
			  GTK_SIGNAL_FUNC(width_percent), (gpointer)50);
    gtk_widget_show(dlg.ctmxx);

    dlg.ctmxy = gtk_entry_new();
    gtk_entry_set_max_length(GTK_ENTRY(dlg.ctmxy), 32);
    gtk_table_attach_defaults(GTK_TABLE(table), dlg.ctmxy, 1, 2, y, y+1);
    gtk_signal_connect(GTK_OBJECT(dlg.ctmxy), "size-request",
			  GTK_SIGNAL_FUNC(width_percent), (gpointer)50);
    gtk_widget_show(dlg.ctmxy);

    dlg.ctmtx = gtk_entry_new();
    gtk_entry_set_max_length(GTK_ENTRY(dlg.ctmtx), 32);
    gtk_table_attach_defaults(GTK_TABLE(table), dlg.ctmtx, 2, 3, y, y+1);
    gtk_signal_connect(GTK_OBJECT(dlg.ctmtx), "size-request",
			  GTK_SIGNAL_FUNC(width_percent), (gpointer)50);
    gtk_widget_show(dlg.ctmtx);
    y++;

    dlg.ctmyx = gtk_entry_new();
    gtk_entry_set_max_length(GTK_ENTRY(dlg.ctmyx), 32);
    gtk_table_attach_defaults(GTK_TABLE(table), dlg.ctmyx, 0, 1, y, y+1);
    gtk_signal_connect(GTK_OBJECT(dlg.ctmyx), "size-request",
			  GTK_SIGNAL_FUNC(width_percent), (gpointer)50);
    gtk_widget_show(dlg.ctmyx);

    dlg.ctmyy = gtk_entry_new();
    gtk_entry_set_max_length(GTK_ENTRY(dlg.ctmyy), 32);
    gtk_table_attach_defaults(GTK_TABLE(table), dlg.ctmyy, 1, 2, y, y+1);
    gtk_signal_connect(GTK_OBJECT(dlg.ctmyy), "size-request",
			  GTK_SIGNAL_FUNC(width_percent), (gpointer)50);
    gtk_widget_show(dlg.ctmyy);

    dlg.ctmty = gtk_entry_new();
    gtk_entry_set_max_length(GTK_ENTRY(dlg.ctmty), 32);
    gtk_table_attach_defaults(GTK_TABLE(table), dlg.ctmty, 2, 3, y, y+1);
    gtk_signal_connect(GTK_OBJECT(dlg.ctmty), "size-request",
			  GTK_SIGNAL_FUNC(width_percent), (gpointer)50);
    gtk_widget_show(dlg.ctmty);
    y++;

    label = gtk_label_new(get_string(IDS_AACUSTOM));
    gtk_widget_show(label);
    con = gtk_alignment_new(0, 0, 0, 0);
    gtk_widget_show(con);
    gtk_container_add(GTK_CONTAINER(con), label);
    gtk_table_attach_defaults(GTK_TABLE(table), con, 0, 1, y, y+1);
    gtk_table_set_row_spacing(GTK_TABLE(table), y-1, 10);
    y++;

    dlg.tx = gtk_entry_new();
    gtk_entry_set_max_length(GTK_ENTRY(dlg.tx), 32);
    gtk_table_attach_defaults(GTK_TABLE(table), dlg.tx, 0, 1, y, y+1);
    gtk_signal_connect(GTK_OBJECT(dlg.tx), "size-request",
			  GTK_SIGNAL_FUNC(width_percent), (gpointer)50);
    gtk_widget_show(dlg.tx);

    dlg.ty = gtk_entry_new();
    gtk_entry_set_max_length(GTK_ENTRY(dlg.ty), 32);
    gtk_table_attach_defaults(GTK_TABLE(table), dlg.ty, 1, 2, y, y+1);
    gtk_signal_connect(GTK_OBJECT(dlg.ty), "size-request",
			  GTK_SIGNAL_FUNC(width_percent), (gpointer)50);
    gtk_widget_show(dlg.ty);

    dlg.translate = gtk_button_new_with_label(get_string(IDS_AATRANSLATE));
    gtk_table_attach_defaults(GTK_TABLE(table), dlg.translate, 2, 3, y, y+1);
    gtk_signal_connect(GTK_OBJECT(dlg.translate), "clicked",
                              GTK_SIGNAL_FUNC(calc_tr), &dlg);
    gtk_widget_show(dlg.translate);
    y++;

    dlg.angle = gtk_entry_new();
    gtk_entry_set_max_length(GTK_ENTRY(dlg.angle), 32);
    gtk_table_attach_defaults(GTK_TABLE(table), dlg.angle, 1, 2, y, y+1);
    gtk_signal_connect(GTK_OBJECT(dlg.angle), "size-request",
			  GTK_SIGNAL_FUNC(width_percent), (gpointer)50);
    gtk_widget_show(dlg.angle);

    dlg.rotate = gtk_button_new_with_label(get_string(IDS_AAROTATE));
    gtk_table_attach_defaults(GTK_TABLE(table), dlg.rotate, 2, 3, y, y+1);
    gtk_signal_connect(GTK_OBJECT(dlg.rotate), "clicked",
                              GTK_SIGNAL_FUNC(calc_ro), &dlg);
    gtk_widget_show(dlg.rotate);
    y++;

    dlg.sx = gtk_entry_new();
    gtk_entry_set_max_length(GTK_ENTRY(dlg.sx), 32);
    gtk_table_attach_defaults(GTK_TABLE(table), dlg.sx, 0, 1, y, y+1);
    gtk_signal_connect(GTK_OBJECT(dlg.sx), "size-request",
			  GTK_SIGNAL_FUNC(width_percent), (gpointer)50);
    gtk_widget_show(dlg.sx);

    dlg.sy = gtk_entry_new();
    gtk_entry_set_max_length(GTK_ENTRY(dlg.sy), 32);
    gtk_table_attach_defaults(GTK_TABLE(table), dlg.sy, 1, 2, y, y+1);
    gtk_signal_connect(GTK_OBJECT(dlg.sy), "size-request",
			  GTK_SIGNAL_FUNC(width_percent), (gpointer)50);
    gtk_widget_show(dlg.sy);

    dlg.scale = gtk_button_new_with_label(get_string(IDS_AASCALE));
    gtk_table_attach_defaults(GTK_TABLE(table), dlg.scale, 2, 3, y, y+1);
    gtk_signal_connect(GTK_OBJECT(dlg.scale), "clicked",
                              GTK_SIGNAL_FUNC(calc_sc), &dlg);
    gtk_widget_show(dlg.scale);
    y++;

    dlg.initmatrix = gtk_button_new_with_label(get_string(IDS_AAINITMATRIX));
    gtk_table_attach_defaults(GTK_TABLE(table), dlg.initmatrix, 0, 1, y, y+1);
    gtk_signal_connect(GTK_OBJECT(dlg.initmatrix), "clicked",
                              GTK_SIGNAL_FUNC(calc_ini), &dlg);
    gtk_widget_show(dlg.initmatrix);

    dlg.invertmatrix = gtk_button_new_with_label(get_string(IDS_AAINVERTMATRIX));
    gtk_table_attach_defaults(GTK_TABLE(table), dlg.invertmatrix, 1, 2, y, y+1);
    gtk_signal_connect(GTK_OBJECT(dlg.invertmatrix), "clicked",
                              GTK_SIGNAL_FUNC(calc_inv), &dlg);
    gtk_widget_show(dlg.invertmatrix);
    gtk_table_set_row_spacing(GTK_TABLE(table), y-1, 5);
    y++;

    /* buttons OK cancel etc */
    hbox = gtk_hbox_new(TRUE, 0);
    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
    gtk_widget_show(hbox);

    dlg.button_ok = gtk_button_new_with_label(get_string(IDS_AAOK));
    dlg.button_cancel = gtk_button_new_with_label(get_string(IDS_AACANCEL));
    dlg.button_help = gtk_button_new_with_label(get_string(IDS_AAHELP));

    gtk_box_pack_start(GTK_BOX(hbox), dlg.button_ok, TRUE, TRUE, 10);
    gtk_box_pack_start(GTK_BOX(hbox), dlg.button_cancel, TRUE, TRUE, 10);
    gtk_box_pack_start(GTK_BOX(hbox), dlg.button_help, TRUE, TRUE, 10);

    /* Connect our callbacks to the three buttons */
    gtk_signal_connect(GTK_OBJECT(dlg.button_ok), "clicked",
                              GTK_SIGNAL_FUNC(modal_ok), &rc);
    gtk_signal_connect(GTK_OBJECT(dlg.button_cancel), "clicked",
                              GTK_SIGNAL_FUNC(modal_cancel), &rc);
    gtk_signal_connect(GTK_OBJECT(dlg.button_help), "clicked",
                              GTK_SIGNAL_FUNC(modal_help), &rc);

    gtk_widget_show(dlg.button_ok);
    gtk_widget_show(dlg.button_cancel);
    gtk_widget_show(dlg.button_help);

    calc_units(&dlg, option.measure.unit);
    switch(dlg.measure.unit) {
	case IDM_UNITMM:
	    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dlg.unit_mm), TRUE);
	    break;
	case IDM_UNITINCH:
	    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dlg.unit_inch), TRUE);
	    break;
	case IDM_UNITCUSTOM:
	    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dlg.unit_custom), TRUE);
	    break;
	default:
	case IDM_UNITPT:
	    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dlg.unit_pt), TRUE);
	    break;
    }
    dlg.ctm =  option.ctm;
    update_dialog_ctm(&dlg, &dlg.ctm);
    dialog_put_float(dlg.tx, option.measure.tx);
    dialog_put_float(dlg.ty, option.measure.ty);
    dialog_put_float(dlg.angle, option.measure.rotate);
    dialog_put_float(dlg.sx, option.measure.sx);
    dialog_put_float(dlg.sy, option.measure.sy);

    /* show dialog and wait for OK, Cancel or close */
    gtk_window_set_focus(GTK_WINDOW(window), dlg.button_ok);
    gtk_window_set_modal(GTK_WINDOW(dlg.window), TRUE);
    gtk_widget_show(dlg.window);
    gtk_main();
 
    if (rc == IDOK) {
        if (dialog_get_ctm(&dlg, &dlg.ctm, TRUE)) {
	    option.ctm = dlg.ctm;
	    option.measure.unit = dlg.measure.unit;
	    dialog_get_float_error(&dlg, dlg.tx, &option.measure.tx, FALSE);
	    dialog_get_float_error(&dlg, dlg.ty, &option.measure.ty, FALSE);
	    dialog_get_float_error(&dlg, dlg.angle, &option.measure.rotate, FALSE);
	    dialog_get_float_error(&dlg, dlg.sx, &option.measure.sx, FALSE);
	    dialog_get_float_error(&dlg, dlg.sy, &option.measure.sy, FALSE);
	}
    }

    gtk_widget_destroy(dlg.window);

    return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -