Added plot_get/set_text_plotter and comments
This commit is contained in:
parent
569b748172
commit
2c0bcc39bd
|
@ -1,106 +1,121 @@
|
|||
/*
|
||||
* Copyright 2010 Ole Loots <ole@monochrom.net>
|
||||
*
|
||||
* This file is part of NetSurf, http://www.netsurf-browser.org/
|
||||
*
|
||||
* NetSurf is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* NetSurf is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
/*
|
||||
* Copyright 2010 Ole Loots <ole@monochrom.net>
|
||||
*
|
||||
* This file is part of NetSurf, http://www.netsurf-browser.org/
|
||||
*
|
||||
* NetSurf is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* NetSurf is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "atari/plot/fontplot.h"
|
||||
|
||||
const struct s_font_driver_table_entry font_driver_table[] =
|
||||
const struct s_font_driver_table_entry font_driver_table[] =
|
||||
{
|
||||
#ifdef WITH_VDI_FONT_DRIVER
|
||||
{"vdi", ctor_font_plotter_vdi, 0},
|
||||
#ifdef WITH_VDI_FONT_DRIVER
|
||||
{"vdi", ctor_font_plotter_vdi, 0},
|
||||
#endif
|
||||
#ifdef WITH_FREETYPE_FONT_DRIVER
|
||||
{"freetype", ctor_font_plotter_freetype, 0},
|
||||
#endif
|
||||
#ifdef WITH_INTERNAL_FONT_DRIVER
|
||||
#ifdef WITH_INTERNAL_FONT_DRIVER
|
||||
{"internal", ctor_font_plotter_internal, 0},
|
||||
#endif
|
||||
{(char*)NULL, NULL, 0}
|
||||
#endif
|
||||
{(char*)NULL, NULL, 0}
|
||||
};
|
||||
|
||||
void dump_font_drivers(void)
|
||||
{
|
||||
int i = 0;
|
||||
while( font_driver_table[i].name != NULL ) {
|
||||
printf("%s -> flags: %d\n",
|
||||
font_driver_table[i].name,
|
||||
font_driver_table[i].flags
|
||||
);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Create an new text plotter object
|
||||
*/
|
||||
FONT_PLOTTER new_font_plotter( int vdihandle, char * name, unsigned long flags,
|
||||
int * error)
|
||||
{
|
||||
int i=0;
|
||||
int res = 0-ERR_PLOTTER_NOT_AVAILABLE;
|
||||
FONT_PLOTTER fplotter = (FONT_PLOTTER)malloc( sizeof(struct s_font_plotter) );
|
||||
if( fplotter == NULL ) {
|
||||
*error = 0-ERR_NO_MEM;
|
||||
return( NULL );
|
||||
void dump_font_drivers(void)
|
||||
{
|
||||
int i = 0;
|
||||
while( font_driver_table[i].name != NULL ) {
|
||||
printf("%s -> flags: %d\n",
|
||||
font_driver_table[i].name,
|
||||
font_driver_table[i].flags
|
||||
);
|
||||
i++;
|
||||
}
|
||||
memset( fplotter, 0, sizeof(FONT_PLOTTER));
|
||||
fplotter->vdi_handle = vdihandle;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Create an new text plotter object
|
||||
* Available: "vdi", "freetype"
|
||||
* @param vdihandle the vdi handle to act upon,
|
||||
* @param name selector ID (string) of the font plotter.
|
||||
* @flags flags configration flags of the plotter,
|
||||
* available flags:
|
||||
* FONTPLOT_FLAG_MONOGLYPH - Enable 1 bit font plotting
|
||||
* @param error set to != 0 when errors occur
|
||||
*/
|
||||
FONT_PLOTTER new_font_plotter( int vdihandle, char * name, unsigned long flags,
|
||||
int * error)
|
||||
{
|
||||
int i=0;
|
||||
int res = 0-ERR_PLOTTER_NOT_AVAILABLE;
|
||||
FONT_PLOTTER fplotter;
|
||||
|
||||
/* allocate the font plotter instance: */
|
||||
fplotter = (FONT_PLOTTER)malloc( sizeof(struct s_font_plotter) );
|
||||
if( fplotter == NULL ) {
|
||||
*error = 0-ERR_NO_MEM;
|
||||
return( NULL );
|
||||
}
|
||||
|
||||
/* Initialize the font plotter with the requested settings: */
|
||||
memset( fplotter, 0, sizeof(FONT_PLOTTER));
|
||||
fplotter->vdi_handle = vdihandle;
|
||||
fplotter->name = name;
|
||||
fplotter->flags = 0;
|
||||
fplotter->flags = 0;
|
||||
fplotter->flags |= flags;
|
||||
for( i = 0; ; i++) {
|
||||
if( font_driver_table[i].name == NULL ) {
|
||||
res = 0-ERR_PLOTTER_NOT_AVAILABLE;
|
||||
break;
|
||||
} else {
|
||||
if( strcmp(name, font_driver_table[i].name) == 0 ) {
|
||||
if( font_driver_table[i].ctor ) {
|
||||
res = font_driver_table[i].ctor( fplotter );
|
||||
*error = 0;
|
||||
} else {
|
||||
res = 0-ERR_PLOTTER_NOT_AVAILABLE;
|
||||
*error = res;
|
||||
return (NULL);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if( res < 0 ) {
|
||||
free( fplotter );
|
||||
*error = res;
|
||||
return( NULL );
|
||||
}
|
||||
return( fplotter );
|
||||
|
||||
/* Find the selector string in the font plotter table: */
|
||||
/* And bail out when the font plotter is not available: */
|
||||
for( i = 0; ; i++) {
|
||||
if( font_driver_table[i].name == NULL ) {
|
||||
res = 0-ERR_PLOTTER_NOT_AVAILABLE;
|
||||
break;
|
||||
} else {
|
||||
if( strcmp(name, font_driver_table[i].name) == 0 ) {
|
||||
if( font_driver_table[i].ctor ) {
|
||||
res = font_driver_table[i].ctor( fplotter );
|
||||
*error = 0;
|
||||
} else {
|
||||
res = 0-ERR_PLOTTER_NOT_AVAILABLE;
|
||||
*error = res;
|
||||
return (NULL);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if( res < 0 ) {
|
||||
free( fplotter );
|
||||
*error = res;
|
||||
return( NULL );
|
||||
}
|
||||
return( fplotter );
|
||||
}
|
||||
|
||||
/*
|
||||
Free an font plotter
|
||||
*/
|
||||
int delete_font_plotter(FONT_PLOTTER p)
|
||||
{
|
||||
if( p ) {
|
||||
p->dtor(p);
|
||||
free( p );
|
||||
p = NULL;
|
||||
}
|
||||
else
|
||||
return( -1 );
|
||||
return( 0 );
|
||||
/*
|
||||
Free an font plotter
|
||||
*/
|
||||
int delete_font_plotter(FONT_PLOTTER p)
|
||||
{
|
||||
if( p ) {
|
||||
p->dtor(p);
|
||||
free( p );
|
||||
p = NULL;
|
||||
}
|
||||
else
|
||||
return( -1 );
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
|
|
|
@ -1,79 +1,84 @@
|
|||
#ifndef FONT_PLOT_H
|
||||
#define FONT_PLOT_H
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "desktop/plot_style.h"
|
||||
#include "desktop/plot_style.h"
|
||||
#include "image/bitmap.h"
|
||||
#include "utils/log.h"
|
||||
#include "atari/bitmap.h"
|
||||
#include "atari/bitmap.h"
|
||||
#include "atari/plot/eddi.h"
|
||||
#include "atari/gui.h"
|
||||
#include "atari/misc.h"
|
||||
#include "atari/gui.h"
|
||||
#include "atari/misc.h"
|
||||
#include "atari/osspec.h"
|
||||
|
||||
typedef struct s_font_plotter * FONT_PLOTTER;
|
||||
typedef struct s_font_plotter * FONT_PLOTTER;
|
||||
|
||||
struct s_font_driver_table_entry
|
||||
{
|
||||
const char * name;
|
||||
int (*ctor)( FONT_PLOTTER self );
|
||||
int flags;
|
||||
struct s_font_driver_table_entry
|
||||
{
|
||||
const char * name;
|
||||
int (*ctor)( FONT_PLOTTER self );
|
||||
int flags;
|
||||
};
|
||||
|
||||
/* declaration of font plotter member functions: (_fpmf_ prefix) */
|
||||
typedef int (*_fpmf_str_width)( FONT_PLOTTER self, const plot_font_style_t *fstyle,
|
||||
const char * str, size_t length, int * width);
|
||||
typedef int (*_fpmf_str_split)( FONT_PLOTTER self, const plot_font_style_t *fstyle,
|
||||
const char *string, size_t length,
|
||||
int x, size_t *char_offset, int *actual_x);
|
||||
typedef int (*_fpmf_pixel_pos)( FONT_PLOTTER self, const plot_font_style_t *fstyle,
|
||||
const char *string, size_t length,
|
||||
int x, size_t *char_offset, int *actual_x);
|
||||
typedef int (*_fpmf_text)( FONT_PLOTTER self, int x, int y, const char *text,
|
||||
size_t length, const plot_font_style_t *fstyle);
|
||||
|
||||
/* declaration of font plotter member functions: (_fpmf_ prefix) */
|
||||
typedef int (*_fpmf_str_width)( FONT_PLOTTER self, const plot_font_style_t *fstyle,
|
||||
const char * str, size_t length, int * width);
|
||||
typedef int (*_fpmf_str_split)( FONT_PLOTTER self, const plot_font_style_t *fstyle,
|
||||
const char *string, size_t length,
|
||||
int x, size_t *char_offset, int *actual_x);
|
||||
typedef int (*_fpmf_pixel_pos)( FONT_PLOTTER self, const plot_font_style_t *fstyle,
|
||||
const char *string, size_t length,
|
||||
int x, size_t *char_offset, int *actual_x);
|
||||
typedef int (*_fpmf_text)( FONT_PLOTTER self, int x, int y, const char *text,
|
||||
size_t length, const plot_font_style_t *fstyle);
|
||||
|
||||
typedef void (*_fpmf_draw_glyph)(FONT_PLOTTER self, GRECT * clip, GRECT * loc,
|
||||
uint8_t * pixdata, int pitch, uint32_t colour);
|
||||
typedef int (*_fpmf_dtor)( FONT_PLOTTER self );
|
||||
typedef int (*_fpmf_dtor)( FONT_PLOTTER self );
|
||||
|
||||
|
||||
/* prototype of the font plotter "object" */
|
||||
struct s_font_plotter
|
||||
{
|
||||
char * name;
|
||||
int flags;
|
||||
int vdi_handle;
|
||||
void * priv_data;
|
||||
|
||||
_fpmf_str_width str_width;
|
||||
_fpmf_str_split str_split;
|
||||
_fpmf_pixel_pos pixel_pos;
|
||||
|
||||
/* prototype of the font plotter "object" */
|
||||
struct s_font_plotter
|
||||
{
|
||||
char * name;
|
||||
int flags;
|
||||
int vdi_handle;
|
||||
void * priv_data;
|
||||
|
||||
_fpmf_str_width str_width;
|
||||
_fpmf_str_split str_split;
|
||||
_fpmf_pixel_pos pixel_pos;
|
||||
_fpmf_text text;
|
||||
_fpmf_draw_glyph draw_glyph;
|
||||
_fpmf_dtor dtor;
|
||||
_fpmf_draw_glyph draw_glyph;
|
||||
_fpmf_dtor dtor;
|
||||
};
|
||||
|
||||
|
||||
FONT_PLOTTER plot_get_text_plotter(void);
|
||||
/* Set the font plotting engine.
|
||||
*/
|
||||
void plot_set_text_plotter(FONT_PLOTTER font_plotter);
|
||||
void dump_font_drivers(void);
|
||||
FONT_PLOTTER new_font_plotter( int vdihandle, char * name, unsigned long flags,
|
||||
int * error);
|
||||
int delete_font_plotter( FONT_PLOTTER p );
|
||||
#ifdef WITH_VDI_FONT_DRIVER
|
||||
#include "atari/plot/font_vdi.h"
|
||||
#endif
|
||||
#ifdef WITH_INTERNAL_FONT_DRIVER
|
||||
#include "atari/plot/font_internal.h"
|
||||
#endif
|
||||
#ifdef WITH_FREETYPE_FONT_DRIVER
|
||||
#include "atari/plot/font_freetype.h"
|
||||
|
||||
#ifdef WITH_VDI_FONT_DRIVER
|
||||
#include "atari/plot/font_vdi.h"
|
||||
#endif
|
||||
#ifdef WITH_INTERNAL_FONT_DRIVER
|
||||
#include "atari/plot/font_internal.h"
|
||||
#endif
|
||||
#ifdef WITH_FREETYPE_FONT_DRIVER
|
||||
#include "atari/plot/font_freetype.h"
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -1974,6 +1974,16 @@ void plot_get_clip_grect(GRECT * out)
|
|||
out->g_h = clip.y1 - clip.y0;
|
||||
}
|
||||
|
||||
FONT_PLOTTER plot_get_text_plotter()
|
||||
{
|
||||
return(fplotter);
|
||||
}
|
||||
|
||||
void plot_set_text_plotter(FONT_PLOTTER font_plotter)
|
||||
{
|
||||
fplotter = font_plotter;
|
||||
}
|
||||
|
||||
static bool plot_text(int x, int y, const char *text, size_t length, const plot_font_style_t *fstyle )
|
||||
{
|
||||
fplotter->text(fplotter, x, y, text, length, fstyle);
|
||||
|
|
Loading…
Reference in New Issue