[QP] Add RGB565 surface. Docs clarification, cleanup, tabsification, and reordering. (#18396)
This commit is contained in:
		
							parent
							
								
									e9bdc4eeb1
								
							
						
					
					
						commit
						1849897444
					
				
					 10 changed files with 782 additions and 294 deletions
				
			
		| 
						 | 
				
			
			@ -36,10 +36,10 @@ typedef struct qff_font_handle_t {
 | 
			
		|||
static qff_font_handle_t font_descriptors[QUANTUM_PAINTER_NUM_FONTS] = {0};
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Quantum Painter External API: qp_load_font_mem
 | 
			
		||||
// Helper: load font from stream
 | 
			
		||||
 | 
			
		||||
painter_font_handle_t qp_load_font_mem(const void *buffer) {
 | 
			
		||||
    qp_dprintf("qp_load_font_mem: entry\n");
 | 
			
		||||
static painter_font_handle_t qp_load_font_internal(bool (*stream_factory)(qff_font_handle_t *font, void *arg), void *arg) {
 | 
			
		||||
    qp_dprintf("qp_load_font: entry\n");
 | 
			
		||||
    qff_font_handle_t *font = NULL;
 | 
			
		||||
 | 
			
		||||
    // Find a free slot
 | 
			
		||||
| 
						 | 
				
			
			@ -52,20 +52,18 @@ painter_font_handle_t qp_load_font_mem(const void *buffer) {
 | 
			
		|||
 | 
			
		||||
    // Drop out if not found
 | 
			
		||||
    if (!font) {
 | 
			
		||||
        qp_dprintf("qp_load_font_mem: fail (no free slot)\n");
 | 
			
		||||
        qp_dprintf("qp_load_font: fail (no free slot)\n");
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Assume we can read the graphics descriptor
 | 
			
		||||
    font->mem_stream = qp_make_memory_stream((void *)buffer, sizeof(qff_font_descriptor_v1_t));
 | 
			
		||||
 | 
			
		||||
    // Update the length of the stream to match, and rewind to the start
 | 
			
		||||
    font->mem_stream.length   = qff_get_total_size(&font->stream);
 | 
			
		||||
    font->mem_stream.position = 0;
 | 
			
		||||
    if (!stream_factory(font, arg)) {
 | 
			
		||||
        qp_dprintf("qp_load_font: fail (could not create stream)\n");
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Now that we know the length, validate the input data
 | 
			
		||||
    if (!qff_validate_stream(&font->stream)) {
 | 
			
		||||
        qp_dprintf("qp_load_font_mem: fail (failed validation)\n");
 | 
			
		||||
        qp_dprintf("qp_load_font: fail (failed validation)\n");
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -76,12 +74,12 @@ painter_font_handle_t qp_load_font_mem(const void *buffer) {
 | 
			
		|||
 | 
			
		||||
    void *ram_buffer = malloc(font->mem_stream.length);
 | 
			
		||||
    if (ram_buffer == NULL) {
 | 
			
		||||
        qp_dprintf("qp_load_font_mem: could not allocate enough RAM for font, falling back to original\n");
 | 
			
		||||
        qp_dprintf("qp_load_font: could not allocate enough RAM for font, falling back to original\n");
 | 
			
		||||
    } else {
 | 
			
		||||
        do {
 | 
			
		||||
            // Copy the data into RAM
 | 
			
		||||
            if (qp_stream_read(ram_buffer, 1, font->mem_stream.length, &font->mem_stream) != font->mem_stream.length) {
 | 
			
		||||
                qp_dprintf("qp_load_font_mem: could not copy from flash to RAM, falling back to original\n");
 | 
			
		||||
                qp_dprintf("qp_load_font: could not copy from flash to RAM, falling back to original\n");
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -102,17 +100,37 @@ painter_font_handle_t qp_load_font_mem(const void *buffer) {
 | 
			
		|||
    qff_read_font_descriptor(&font->stream, &font->base.line_height, &font->has_ascii_table, &font->num_unicode_glyphs, &font->bpp, &font->has_palette, &font->compression_scheme, NULL);
 | 
			
		||||
 | 
			
		||||
    if (!qp_internal_bpp_capable(font->bpp)) {
 | 
			
		||||
        qp_dprintf("qp_load_font_mem: fail (image bpp too high (%d), check QUANTUM_PAINTER_SUPPORTS_256_PALETTE)\n", (int)font->bpp);
 | 
			
		||||
        qp_dprintf("qp_load_font: fail (image bpp too high (%d), check QUANTUM_PAINTER_SUPPORTS_256_PALETTE)\n", (int)font->bpp);
 | 
			
		||||
        qp_close_font((painter_font_handle_t)font);
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Validation success, we can return the handle
 | 
			
		||||
    font->validate_ok = true;
 | 
			
		||||
    qp_dprintf("qp_load_font_mem: ok\n");
 | 
			
		||||
    qp_dprintf("qp_load_font: ok\n");
 | 
			
		||||
    return (painter_font_handle_t)font;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Quantum Painter External API: qp_load_font_mem
 | 
			
		||||
 | 
			
		||||
static inline bool font_mem_stream_factory(qff_font_handle_t *font, void *arg) {
 | 
			
		||||
    void *buffer = arg;
 | 
			
		||||
 | 
			
		||||
    // Assume we can read the graphics descriptor
 | 
			
		||||
    font->mem_stream = qp_make_memory_stream(buffer, sizeof(qff_font_descriptor_v1_t));
 | 
			
		||||
 | 
			
		||||
    // Update the length of the stream to match, and rewind to the start
 | 
			
		||||
    font->mem_stream.length   = qff_get_total_size(&font->stream);
 | 
			
		||||
    font->mem_stream.position = 0;
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
painter_font_handle_t qp_load_font_mem(const void *buffer) {
 | 
			
		||||
    return qp_load_font_internal(font_mem_stream_factory, (void *)buffer);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Quantum Painter External API: qp_close_font
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -133,6 +151,7 @@ bool qp_close_font(painter_font_handle_t font) {
 | 
			
		|||
#endif // QUANTUM_PAINTER_LOAD_FONTS_TO_RAM
 | 
			
		||||
 | 
			
		||||
    // Free up this font for use elsewhere.
 | 
			
		||||
    qp_stream_close(&qff_font->stream);
 | 
			
		||||
    qff_font->validate_ok = false;
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue