summaryrefslogtreecommitdiff
path: root/amiga
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2013-08-16 00:07:20 +0100
committerChris Young <chris@unsatisfactorysoftware.co.uk>2013-08-16 00:07:20 +0100
commitacdf478d3f0a7957c1b6a7c30df71e402a9b5fbb (patch)
tree803ecc2d9eb7850a274945590b51644d6e2fffdc /amiga
parent33b8644ec2c13d697b323c0e8cbcbc1962e2fb64 (diff)
downloadnetsurf-acdf478d3f0a7957c1b6a7c30df71e402a9b5fbb.tar.gz
netsurf-acdf478d3f0a7957c1b6a7c30df71e402a9b5fbb.tar.bz2
Sub-menu arrows
Diffstat (limited to 'amiga')
-rw-r--r--amiga/menu.c33
1 files changed, 27 insertions, 6 deletions
diff --git a/amiga/menu.c b/amiga/menu.c
index fa1c38892..b04540d34 100644
--- a/amiga/menu.c
+++ b/amiga/menu.c
@@ -68,6 +68,8 @@ BOOL menualreadyinit;
const char * const netsurf_version;
const char * const verdate;
+#define SUB_MENU_ARROW '\n'
+
ULONG ami_menu_scan(struct tree *tree, struct gui_window_2 *gwin);
void ami_menu_scan_2(struct tree *tree, struct node *root, WORD *gen,
int *item, struct gui_window_2 *gwin);
@@ -145,8 +147,14 @@ 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, char *icon, void *func, void *hookdata)
{
+ bool has_submenu = false;
gwin->menutype[num] = type;
+ if(key == SUB_MENU_ARROW) {
+ has_submenu = true;
+ key = '\0';
+ }
+
if((label == NM_BARLABEL) || (strcmp(label, "--") == 0)) {
gwin->menulab[num] = NM_BARLABEL;
} else {
@@ -165,8 +173,16 @@ static void ami_menu_alloc_item(struct gui_window_2 *gwin, int num, UBYTE type,
using label.image if there's a bitmap associated with the item. */
if((icon != NULL) && (gwin->menulab[num] != NM_BARLABEL)) {
char menu_icon[100];
+ Object *submenuarrow = NULL;
struct DrawInfo *dri = GetScreenDrawInfo(scrn);
- if(ami_locate_resource(&menu_icon, icon) == true) {
+ if(ami_locate_resource(menu_icon, icon) == true) {
+ if(has_submenu == true) {
+ submenuarrow = NewObject(NULL, "sysiclass",
+ SYSIA_Which, MENUSUB,
+ SYSIA_DrawInfo, dri,
+ TAG_DONE);
+ }
+
gwin->menuobj[num] = LabelObject,
LABEL_DrawInfo, dri,
LABEL_DisposeImage, TRUE,
@@ -176,6 +192,8 @@ static void ami_menu_alloc_item(struct gui_window_2 *gwin, int num, UBYTE type,
BITMAP_Masking, TRUE,
BitMapEnd,
LABEL_Text, gwin->menulab[num],
+ LABEL_DisposeImage, TRUE,
+ LABEL_Image, submenuarrow,
LabelEnd;
if(gwin->menuobj[num]) gwin->menutype[num] |= MENU_IMAGE;
@@ -458,6 +476,7 @@ void ami_menu_scan_2(struct tree *tree, struct node *root, WORD *gen,
struct node *node;
UBYTE menu_type;
char *icon;
+ char key;
*gen = *gen + 1;
@@ -470,14 +489,16 @@ 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)
+ if(tree_node_is_folder(node) == true) {
icon = "icons/directory.png";
- else
+ key = SUB_MENU_ARROW;
+ } else {
icon = "icons/content.png";
-
+ key = '\0';
+ }
+
ami_menu_alloc_item(gwin, *item, menu_type, tree_url_node_get_title(node),
- 0, icon,
- ami_menu_item_hotlist_entries, (void *)tree_url_node_get_url(node));
+ key, 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;