diff --git a/client/modules/IDE/hooks/useHandleMessageEvent.js b/client/modules/IDE/hooks/useHandleMessageEvent.js index 68852c6c1..5cdd8ca23 100644 --- a/client/modules/IDE/hooks/useHandleMessageEvent.js +++ b/client/modules/IDE/hooks/useHandleMessageEvent.js @@ -3,13 +3,37 @@ import { Decode } from 'console-feed'; import { dispatchConsoleEvent } from '../actions/console'; import { stopSketch, expandConsole } from '../actions/ide'; +// Helper function to restore p5.Font objects +function restoreP5Font(obj) { + if (obj && obj._isP5Font) { + // Return a simplified font-like object for console display + return { + _isP5Font: true, + name: obj.name, + path: obj.path, + face: { + family: obj.face?.family, + style: obj.face?.style, + weight: obj.face?.weight + } + }; + } + return obj; +} + export default function useHandleMessageEvent() { const dispatch = useDispatch(); const handleMessageEvent = (data) => { const { source, messages } = data; if (source === 'sketch' && Array.isArray(messages)) { - const decodedMessages = messages.map((message) => Decode(message.log)); + const decodedMessages = messages.map((message) => { + const decoded = Decode(message.log); + if (decoded.data) { + decoded.data = decoded.data.map(restoreP5Font); + } + return decoded; + }); decodedMessages.every((message, index, arr) => { const { data: args } = message; let hasInfiniteLoop = false; diff --git a/client/utils/previewEntry.js b/client/utils/previewEntry.js index a361c0047..8939a4bb3 100644 --- a/client/utils/previewEntry.js +++ b/client/utils/previewEntry.js @@ -35,6 +35,30 @@ setInterval(() => { } }, LOGWAIT); +// Helper function to handle p5.Font objects +function handleP5Font(obj) { + // Check for p5.Font instances in multiple ways + if ( + (obj && + obj.constructor && + (obj.constructor.name === 'Font' || + obj.constructor.name === 'p5.Font')) || + (window.p5 && obj instanceof window.p5.Font) + ) { + return { + _isP5Font: true, + name: obj.name, + path: obj.path, + face: { + family: obj.face?.family, + style: obj.face?.style, + weight: obj.face?.weight + } + }; + } + return obj; +} + function handleMessageEvent(e) { // maybe don't need this?? idk! if (window.origin !== e.origin) return; @@ -44,7 +68,7 @@ function handleMessageEvent(e) { const decodedMessages = messages.map((message) => Decode(message.log)); decodedMessages.forEach((message) => { const { data: args } = message; - const { result, error } = evaluateExpression(args); + const { result, error } = evaluateExpression(args.map(handleP5Font)); const resultMessages = [ { log: Encode({ method: error ? 'error' : 'result', data: [result] }) } ];