Compare commits
6
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
88004b7ba0 | ||
|
|
0492570f5d | ||
|
|
90cb84500e | ||
|
|
697f697fc5 | ||
|
|
791ad4e0a9 | ||
|
|
1d2bf1d31c |
No files matched your search
@@ -162,6 +162,7 @@ class Blocks extends React.Component {
|
||||
this.setLocale();
|
||||
} else {
|
||||
this.props.vm.refreshWorkspace();
|
||||
this.requestToolboxUpdate();
|
||||
}
|
||||
|
||||
window.dispatchEvent(new Event('resize'));
|
||||
|
||||
@@ -118,15 +118,14 @@ const costumeUpload = function (fileData, fileType, storage, handleCostume, hand
|
||||
}
|
||||
case 'image/gif': {
|
||||
let costumes = [];
|
||||
const onFrame = (frameNumber, dataUrl) => {
|
||||
gifDecoder(fileData, (frameNumber, dataUrl, numFrames) => {
|
||||
costumeUpload(dataUrl, 'image/png', storage, costumes_ => {
|
||||
costumes = costumes.concat(costumes_);
|
||||
if (frameNumber === numFrames - 1) {
|
||||
handleCostume(costumes);
|
||||
}
|
||||
}, handleError);
|
||||
};
|
||||
const onDone = () => {
|
||||
handleCostume(costumes);
|
||||
};
|
||||
gifDecoder(fileData, {onFrame, onDone});
|
||||
});
|
||||
return; // Abandon this load, do not try to load gif itself
|
||||
}
|
||||
default:
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import {GifReader} from 'omggif';
|
||||
|
||||
export default (arrayBuffer, {onFrame, onDone}) => {
|
||||
export default (arrayBuffer, onFrame) => {
|
||||
const canvas = document.createElement('canvas');
|
||||
const ctx = canvas.getContext('2d');
|
||||
const gifReader = new GifReader(new Uint8Array(arrayBuffer));
|
||||
const numFrames = gifReader.numFrames();
|
||||
canvas.width = gifReader.width;
|
||||
canvas.height = gifReader.height;
|
||||
|
||||
@@ -14,7 +15,6 @@ export default (arrayBuffer, {onFrame, onDone}) => {
|
||||
const framePixels = [];
|
||||
gifReader.decodeAndBlitFrameRGBA(i, framePixels);
|
||||
const {x, y, width, height, disposal} = gifReader.frameInfo(i);
|
||||
|
||||
for (let row = 0; row < height; row++) {
|
||||
for (let column = 0; column < width; column++) {
|
||||
const indexOffset = 4 * (x + (y * canvas.width));
|
||||
@@ -47,16 +47,12 @@ export default (arrayBuffer, {onFrame, onDone}) => {
|
||||
break;
|
||||
|
||||
}
|
||||
onFrame(i, dataUrl);
|
||||
onFrame(i, dataUrl, numFrames);
|
||||
|
||||
if (i < gifReader.numFrames() - 1) {
|
||||
if (i < numFrames - 1) {
|
||||
setTimeout(() => {
|
||||
loadFrame(i + 1);
|
||||
});
|
||||
} else {
|
||||
setTimeout(() => {
|
||||
onDone();
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -252,4 +252,18 @@ describe('Working with the blocks', () => {
|
||||
await driver.sleep(500); // Wait for scroll to finish
|
||||
await clickText('my\u00A0variable');
|
||||
});
|
||||
|
||||
// Regression test for switching editor tabs causing toolbox to stop updating
|
||||
test('Creating variables after adding extensions updates the toolbox', async () => {
|
||||
await loadUri(uri);
|
||||
await clickText('Costumes');
|
||||
await clickText('Code');
|
||||
await clickText('Variables', scope.blocksTab);
|
||||
await driver.sleep(500); // Wait for scroll
|
||||
await clickText('Make a List');
|
||||
const el = await findByXpath("//input[@name='New list name:']");
|
||||
await el.sendKeys('list1');
|
||||
await clickButton('OK');
|
||||
await clickText('list1', scope.blocksTab);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user