Compare commits

...

7 Commits

Author SHA1 Message Date
Felix Roos d84088711c fix: map highlighting changes 2023-07-01 15:26:11 +02:00
Felix Roos f07859996e Merge pull request #631 from tidalcycles/fix-canvas-resize
fix: update canvas size on window resize
2023-06-30 22:47:39 +02:00
Felix Roos fbc73bc78a Merge pull request #630 from tidalcycles/out-of-range-error
fix: out of range error
2023-06-30 22:45:41 +02:00
Felix Roos bd8ad1ed1b fix: out of range error due to rerender 2023-06-30 22:40:02 +02:00
Felix Roos dc2ff83fa5 do not flash when empty 2023-06-30 22:38:14 +02:00
Felix Roos 13545d147b optimize rendering 2023-06-30 22:37:55 +02:00
Felix Roos 1b85aa713b fix: update canvas size on window resize 2023-06-30 16:03:56 +02:00
5 changed files with 27 additions and 11 deletions
+1 -1
View File
@@ -103,7 +103,7 @@ const flashField = StateField.define({
try {
for (let e of tr.effects) {
if (e.is(setFlash)) {
if (e.value) {
if (e.value && tr.newDoc.length > 0) {
const mark = Decoration.mark({ attributes: { style: `background-color: #FFCA2880` } });
flash = Decoration.set([mark.range(0, tr.newDoc.length)]);
} else {
+8
View File
@@ -15,6 +15,14 @@ export const getDrawContext = (id = 'test-canvas') => {
canvas.height = window.innerHeight;
canvas.style = 'pointer-events:none;width:100%;height:100%;position:fixed;top:0;left:0';
document.body.prepend(canvas);
let timeout;
window.addEventListener('resize', () => {
timeout && clearTimeout(timeout);
timeout = setTimeout(() => {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
}, 200);
});
}
return canvas.getContext('2d');
};
+3 -2
View File
@@ -68,8 +68,9 @@ Pattern.prototype.spiral = function (options = {}) {
} = options;
function spiral({ ctx, time, haps, drawTime }) {
ctx.clearRect(0, 0, ctx.canvas.clientWidth, ctx.canvas.clientHeight);
const [cx, cy] = [ctx.canvas.width / 2, ctx.canvas.height / 2];
const [w, h] = [ctx.canvas.width, ctx.canvas.height];
ctx.clearRect(0, 0, w * 2, h * 2);
const [cx, cy] = [w / 2, h / 2];
const settings = {
margin: size / stretch,
cx,
@@ -20,7 +20,7 @@ const flashField = StateField.define({
try {
for (let e of tr.effects) {
if (e.is(setFlash)) {
if (e.value) {
if (e.value && tr.newDoc?.length?.length > 0) {
const mark = Decoration.mark({ attributes: { style: `background-color: #FFCA2880` } });
flash = Decoration.set([mark.range(0, tr.newDoc.length)]);
} else {
@@ -50,6 +50,9 @@ const highlightField = StateField.define({
return Decoration.none;
},
update(highlights, tr) {
// proper fix for https://github.com/tidalcycles/strudel/issues/178
// see https://discuss.codemirror.net/t/uncatchable-out-of-range-errors-when-document-changes/4864/5
highlights = highlights.map(tr.changes);
try {
for (let e of tr.effects) {
if (e.is(setHighlights)) {
@@ -152,6 +155,8 @@ export default function CodeMirror({
return _extensions;
}, [keybindings, isAutoCompletionEnabled, isLineWrappingEnabled]);
const basicSetup = useMemo(() => ({ lineNumbers: isLineNumbersDisplayed }), [isLineNumbersDisplayed]);
return (
<div style={{ fontSize, fontFamily }} className="w-full">
<_CodeMirror
@@ -161,7 +166,7 @@ export default function CodeMirror({
onCreateEditor={handleOnCreateEditor}
onUpdate={handleOnUpdate}
extensions={extensions}
basicSetup={{ lineNumbers: isLineNumbersDisplayed }}
basicSetup={basicSetup}
/>
</div>
);
+8 -6
View File
@@ -9,7 +9,7 @@ import { CodeMirror, cx, flash, useHighlighting, useStrudel, useKeydown } from '
import { getAudioContext, initAudioOnFirstClick, resetLoadedSounds, webaudioOutput } from '@strudel.cycles/webaudio';
import { createClient } from '@supabase/supabase-js';
import { nanoid } from 'nanoid';
import React, { createContext, useCallback, useEffect, useState } from 'react';
import React, { createContext, useCallback, useEffect, useState, useMemo } from 'react';
import './Repl.css';
import { Footer } from './Footer';
import { Header } from './Header';
@@ -264,6 +264,11 @@ export function Repl({ embedded = false }) {
handleShuffle,
handleShare,
};
const currentTheme = useMemo(() => themes[theme] || themes.strudelTheme, [theme]);
const handleViewChanged = useCallback((v) => {
setView(v);
}, []);
return (
// bg-gradient-to-t from-blue-900 to-slate-900
// bg-gradient-to-t from-green-900 to-slate-900
@@ -278,7 +283,7 @@ export function Repl({ embedded = false }) {
<Header context={context} />
<section className="grow flex text-gray-100 relative overflow-auto cursor-text pb-0" id="code">
<CodeMirror
theme={themes[theme] || themes.strudelTheme}
theme={currentTheme}
value={code}
keybindings={keybindings}
isLineNumbersDisplayed={isLineNumbersDisplayed}
@@ -287,10 +292,7 @@ export function Repl({ embedded = false }) {
fontSize={fontSize}
fontFamily={fontFamily}
onChange={handleChangeCode}
onViewChanged={(v) => {
setView(v);
// window.editorView = v;
}}
onViewChanged={handleViewChanged}
onSelectionChange={handleSelectionChange}
/>
</section>