don't do full render when zooming happens in viewport rather than

offscreen canvas
don't do clearRect on renderChunk (Chrome shouldn't have the flickering
issue anymore)
This commit is contained in:
HF 2021-07-24 01:28:05 +02:00
parent cf865a0ba4
commit a3e35cced6
3 changed files with 46 additions and 21 deletions

View File

@ -65,10 +65,15 @@ export default class MarkdownParser {
/*
* parses Articles (contains paragraphs, code-blocks, numeration, etc.)
* returns when encountering heading of level or lower (iter is at # position)
* @param text string of text
* @param start number of position in text where to start
* @param level the number of heading levels we are in
* @param indent ndentation that should be considered
* returns when encountering heading of <= level (iter is at # position)
* or heading-cancel with three spaces (iter is past newlines)
* or ident is smaller than given
*/
parseArticle(text: string, start: number, level = 0) {
parseArticle(text: string, start: number, level = 0, indent = 0) {
let iter = start;
const mdArray = [];
let paraStart = iter;
@ -116,6 +121,11 @@ export default class MarkdownParser {
return [mdArray, iter];
}
parseList(text: string, start: number) {
const iter = start;
const mdArray = [];
}
/*
* parse Code Block
* start is first character after the initializing ```

View File

@ -12,17 +12,32 @@ import {
export default (store) => (next) => (action) => {
const { type } = action;
if (type === 'SET_HISTORICAL_TIME') {
const state = store.getState();
const renderer = getRenderer();
const {
historicalDate: oldDate,
historicalTime: oldTime,
} = state.canvas;
renderer.updateOldHistoricalTime(
oldDate,
oldTime,
);
let prevScale = null;
switch (type) {
case 'TOGGLE_HISTORICAL_VIEW':
case 'SET_SCALE': {
const state = store.getState();
prevScale = state.canvas.viewscale;
break;
}
case 'SET_HISTORICAL_TIME': {
const state = store.getState();
const renderer = getRenderer();
const {
historicalDate: oldDate,
historicalTime: oldTime,
} = state.canvas;
renderer.updateOldHistoricalTime(
oldDate,
oldTime,
);
break;
}
default:
// nothing
}
// executed after reducers
@ -78,7 +93,7 @@ export default (store) => (next) => (action) => {
case 'TOGGLE_HISTORICAL_VIEW':
case 'SET_SCALE': {
const renderer = getRenderer();
renderer.updateScale(state);
renderer.updateScale(state, prevScale);
break;
}

View File

@ -176,6 +176,7 @@ class Renderer {
updateScale(
state,
prevScale = null,
) {
const {
viewscale,
@ -196,7 +197,12 @@ class Renderer {
this.tiledZoom = tiledZoom;
this.relScale = relScale;
this.updateView(state);
this.forceNextRender = true;
if (prevScale === null
|| viewscale < SCALE_THREASHOLD || prevScale < SCALE_THREASHOLD) {
this.forceNextRender = true;
} else {
this.forceNextSubrender = true;
}
}
updateView(state) {
@ -307,9 +313,6 @@ class Renderer {
} = state.canvas;
let { relScale } = this;
// clear rect is just needed for Google Chrome, else it would flash
// regularly
context.clearRect(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT);
// Disable smoothing
// making it dependent on the scale is needed for Google Chrome, else
@ -544,9 +547,6 @@ class Renderer {
historicalCanvasSize,
} = state.canvas;
// clear rect is just needed for Google Chrome, else it would flash
context.clearRect(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT);
// Disable smoothing
// making it dependent on the scale is needed for Google Chrome, else
// scale <1 would look shit