summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--amiga/Makefile.target2
-rw-r--r--amiga/filetype.c93
-rw-r--r--amiga/filetype.h1
-rw-r--r--amiga/font.c24
-rwxr-xr-xamiga/font.h13
-rw-r--r--amiga/font_bullet.c36
-rw-r--r--amiga/font_cache.c10
-rw-r--r--amiga/font_diskfont.c (renamed from amiga/font_bitmap.c)8
-rwxr-xr-xamiga/gui_options.c1
-rwxr-xr-xamiga/object.c10
-rwxr-xr-xamiga/object.h2
-rw-r--r--amiga/options.h2
-rw-r--r--amiga/plotters.c1
13 files changed, 94 insertions, 109 deletions
diff --git a/amiga/Makefile.target b/amiga/Makefile.target
index 626110bc5..8c850d1db 100644
--- a/amiga/Makefile.target
+++ b/amiga/Makefile.target
@@ -75,7 +75,7 @@ S_AMIGA := gui.c tree.c history.c hotlist.c schedule.c file.c \
sslcert.c gui_options.c print.c theme.c drag.c icon.c libs.c \
datatypes.c dt_picture.c dt_anim.c dt_sound.c plugin_hack.c \
stringview/stringview.c stringview/urlhistory.c rtg.c \
- agclass/amigaguide_class.c os3support.c font_bitmap.c \
+ agclass/amigaguide_class.c os3support.c font_diskfont.c \
selectmenu.c hash/xxhash.c font_cache.c font_bullet.c
S_AMIGA := $(addprefix amiga/,$(S_AMIGA))
diff --git a/amiga/filetype.c b/amiga/filetype.c
index 4419d712f..39058b41c 100644
--- a/amiga/filetype.c
+++ b/amiga/filetype.c
@@ -164,6 +164,15 @@ const char *ami_content_type_to_file_type(content_type type)
}
}
+static void ami_mime_entry_free(void *nso)
+{
+ struct ami_mime_entry *mimeentry = (struct ami_mime_entry *)nso;
+
+ if(mimeentry->mimetype) lwc_string_unref(mimeentry->mimetype);
+ if(mimeentry->datatype) lwc_string_unref(mimeentry->datatype);
+ if(mimeentry->filetype) lwc_string_unref(mimeentry->filetype);
+ if(mimeentry->plugincmd) lwc_string_unref(mimeentry->plugincmd);
+}
nserror ami_mime_init(const char *mimefile)
{
@@ -205,40 +214,42 @@ nserror ami_mime_init(const char *mimefile)
if(ReadArgs(template, rarray, rargs))
{
- node = AddObject(ami_mime_list, AMINS_MIME);
- mimeentry = ami_misc_allocvec_clear(sizeof(struct ami_mime_entry), 0);
- node->objstruct = mimeentry;
-
- if(rarray[AMI_MIME_MIMETYPE])
- {
- lerror = lwc_intern_string((char *)rarray[AMI_MIME_MIMETYPE],
- strlen((char *)rarray[AMI_MIME_MIMETYPE]), &mimeentry->mimetype);
- if (lerror != lwc_error_ok)
- return NSERROR_NOMEM;
- }
-
- if(rarray[AMI_MIME_DATATYPE])
- {
- lerror = lwc_intern_string((char *)rarray[AMI_MIME_DATATYPE],
- strlen((char *)rarray[AMI_MIME_DATATYPE]), &mimeentry->datatype);
- if (lerror != lwc_error_ok)
- return NSERROR_NOMEM;
- }
-
- if(rarray[AMI_MIME_FILETYPE])
- {
- lerror = lwc_intern_string((char *)rarray[AMI_MIME_FILETYPE],
- strlen((char *)rarray[AMI_MIME_FILETYPE]), &mimeentry->filetype);
- if (lerror != lwc_error_ok)
- return NSERROR_NOMEM;
- }
-
- if(rarray[AMI_MIME_PLUGINCMD])
- {
- lerror = lwc_intern_string((char *)rarray[AMI_MIME_PLUGINCMD],
- strlen((char *)rarray[AMI_MIME_PLUGINCMD]), &mimeentry->plugincmd);
- if (lerror != lwc_error_ok)
- return NSERROR_NOMEM;
+ if ((node = AddObject(ami_mime_list, AMINS_MIME))) {
+ ObjectCallback(node, ami_mime_entry_free);
+ mimeentry = ami_misc_allocvec_clear(sizeof(struct ami_mime_entry), 0);
+ node->objstruct = mimeentry;
+
+ if(rarray[AMI_MIME_MIMETYPE])
+ {
+ lerror = lwc_intern_string((char *)rarray[AMI_MIME_MIMETYPE],
+ strlen((char *)rarray[AMI_MIME_MIMETYPE]), &mimeentry->mimetype);
+ if (lerror != lwc_error_ok)
+ return NSERROR_NOMEM;
+ }
+
+ if(rarray[AMI_MIME_DATATYPE])
+ {
+ lerror = lwc_intern_string((char *)rarray[AMI_MIME_DATATYPE],
+ strlen((char *)rarray[AMI_MIME_DATATYPE]), &mimeentry->datatype);
+ if (lerror != lwc_error_ok)
+ return NSERROR_NOMEM;
+ }
+
+ if(rarray[AMI_MIME_FILETYPE])
+ {
+ lerror = lwc_intern_string((char *)rarray[AMI_MIME_FILETYPE],
+ strlen((char *)rarray[AMI_MIME_FILETYPE]), &mimeentry->filetype);
+ if (lerror != lwc_error_ok)
+ return NSERROR_NOMEM;
+ }
+
+ if(rarray[AMI_MIME_PLUGINCMD])
+ {
+ lerror = lwc_intern_string((char *)rarray[AMI_MIME_PLUGINCMD],
+ strlen((char *)rarray[AMI_MIME_PLUGINCMD]), &mimeentry->plugincmd);
+ if (lerror != lwc_error_ok)
+ return NSERROR_NOMEM;
+ }
}
FreeArgs(rargs);
}
@@ -256,15 +267,6 @@ void ami_mime_free(void)
FreeObjList(ami_mime_list);
}
-void ami_mime_entry_free(struct ami_mime_entry *mimeentry)
-{
- if(mimeentry->mimetype) lwc_string_unref(mimeentry->mimetype);
- if(mimeentry->datatype) lwc_string_unref(mimeentry->datatype);
- if(mimeentry->filetype) lwc_string_unref(mimeentry->filetype);
- if(mimeentry->plugincmd) lwc_string_unref(mimeentry->plugincmd);
-}
-
-
/**
* Return next matching MIME entry
*
@@ -356,8 +358,13 @@ static APTR ami_mime_guess_add_datatype(struct DataType *dt, lwc_string **lwc_mi
char *p;
node = AddObject(ami_mime_list, AMINS_MIME);
+ if(node == NULL) return NULL;
+
mimeentry = ami_misc_allocvec_clear(sizeof(struct ami_mime_entry), 0);
+ if(mimeentry == NULL) return NULL;
+
node->objstruct = mimeentry;
+ ObjectCallback(node, ami_mime_entry_free);
lerror = lwc_intern_string(dth->dth_Name, strlen(dth->dth_Name), &mimeentry->datatype);
if (lerror != lwc_error_ok)
diff --git a/amiga/filetype.h b/amiga/filetype.h
index e99f5950c..fc27b1df2 100644
--- a/amiga/filetype.h
+++ b/amiga/filetype.h
@@ -31,7 +31,6 @@ const char *fetch_filetype(const char *unix_path);
nserror ami_mime_init(const char *mimefile);
void ami_mime_free(void);
-void ami_mime_entry_free(struct ami_mime_entry *mimeentry);
void ami_mime_dump(void);
struct Node *ami_mime_from_datatype(struct DataType *dt,
diff --git a/amiga/font.c b/amiga/font.c
index 57017582f..ac5fd129f 100644
--- a/amiga/font.c
+++ b/amiga/font.c
@@ -18,31 +18,19 @@
#include "amiga/os3support.h"
-#include <assert.h>
-
-#ifndef __amigaos4__
-#include <proto/bullet.h>
-#endif
#include <proto/diskfont.h>
#include <proto/exec.h>
-
-#include <graphics/rpattr.h>
-
-#ifdef __amigaos4__
-#include <graphics/blitattr.h>
-#endif
+#include <proto/graphics.h>
#include "utils/log.h"
-#include "utils/utils.h"
#include "utils/nsoption.h"
#include "desktop/browser.h"
#include "desktop/font.h"
-#include "desktop/gui_window.h"
#include "amiga/font.h"
+#include "amiga/font_bullet.h"
+#include "amiga/font_diskfont.h"
#include "amiga/font_scan.h"
-#include "amiga/gui.h"
-#include "amiga/utf8.h"
void ami_font_setdevicedpi(int id)
{
@@ -51,7 +39,7 @@ void ami_font_setdevicedpi(int id)
ULONG ydpi = nsoption_int(screen_ydpi);
ULONG xdpi = nsoption_int(screen_ydpi);
- if(nsoption_bool(use_diskfont) == true) {
+ if(nsoption_bool(bitmap_fonts) == true) {
LOG("WARNING: Using diskfont.library for text. Forcing DPI to 72.");
nsoption_int(screen_ydpi) = 72;
}
@@ -103,7 +91,7 @@ void ami_font_close_disk_font(struct TextFont *tfont)
/* Font initialisation */
void ami_font_init(void)
{
- if(nsoption_bool(use_diskfont) == false) {
+ if(nsoption_bool(bitmap_fonts) == false) {
ami_font_bullet_init();
} else {
ami_font_diskfont_init();
@@ -112,7 +100,7 @@ void ami_font_init(void)
void ami_font_fini(void)
{
- if(nsoption_bool(use_diskfont) == false) {
+ if(nsoption_bool(bitmap_fonts) == false) {
ami_font_bullet_fini();
}
}
diff --git a/amiga/font.h b/amiga/font.h
index 404a36e79..416609a8d 100755
--- a/amiga/font.h
+++ b/amiga/font.h
@@ -29,19 +29,6 @@ void ami_font_setdevicedpi(int id);
void ami_font_init(void);
void ami_font_fini(void);
-/* In font_bitmap.c */
-void ami_font_diskfont_init(void);
-
-/* In font_bullet.c */
-void ami_font_bullet_init(void);
-void ami_font_bullet_fini(void);
-void ami_font_close(struct ami_font_cache_node *node);
-
-/* Alternate entry points into font_scan */
-void ami_font_initscanner(bool force, bool save);
-void ami_font_finiscanner(void);
-void ami_font_savescanner(void);
-
/* Simple diskfont functions for graphics.library use (not page rendering) */
struct TextFont *ami_font_open_disk_font(struct TextAttr *tattr);
void ami_font_close_disk_font(struct TextFont *tfont);
diff --git a/amiga/font_bullet.c b/amiga/font_bullet.c
index 72a2d90b2..2800533a0 100644
--- a/amiga/font_bullet.c
+++ b/amiga/font_bullet.c
@@ -32,6 +32,7 @@
#include <diskfont/oterrors.h>
#include "amiga/font.h"
+#include "amiga/font_bullet.h"
#include "amiga/font_cache.h"
#include "amiga/font_scan.h"
@@ -842,24 +843,9 @@ static inline ULONG ami_font_unicode_width(const char *string, ULONG length,
return x;
}
-void ami_font_initscanner(bool force, bool save)
-{
- ami_font_scan_init(nsoption_charp(font_unicode_file), force, save, glypharray);
-}
-
-void ami_font_finiscanner(void)
-{
- ami_font_scan_fini(glypharray);
-}
-
-void ami_font_savescanner(void)
-{
- ami_font_scan_save(nsoption_charp(font_unicode_file), glypharray);
-}
-
-void ami_font_close(struct ami_font_cache_node *node)
+void ami_font_bullet_close(void *nso)
{
- /* Called from FreeObjList if node type is AMINS_FONT */
+ struct ami_font_cache_node *node = (struct ami_font_cache_node *)nso;
CloseOutlineFont(node->font, &ami_diskfontlib_list);
}
@@ -891,3 +877,19 @@ void ami_font_bullet_fini(void)
ami_font_finiscanner();
}
+/* Font scanner */
+void ami_font_initscanner(bool force, bool save)
+{
+ ami_font_scan_init(nsoption_charp(font_unicode_file), force, save, glypharray);
+}
+
+void ami_font_finiscanner(void)
+{
+ ami_font_scan_fini(glypharray);
+}
+
+void ami_font_savescanner(void)
+{
+ ami_font_scan_save(nsoption_charp(font_unicode_file), glypharray);
+}
+
diff --git a/amiga/font_cache.c b/amiga/font_cache.c
index c94afb124..b036f6334 100644
--- a/amiga/font_cache.c
+++ b/amiga/font_cache.c
@@ -25,6 +25,7 @@
#include "utils/log.h"
#include "amiga/font.h"
+#include "amiga/font_bullet.h"
#include "amiga/font_cache.h"
#include "amiga/schedule.h"
@@ -69,7 +70,7 @@ static void ami_font_cache_cleanup(struct SkipList *skiplist)
if(curtime.Seconds > 300)
{
LOG("Freeing font %lx not used for %ld seconds", node->skip_node.sn_Key, curtime.Seconds);
- ami_font_close(node);
+ ami_font_bullet_close(node);
RemoveSkipNode(skiplist, node->skip_node.sn_Key);
}
} while((node = nnode));
@@ -113,12 +114,12 @@ static void ami_font_cache_del_skiplist(struct SkipList *skiplist)
struct SkipNode *node;
struct SkipNode *nnode;
- node = (struct ami_font_cache_node *)GetFirstSkipNode(skiplist);
+ node = GetFirstSkipNode(skiplist);
if(node == NULL) return;
do {
- nnode = GetNextSkipNode(skiplist, (struct SkipNode *)node);
- ami_font_close(node);
+ nnode = GetNextSkipNode(skiplist, node);
+ ami_font_bullet_close((struct ami_font_cache_node *)node);
} while((node = nnode));
@@ -170,6 +171,7 @@ void ami_font_cache_insert(struct ami_font_cache_node *nodedata, const char *fon
#ifndef __amigaos4__
struct nsObject *node = AddObject(ami_font_cache_list, AMINS_FONT);
if(node) {
+ ObjectCallback(ami_font_bullet_close);
node->objstruct = nodedata;
node->dtz_Node.ln_Name = strdup(font);
}
diff --git a/amiga/font_bitmap.c b/amiga/font_diskfont.c
index e1a135744..f48f0f465 100644
--- a/amiga/font_bitmap.c
+++ b/amiga/font_diskfont.c
@@ -18,26 +18,20 @@
#include "amiga/os3support.h"
-#include <assert.h>
-
#include <proto/diskfont.h>
#include <proto/exec.h>
#include <proto/graphics.h>
-#include <proto/timer.h>
#include <proto/utility.h>
#include <graphics/rpattr.h>
#include "utils/log.h"
#include "utils/utf8.h"
-#include "utils/utils.h"
#include "utils/nsoption.h"
-#include "desktop/browser.h"
#include "desktop/font.h"
-#include "desktop/gui_window.h"
#include "amiga/font.h"
-#include "amiga/font_cache.h"
+#include "amiga/font_diskfont.h"
#include "amiga/gui.h"
#include "amiga/utf8.h"
diff --git a/amiga/gui_options.c b/amiga/gui_options.c
index cfa78e8ca..7e800d298 100755
--- a/amiga/gui_options.c
+++ b/amiga/gui_options.c
@@ -65,6 +65,7 @@
#include "amiga/file.h"
#include "amiga/font.h"
+#include "amiga/font_bullet.h"
#include "amiga/gui.h"
#include "amiga/gui_options.h"
#include "amiga/help.h"
diff --git a/amiga/object.c b/amiga/object.c
index 64c8e72db..7d935943e 100755
--- a/amiga/object.c
+++ b/amiga/object.c
@@ -24,8 +24,6 @@
#include <exec/lists.h>
#include <exec/nodes.h>
-#include "amiga/filetype.h"
-#include "amiga/font.h"
#include "amiga/misc.h"
#include "amiga/object.h"
@@ -72,11 +70,15 @@ struct nsObject *AddObject(struct MinList *objlist, ULONG otype)
return(dtzo);
}
+void ObjectCallback(struct nsObject *dtzo, void (*callback)(void *nso))
+{
+ dtzo->callback = callback;
+}
+
static void DelObjectInternal(struct nsObject *dtzo, BOOL free_obj)
{
Remove((struct Node *)dtzo);
- if(dtzo->Type == AMINS_FONT) ami_font_close(dtzo->objstruct);
- if(dtzo->Type == AMINS_MIME) ami_mime_entry_free(dtzo->objstruct);
+ if(dtzo->callback != NULL) dtzo->callback(dtzo->objstruct);
if(dtzo->objstruct && free_obj) FreeVec(dtzo->objstruct);
if(dtzo->dtz_Node.ln_Name) free(dtzo->dtz_Node.ln_Name);
FreeVec(dtzo);
diff --git a/amiga/object.h b/amiga/object.h
index 27f60fc9a..85cbb6d52 100755
--- a/amiga/object.h
+++ b/amiga/object.h
@@ -44,11 +44,13 @@ struct nsObject
ULONG Type;
void *objstruct;
ULONG objstruct_size;
+ void (*callback)(void *nso);
};
struct MinList *NewObjList(void);
struct nsObject *AddObject(struct MinList *objlist, ULONG otype);
+void ObjectCallback(struct nsObject *dtzo, void (*callback)(void *nso));
void DelObject(struct nsObject *dtzo);
void DelObjectNoFree(struct nsObject *dtzo);
void FreeObjList(struct MinList *objlist);
diff --git a/amiga/options.h b/amiga/options.h
index 728f6d4d1..6214c702d 100644
--- a/amiga/options.h
+++ b/amiga/options.h
@@ -63,7 +63,7 @@ NSOPTION_STRING(font_surrogate, NULL)
NSOPTION_STRING(font_unicode_file, NULL)
NSOPTION_BOOL(font_unicode_only, false)
NSOPTION_BOOL(font_antialiasing, true)
-NSOPTION_BOOL(use_diskfont, false)
+NSOPTION_BOOL(bitmap_fonts, false)
NSOPTION_BOOL(drag_save_icons, true)
NSOPTION_INTEGER(hotlist_window_xpos, 0)
NSOPTION_INTEGER(hotlist_window_ypos, 0)
diff --git a/amiga/plotters.c b/amiga/plotters.c
index ea13285d7..b459dcc7e 100644
--- a/amiga/plotters.c
+++ b/amiga/plotters.c
@@ -45,6 +45,7 @@
#include "amiga/bitmap.h"
#include "amiga/font.h"
#include "amiga/gui.h"
+#include "amiga/misc.h"
#include "amiga/rtg.h"
#include "amiga/utf8.h"