void TextItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { QGraphicsItem::mouseReleaseEvent(event); if (isSelected() && (flags() & QGraphicsItem::ItemIsMovable) && positionChanged) { InsertData insertData = meta.value(); qreal topLeft[2] = { sceneBoundingRect().left(), sceneBoundingRect().top() }; qreal size[2] = { sceneBoundingRect().width(), sceneBoundingRect().height() }; PlacementData pld; pld.placement = TopLeft; pld.justification = Center; pld.relativeTo = PageType; pld.preposition = Inside; calcOffsets(pld,insertData.offsets,topLeft,size); QStringList list = toPlainText().split("\n"); insertData.text = list.join("\\n"); meta.setValue(insertData); beginMacro(QString("MoveText")); changeInsertOffset(&meta); endMacro(); } }
void LLVertexBuffer::updateNumVerts(S32 nverts) { LLMemType mt(LLMemType::MTYPE_VERTEX_DATA); llassert(nverts >= 0); if (nverts >= 65535) { llwarns << "Vertex buffer overflow!" << llendl; nverts = 65535; } mRequestedNumVerts = nverts; if (!mDynamicSize) { mNumVerts = nverts; } else if (mUsage == GL_STATIC_DRAW_ARB || nverts > mNumVerts || nverts < mNumVerts/2) { if (mUsage != GL_STATIC_DRAW_ARB && nverts + nverts/4 <= 65535) { nverts += nverts/4; } mNumVerts = nverts; } mSize = calcOffsets(mTypeMask, mOffsets, mNumVerts); }
/* Calculate all offset in font set. Start by assuming the best possible case where all variable-length offsets are 1-byte long and calculate sizes and offsets. Then recalculate all sizes and offsets and iterate until there are no further changes. */ static void fillOffsets(tcprivCtx h) { int i; /* Initialize header */ h->cffHdr.major = TC_MAJOR; h->cffHdr.minor = TC_MINOR; h->cffHdr.offSize = 1; /* Compute initial font sizes */ h->size.FontNames = 0; h->size.dicts = 0; h->size.gsubrs = subrSizeGlobal(h->g); for (i = 0; i < h->set.cnt; i++) { fillInitialSizes(h, &h->set.array[i]); } h->size.nameINDEX = INDEX_SIZE(h->set.cnt, h->size.FontNames); h->size.dictINDEX = INDEX_SIZE(h->set.cnt, h->size.dicts); /* Iterate offset computation until final offset remains unchanged */ h->offset.copyright = 0; while (calcOffsets(h)) { calcSizes(h); } h->cffHdr.hdrSize = CFF_HEADER_SIZE; /* Fill index headers */ h->nameHdr.count = (unsigned short)h->set.cnt; h->nameHdr.offSize = INDEX_OFF_SIZE(h->size.FontNames); h->dictHdr.count = (unsigned short)h->set.cnt; h->dictHdr.offSize = INDEX_OFF_SIZE(h->size.dicts); /* Add offsets to dictionaries */ for (i = 0; i < h->set.cnt; i++) { Font *font = &h->set.array[i]; if (font->offset.encoding != 0) { /* Save encoding offset */ dictSaveInt(&font->dict, font->offset.encoding); DICTSAVEOP(font->dict, cff_Encoding); } if (!(font->flags & FONT_SYNTHETIC)) { if (font->offset.charset != 0) { /* Save charset offset */ dictSaveInt(&font->dict, font->offset.charset); DICTSAVEOP(font->dict, cff_charset); } if (!(font->flags & FONT_CHAMELEON)) { /* Save CharString offset */ dictSaveInt(&font->dict, font->offset.CharStrings); DICTSAVEOP(font->dict, cff_CharStrings); } if (font->flags & FONT_CID) { int j; /* Save FDSelect offset */ dictSaveInt(&font->dict, font->offset.fdselect); DICTSAVEOP(font->dict, cff_FDSelect); /* Save FDArray offset */ dictSaveInt(&font->dict, font->offset.FDArray); DICTSAVEOP(font->dict, cff_FDArray); for (j = 0; j < font->fdCount; j++) { FDInfo *fdInfo = &font->fdInfo[j]; if (fdInfo->seenChar) { /* Save Private sizes/offsets */ dictSaveInt(&fdInfo->FD, fdInfo->size.Private); dictSaveInt(&fdInfo->FD, fdInfo->offset.Private); DICTSAVEOP(fdInfo->FD, cff_Private); if (fdInfo->size.Subrs != 0) { /* Save Subrs offset */ dictSaveInt(&fdInfo->Private, fdInfo->offset.Subrs); DICTSAVEOP(fdInfo->Private, cff_Subrs); } } } } else { /* Save Private size/offset */ dictSaveInt(&font->dict, font->size.Private); dictSaveInt(&font->dict, font->offset.Private); DICTSAVEOP(font->dict, cff_Private); if (font->size.Subrs != 0) { /* Save Subrs offset */ dictSaveInt(&font->Private, font->offset.Subrs); DICTSAVEOP(font->Private, cff_Subrs); } } } } }
int main(int argc, char **argv) { if (argc < 4) errx(1, "usage\t:%s <bam> <split out> <discord out> (optional #threads)", argv[0]); char *bam_file_name = argv[1]; char *split_file_name = argv[2]; char *disc_file_name = argv[3]; int threads = 2; if (argc == 5) { threads = atoi(argv[4]); } samFile *disc = sam_open(disc_file_name, "wb"); samFile *split = sam_open(split_file_name, "wb"); samFile *in = sam_open(bam_file_name, "rb"); if(in == NULL) errx(1, "Unable to open BAM/SAM file."); // TODO: handle cram. if (threads > 1) { bgzf_mt(in->fp.bgzf, threads, 256); } hts_idx_t *idx = sam_index_load(in, bam_file_name); if(idx == NULL) errx(1,"Unable to open BAM/SAM index."); bam_hdr_t *hdr = sam_hdr_read(in); int r = sam_hdr_write(disc, hdr); r = sam_hdr_write(split, hdr); bam1_t *aln = bam_init1(); int ret; while(ret = sam_read1(in, hdr, aln) >= 0) { if (((aln->core.flag) & 1294) == 0) r = sam_write1(disc, hdr, aln); uint8_t *sa = bam_aux_get(aln, "SA"); if (sa != 0) { char *sa_tag = strdup(bam_aux2Z(sa)); if ( count_tags(sa_tag) == 1) { char *chrm, strand, *cigar; uint32_t pos; split_sa_tag(sa_tag, &chrm, &pos, &strand, &cigar); struct line sa, al; calcOffsets(cigar, pos, strand, &sa); sa.chrm = chrm; sa.strand = strand; calcAlnOffsets(bam_get_cigar(aln), aln->core.n_cigar, aln->core.pos, bam_is_rev(aln) ? '-' : '+', &al); al.chrm = hdr->target_name[aln->core.tid]; al.strand = bam_is_rev(aln) ? '-' : '+'; struct line *left = &al, *right = &sa; if (left->SQO > right->SQO) { left = &sa; right = &al; } int overlap = MAX(1 + MIN(left->EQO, right->EQO) - MAX(left->SQO, right->SQO), 0); int alen1 = 1 + left->EQO - left->SQO; int alen2 = 1 + right->EQO - right->SQO; int mno = MIN(alen1-overlap, alen2-overlap); if (mno < MIN_NON_OVERLAP) continue; if ( (strcmp(left->chrm, right->chrm) == 0) && (left->strand == right->strand) ) { int leftDiag, rightDiag, insSize; if (left->strand == '-') { leftDiag = left->rapos - left->sclip; rightDiag = (right->rapos + right->raLen) - (right->sclip + right->qaLen); insSize = rightDiag - leftDiag; } else { leftDiag = (left->rapos + left->raLen) - (left->sclip + left->qaLen); rightDiag = right->rapos - right->sclip; insSize = leftDiag - rightDiag; } int desert = right->SQO - left->EQO - 1; if ((abs(insSize) < MIN_INDEL_SIZE) || ((desert > 0) && ( (desert - (int)MAX(0, insSize)) > MAX_UNMAPPED_BASES))) continue; } char *qname = bam_get_qname(aln); if ((aln->core.flag & 64) == 64) qname[0] = 'A'; else qname[0] = 'B'; r = sam_write1(split, hdr, aln); } free(sa_tag); } } bam_destroy1(aln); hts_idx_destroy(idx); bam_hdr_destroy(hdr); sam_close(in); sam_close(disc); sam_close(split); if(ret < -1) { errx(1, "lumpy_filter: error reading bam: %s\n", bam_file_name); } }