view infinite_canvas/web_surface.h @ 276:b55c22cff335

Add interactive infinite canvas prototype
author MrJuneJune <me@mrjunejune.com>
date Mon, 17 Aug 2026 16:57:56 -0700
parents
children 8d560f50ed4c
line wrap: on
line source

#ifndef INFINITE_CANVAS_WEB_SURFACE_H
#define INFINITE_CANVAS_WEB_SURFACE_H

#include "infinite_canvas/canvas.h"

#define CANVAS_MAX_WEB_VIEWS 12

typedef struct {
    uint32 entity_id;
    Canvas_Entity_Type entity_type;
    void *p_native;
    uint8 *p_pixels;
    Texture2D texture;
    int32 texture_width;
    int32 texture_height;
    size_t pixel_capacity;
    char url[128];
    boolean active;
    boolean browser_created;
    boolean texture_ready;
    boolean pixels_dirty;
} Canvas_Web_View;

typedef struct {
    Dowa_Arena *p_arena;
    void *p_native;
    Canvas_Web_View views[CANVAS_MAX_WEB_VIEWS];
    uint32 focused_entity_id;
    boolean initialized;
} Canvas_Web_Surface;

#if defined(__cplusplus)
extern "C" {
#endif

int32 Canvas_Web_Surface_Execute_Subprocess(int argc, char **p_argv);
boolean Canvas_Web_Surface_Init(
    Canvas_Web_Surface *p_surface,
    Dowa_Arena *p_arena);
boolean Canvas_Web_Surface_Update_Input(
    Canvas_Web_Surface *p_surface,
    const Canvas_Camera *p_camera,
    const Canvas_Scene *p_scene);
void Canvas_Web_Surface_Sync(
    Canvas_Web_Surface *p_surface,
    const Canvas_Camera *p_camera,
    const Canvas_Scene *p_scene);
void Canvas_Web_Surface_Draw(
    const Canvas_Web_Surface *p_surface,
    const Canvas_Camera *p_camera,
    const Canvas_Scene *p_scene);
boolean Canvas_Web_Surface_Is_Focused(const Canvas_Web_Surface *p_surface);
void Canvas_Web_Surface_Shutdown(Canvas_Web_Surface *p_surface);

#if defined(__cplusplus)
}
#endif

#endif