summaryrefslogtreecommitdiff
path: root/frontends/atari/plot/fontplot.c
diff options
context:
space:
mode:
Diffstat (limited to 'frontends/atari/plot/fontplot.c')
-rw-r--r--frontends/atari/plot/fontplot.c132
1 files changed, 132 insertions, 0 deletions
diff --git a/frontends/atari/plot/fontplot.c b/frontends/atari/plot/fontplot.c
new file mode 100644
index 000000000..9f0edd9a4
--- /dev/null
+++ b/frontends/atari/plot/fontplot.c
@@ -0,0 +1,132 @@
+/*
+ * 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 <stdbool.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <mt_gem.h>
+
+#include "desktop/mouse.h"
+#include "desktop/plot_style.h"
+
+#include "atari/bitmap.h"
+#include "atari/plot/fontplot.h"
+
+const struct s_font_driver_table_entry font_driver_table[] =
+{
+#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
+ {"internal", ctor_font_plotter_internal, 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.
+ *
+ * Available: "vdi", "freetype", "internal"
+ *
+ * \param vdihandle the vdi handle to act upon,
+ * \param name selector ID (string) of the font plotter.
+ * \param flags configration flags of the plotter, available flags:
+ * FONTPLOT_FLAG_MONOGLYPH - Enable 1 bit font plotting
+ * \param error set to != 0 when errors occur
+ * \return the new font plotter instance on success, or NULL on failure.
+ */
+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 = NULL;
+
+ /* set the default error code: */
+ *error = 0-ERR_PLOTTER_NOT_AVAILABLE;
+
+
+ /* Find the selector string in the font plotter table, */
+ /* and bail out when the font plotter is not available: */
+ for (i = 0; font_driver_table[i].name != NULL; i++) {
+
+ /* found selector in driver table? */
+ if (strcmp(name, font_driver_table[i].name) == 0) {
+
+ /* 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 |= flags;
+
+ /* Execute the constructor: */
+ assert(font_driver_table[i].ctor);
+ res = font_driver_table[i].ctor(fplotter);
+
+ /* success? */
+ if (res < 0) {
+ /* NO success! */
+ free(fplotter);
+ *error = res;
+ return(NULL);
+ }
+ *error = 0;
+ break;
+ }
+ }
+
+ 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);
+}
+