Ejemplo n.º 1
0
DEF_TEST(RecordDraw_SetMatrixClobber, r) {
    // Set up an SkRecord that just scales by 2x,3x.
    SkRecord scaleRecord;
    SkRecorder scaleCanvas(&scaleRecord, W, H);
    SkMatrix scale;
    scale.setScale(2, 3);
    scaleCanvas.setMatrix(scale);

    // Set up an SkRecord with an initial +20, +20 translate.
    SkRecord translateRecord;
    SkRecorder translateCanvas(&translateRecord, W, H);
    SkMatrix translate;
    translate.setTranslate(20, 20);
    translateCanvas.setMatrix(translate);

    SkRecordDraw(scaleRecord, &translateCanvas, nullptr, nullptr, 0, nullptr/*bbh*/, nullptr/*callback*/);
    REPORTER_ASSERT(r, 4 == translateRecord.count());
    assert_type<SkRecords::SetMatrix>(r, translateRecord, 0);
    assert_type<SkRecords::Save>     (r, translateRecord, 1);
    assert_type<SkRecords::SetMatrix>(r, translateRecord, 2);
    assert_type<SkRecords::Restore>  (r, translateRecord, 3);

    // When we look at translateRecord now, it should have its first +20,+20 translate,
    // then a 2x,3x scale that's been concatted with that +20,+20 translate.
    const SkRecords::SetMatrix* setMatrix;
    setMatrix = assert_type<SkRecords::SetMatrix>(r, translateRecord, 0);
    REPORTER_ASSERT(r, setMatrix->matrix == translate);

    setMatrix = assert_type<SkRecords::SetMatrix>(r, translateRecord, 2);
    SkMatrix expected = scale;
    expected.postConcat(translate);
    REPORTER_ASSERT(r, setMatrix->matrix == expected);
}
Ejemplo n.º 2
0
void
plot_renz_matches(Tcl_Interp *interp,
		  char *re_win,
		  char *names_win,
		  int text_offset,
		  char *t_colour,
		  int yoffset,
		  int num_enzymes,
		  R_Enz *r_enzyme,
		  ruler_s *ruler,
		  int sequence_len,
		  int num_matches,
		  R_Match *match,
		  tick_s *tick,
		  char *frame,
		  WorldPtr *world,
		  CanvasPtr *canvas,
		  win **win_list,
		  int num_wins,
		  StackPtr **zoom)
{
    char cmd[1024];
    int item;
    int seq_len;
    int offset;
    int y_offset;
    int t_offset;
    int i;
    int cut_site;

    sprintf(cmd, "%s delete all", re_win);
    Tcl_Eval(interp, cmd);

    sprintf(cmd, "%s delete all", names_win);
    Tcl_Eval(interp, cmd);

    t_offset = text_offset;
    y_offset = yoffset;

    seq_len = ruler->end - ruler->start + 1;

    /* for each selected enzyme, display its name and cut sites */
    for (item = 0; item < num_enzymes; item++) {

        offset = yoffset;
	sprintf(cmd,"%s create text 10 %d -text %s -anchor w -fill %s "
		"-font enzyme_font -tag {S re_%d}",
		names_win, t_offset, r_enzyme[item].name, t_colour, 
		item);
	Tcl_Eval(interp, cmd);
	sprintf(cmd, "%s create line %d %d %d %d -tag contig -fill %s",
		re_win, ruler->start, y_offset, ruler->end, y_offset, ruler->colour);
	Tcl_Eval(interp, cmd);

	for (i = 0; i < num_matches; i++) {
	    if (item == match[i].enz_name) {
	
		offset = (item * tick->ht) + yoffset;
		/* cut_site = match[i].cut_pos; */
		cut_site = ruler->start - 1 + match[i].padded_cut_pos;

		PlotStickMap(interp, re_win,
			     ruler->start - 1 + match[i].cut_pos, cut_site,
			     0, offset, 
			     tick->ht, tick->line_width, tick->colour, item,
			     ruler->start, ruler->end);
	    }
	}
	y_offset += tick->ht;
	t_offset += tick->ht;
    }
    /* draw final line */
    sprintf(cmd, "%s create line %d %d %d %d -tag contig -fill %s",
	    re_win, ruler->start, y_offset, ruler->end, y_offset, ruler->colour);
    Tcl_Eval(interp, cmd);

    /* add back selection rectangles */
    if (TCL_ERROR == Tcl_VarEval(interp, "ReSelectRect ", frame, " ",
				 names_win, NULL))
	verror(ERR_WARN, "plot_renz_matches", "%s\n", interp->result);

    world->total->x1 = ruler->start;
    world->total->x2 = ruler->end;
    world->total->y1 = 1;
    world->total->y2 = y_offset;

    memcpy(world->visible, world->total, sizeof(d_box));
    world->visible->y2 = canvas->height;

    SetCanvasCoords(interp, world->visible->x1, world->visible->y1, 
		    world->visible->x2, world->visible->y2, canvas);

    draw_single_ruler(interp, ruler, canvas, ruler->start, ruler->end, 1);
    scaleCanvas(interp, win_list, num_wins, "all", world->visible, 
		canvas);
    scrollRegion(interp, win_list, num_wins, world->total, canvas);

    /* remove all current zooming info */
    freeZoom(zoom);

    /* add first zoom */
    pushZoom(zoom, world->visible);
}
Ejemplo n.º 3
0
void ed_plot_renz_matches(Tcl_Interp *interp,
			  char *re_win,
			  char *names_win,
			  int text_offset,
			  char *t_colour,
			  int yoffset,
			  int num_enzymes,
			  RENZYMES *r_enzyme,
			  ruler_s *ruler,
			  int sequence_len,
			  int num_matches,
			  R_MATCH *match,
			  tick_s *tick,
			  char *frame,
			  WorldPtr *world,
			  CanvasPtr *canvas,
			  win **win_list,
			  int num_wins,
			  StackPtr **zoom,
			  int seq_id,
			  SELECTION *sel)
{
    char cmd[1024];
    int item;
    int seq_len;
    int offset;
    int y_offset;
    int t_offset;
    int i;
    int cut_site;
    int *done;

    if (NULL == (done = (int *)xcalloc(num_enzymes, sizeof(int)))) {
	return;
    }

    sprintf(cmd, "%s delete all", re_win);
    Tcl_Eval(interp, cmd);

    sprintf(cmd, "%s delete all", names_win);
    Tcl_Eval(interp, cmd);

    t_offset = text_offset;
    y_offset = yoffset;

    seq_len = ruler->end - ruler->start + 1;

    /*printf ("seq_len=%d\n", seq_len);*/
   
    /* for each selected enzyme, display its name and cut sites */
    for (item = 0; item < num_enzymes; item++) {
        offset = yoffset;
	sprintf(cmd,"%s create text 10 %d -text %s -anchor w -fill %s "
		"-font enzyme_font -tag {S re_%d seqid_%d}",
		names_win, t_offset, r_enzyme->renzyme[item]->name, t_colour, 
		item, seq_id);
	Tcl_Eval(interp, cmd);
	sprintf(cmd, "%s create line %d %d %d %d -tag contig -fill %s",
		re_win, ruler->start, y_offset, ruler->end, y_offset, ruler->colour);
	Tcl_Eval(interp, cmd);
	 
	for (i = 0; i < num_matches; i++) {
	    if (item == match[i].enz_name) {	    
		offset = (item * tick->ht) + yoffset;
                cut_site = ruler->start - 1 + match[i].cut_pos1 - 1;
		EdPlotStickMap(interp, re_win, cut_site, 0, offset, 
			       tick->ht, tick->line_width, tick->colour, item,
			       ruler->end - ruler->start + 1, seq_id);
	    }
	}
	/* draw a selection on the re_win, if it needed */
	if (sel != NULL) {
	if (sel->sel_first != 0 && sel->sel_last != 0) {
	    if (sel->name_first != NULL && sel->name_last != NULL) {
		if (!strcmp (sel->name_first, r_enzyme->renzyme[item]->name)) {
		    sprintf (cmd, "%s create rectangle %d %d %d %d -fill green -outline green -tags \"fragment dummy seqid_%d xL_%d xR_%d name1_%s name2_%s\"", 
			     re_win, sel->sel_first+2, offset+2, sel->sel_last-2, offset+tick->ht-2, 
			     seq_id, sel->sel_first,sel->sel_last,sel->name_first, sel->name_last);
		}
	    } else {
		sprintf (cmd, "%s create rectangle %d %d %d %d -fill green -outline green -tags \"dummy\"", 
			 re_win, sel->sel_first, offset, sel->sel_last, offset+tick->ht); 
	    }
	    Tcl_Eval(interp, cmd);
	}
	}
	y_offset += tick->ht;
	t_offset += tick->ht;
    }
    /* draw final line */
    sprintf(cmd, "%s create line %d %d %d %d -tag contig -fill %s",
	    re_win, ruler->start, y_offset, ruler->end, y_offset, ruler->colour);
    Tcl_Eval(interp, cmd);
    
    /* add back selection rectangles */
    if (TCL_ERROR == Tcl_VarEval(interp, "ReSelectRect ", frame, " ",
				 names_win, NULL))
	verror(ERR_WARN, "plot_renz_matches", "%s\n", interp->result);

    world->total->x1 = ruler->start;
    world->total->x2 = ruler->end;
    world->total->y1 = 1;
    world->total->y2 = y_offset;

    memcpy(world->visible, world->total, sizeof(d_box));
    world->visible->y2 = canvas->height;
   
    /* defined in tk_utils/canvas_box.c */
    SetCanvasCoords(interp, world->visible->x1, world->visible->y1, 
		    world->visible->x2, world->visible->y2, canvas);

    draw_single_ruler(interp, ruler, canvas, ruler->start, ruler->end, 1);

    scaleCanvas(interp, win_list, num_wins, "all", world->visible, canvas);
    scrollRegion(interp, win_list, num_wins, world->total, canvas);
   
    /* remove all current zooming info */
	freeZoom(zoom);
    /* add first zoom */
	pushZoom(zoom, world->visible);
    /* defined in tk_utils/canvas_box.c */   
}