summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2013-08-15 20:10:55 +0100
committerChris Young <chris@unsatisfactorysoftware.co.uk>2013-08-15 20:10:55 +0100
commit33b8644ec2c13d697b323c0e8cbcbc1962e2fb64 (patch)
tree49203435533001d85293e0f47fa05375477677d4
parentb11b18f258339238b1c0f39edd08721c315e76ff (diff)
downloadnetsurf-33b8644ec2c13d697b323c0e8cbcbc1962e2fb64.tar.gz
netsurf-33b8644ec2c13d697b323c0e8cbcbc1962e2fb64.tar.bz2
Another attempt at creating image menus
-rwxr-xr-xamiga/gui.h1
-rw-r--r--amiga/menu.c35
2 files changed, 34 insertions, 2 deletions
diff --git a/amiga/gui.h b/amiga/gui.h
index 36b7d4d84..3e0f2ab0e 100755
--- a/amiga/gui.h
+++ b/amiga/gui.h
@@ -158,6 +158,7 @@ BOOL ami_gadget_hit(Object *obj, int x, int y);
void ami_gui_history(struct gui_window_2 *gwin, bool back);
void ami_gui_hotlist_toolbar_update_all(void);
void ami_gui_tabs_toggle_all(void);
+bool ami_locate_resource(char *fullpath, const char *file);
struct TextFont *origrpfont;
struct MinList *window_list;
diff --git a/amiga/menu.c b/amiga/menu.c
index bfd010d58..fa1c38892 100644
--- a/amiga/menu.c
+++ b/amiga/menu.c
@@ -143,7 +143,7 @@ void ami_free_menulabs(struct gui_window_2 *gwin)
}
static void ami_menu_alloc_item(struct gui_window_2 *gwin, int num, UBYTE type,
- const char *label, char key, struct bitmap *bm, void *func, void *hookdata)
+ const char *label, char key, char *icon, void *func, void *hookdata)
{
gwin->menutype[num] = type;
@@ -159,6 +159,31 @@ static void ami_menu_alloc_item(struct gui_window_2 *gwin, int num, UBYTE type,
}
}
+ if((GadToolsBase->lib_Version > 53) ||
+ ((GadToolsBase->lib_Version == 53) && (GadToolsBase->lib_Revision >= 6))) {
+ /* GadTools 53.6+ only. For now we will only create the menu
+ using label.image if there's a bitmap associated with the item. */
+ if((icon != NULL) && (gwin->menulab[num] != NM_BARLABEL)) {
+ char menu_icon[100];
+ struct DrawInfo *dri = GetScreenDrawInfo(scrn);
+ if(ami_locate_resource(&menu_icon, icon) == true) {
+ gwin->menuobj[num] = LabelObject,
+ LABEL_DrawInfo, dri,
+ LABEL_DisposeImage, TRUE,
+ LABEL_Image, BitMapObject,
+ BITMAP_Screen, scrn,
+ BITMAP_SourceFile, menu_icon,
+ BITMAP_Masking, TRUE,
+ BitMapEnd,
+ LABEL_Text, gwin->menulab[num],
+ LabelEnd;
+
+ if(gwin->menuobj[num]) gwin->menutype[num] |= MENU_IMAGE;
+ }
+ FreeScreenDrawInfo(scrn, dri);
+ }
+ }
+
if(key) gwin->menukey[num] = key;
if(func) gwin->menu_hook[num].h_Entry = (HOOKFUNC)func;
if(hookdata) gwin->menu_hook[num].h_Data = hookdata;
@@ -432,6 +457,7 @@ void ami_menu_scan_2(struct tree *tree, struct node *root, WORD *gen,
struct node_element *element=NULL;
struct node *node;
UBYTE menu_type;
+ char *icon;
*gen = *gen + 1;
@@ -444,8 +470,13 @@ void ami_menu_scan_2(struct tree *tree, struct node *root, WORD *gen,
if(*gen == 1) menu_type = NM_ITEM;
if(*gen == 2) menu_type = NM_SUB;
+ if(tree_node_is_folder(node) == true)
+ icon = "icons/directory.png";
+ else
+ icon = "icons/content.png";
+
ami_menu_alloc_item(gwin, *item, menu_type, tree_url_node_get_title(node),
- 0, tree_url_node_get_icon(node),
+ 0, icon,
ami_menu_item_hotlist_entries, (void *)tree_url_node_get_url(node));
if(tree_node_is_folder(node) && (!tree_node_get_child(node)))
gwin->menu[*item].nm_Flags = NM_ITEMDISABLED;