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); }
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); }
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 */ }