diff --git a/src/plot_controls.cpp b/src/plot_controls.cpp index 0344d75..02782fe 100644 --- a/src/plot_controls.cpp +++ b/src/plot_controls.cpp @@ -867,6 +867,10 @@ namespace Manager { } } } + if (collections.empty()) { + processed = false; + redraw = true; + } printRegionInfo(); } else if (key == opts.scroll_left) { @@ -901,6 +905,10 @@ namespace Manager { } } } + if (collections.empty()) { + processed = false; + redraw = true; + } printRegionInfo(); } else if (key == opts.zoom_out) { @@ -952,6 +960,10 @@ namespace Manager { } } } + if (collections.empty()) { + processed = false; + redraw = true; + } if (opts.link_op != 0) { HGW::refreshLinked(collections, opts, &samMaxY, sortReadsBy); } @@ -985,7 +997,7 @@ namespace Manager { cl.collection_processed = false; } } - if (bams.empty()) { + if (collections.empty()) { processed = false; redraw = true; } else { @@ -1915,6 +1927,10 @@ namespace Manager { glfwPostEmptyEvent(); return; } else { + if (collections.empty()) { + redraw = false; + return; + } if (idx < 0) { return; } @@ -2020,7 +2036,12 @@ namespace Manager { } return; } + if (collections.empty()) { + redraw = false; + return; + } assert (rs < collections.size()); + assert (!cl.levelsStart.empty()); Segs::ReadCollection &cl = collections[rs]; regionSelection = cl.regionIdx; int pos = (int) ((((double)xPos_fb - (double)cl.xOffset) / (double)cl.xScaling) + (double)cl.region->start); @@ -2034,8 +2055,8 @@ namespace Manager { updateCursorGenomePos(cl.xOffset, cl.xScaling, (float)xPos_fb, cl.region, cl.bamIdx); } else if (mode == TILED) { assert (variantFileSelection < variantTracks.size()); - currentVarTrack = &variantTracks[variantFileSelection]; assert (currentVarTrack != nullptr); + currentVarTrack = &variantTracks[variantFileSelection]; int i = 0; for (auto &b: bboxes) { if (xPos_fb > b.xStart && xPos_fb < b.xEnd && yPos_fb > b.yStart && yPos_fb < b.yEnd) { diff --git a/src/plot_manager.cpp b/src/plot_manager.cpp index e1c25b2..7303ace 100644 --- a/src/plot_manager.cpp +++ b/src/plot_manager.cpp @@ -955,8 +955,12 @@ namespace Manager { frameId += 1; setGlfwFrameBufferSize(); - if (regions.empty() || bams.empty()) { + if (bams.empty() && !regions.empty()) { canvasR->drawPaint(opts.theme.bgPaint); + setScaling(); + if (!regions.empty()) { + fetchRefSeqs(); + } } else { processBam(); // Reads may be buffered here, or else streamed using the runDrawNoBuffer functions below setScaling(); @@ -1021,15 +1025,15 @@ namespace Manager { } canvasR->restore(); } - if (opts.max_coverage) { - Drawing::drawCoverage(opts, collections, canvasR, fonts, covY, refSpace); - } - Drawing::drawRef(opts, regions, fb_width, canvasR, fonts, refSpace, (float)regions.size(), gap, monitorScale, opts.scale_bar); - Drawing::drawBorders(opts, fb_width, fb_height, canvasR, regions.size(), bams.size(), trackY, covY, (int)tracks.size(), totalTabixY, refSpace, gap); - Drawing::drawTracks(opts, fb_width, fb_height, canvasR, totalTabixY, tabixY, tracks, regions, fonts, gap, monitorScale, sliderSpace); - Drawing::drawChromLocation(opts, fonts, regions, ideogram, canvasR, fai, fb_width, fb_height, monitorScale, gap); + } + if (opts.max_coverage) { + Drawing::drawCoverage(opts, collections, canvasR, fonts, covY, refSpace); } + Drawing::drawRef(opts, regions, fb_width, canvasR, fonts, refSpace, (float)regions.size(), gap); + Drawing::drawBorders(opts, fb_width, fb_height, canvasR, regions.size(), bams.size(), trackY, covY, (int)tracks.size(), totalTabixY, refSpace, gap); + Drawing::drawTracks(opts, fb_width, fb_height, canvasR, totalTabixY, tabixY, tracks, regions, fonts, gap, monitorScale, sliderSpace); + Drawing::drawChromLocation(opts, fonts, regions, ideogram, canvasR, fai, fb_width, fb_height, monitorScale, gap); imageCacheQueue.emplace_back(frameId, rasterSurfacePtr[0]->makeImageSnapshot()); canvas->drawImage(imageCacheQueue.back().second, 0, 0);