1
0
mirror of https://github.com/weiju/amiga-stuff synced 2026-03-19 10:16:45 +00:00

requesters update

filereq.c: gadgets are now sized/placed better around the file list
view which is now more flexible to configure
This commit is contained in:
Wei-ju Wu
2016-01-18 09:58:26 -08:00
parent 295dc70fd9
commit 29c02cefe0

View File

@ -18,42 +18,36 @@
#define FILE_LIST_HMARGIN 5
#define FILE_LIST_VMARGIN 3
#define FILE_LIST_LINE_DIST 1
#define LIST_VSLIDER_WIDTH 11
#define LIST_BUTTON_WIDTH 11
#define LIST_BUTTON_HEIGHT 11
#define FILE_LIST_BM_X 1
#define FILE_LIST_BM_Y 1
#define NUM_FILE_ENTRIES 10
// some of these variables don't need to be static
static int filelist_width;
static int filelist_height;
static int filelist_bm_width;
static int filelist_bm_height;
#define FILE_LIST_HEIGHT 86
#define FILE_LIST_BM_X 1
#define FILE_LIST_BM_Y 1
#define FILE_LIST_BM_HEIGHT (FILE_LIST_HEIGHT - 2)
#define LIST_VSLIDER_Y 0
#define LIST_VSLIDER_WIDTH 11
// not sure about the + 1 ??
#define LIST_VSLIDER_HEIGHT (FILE_LIST_HEIGHT - 2 * 11 + 1)
#define LIST_UP_Y 65
#define LIST_DOWN_Y (LIST_UP_Y + LIST_BUTTON_HEIGHT)
#define LIST_BUTTON_WIDTH 11
#define LIST_BUTTON_HEIGHT 11
#define LABEL_DRAWER 0
#define LABEL_FILE 1
#define LABEL_PARENT 2
#define LABEL_DRIVES 3
#define LABEL_OPEN 4
#define LABEL_CANCEL 5
enum { LABEL_DRAWER = 0, LABEL_FILE, LABEL_PARENT, LABEL_DRIVES, LABEL_OPEN, LABEL_CANCEL } Labels;
#define REQWIN_HEIGHT 180
#define REQ_HEIGHT 175
#define TOPAZ_BASELINE 8
#define BUTTON_Y 135
#define DRAWER_GADGET_X 60
#define DRAWER_GADGET_Y 106
#define FILE_GADGET_X DRAWER_GADGET_X
#define FILE_GADGET_Y (DRAWER_GADGET_Y + 17)
#define PATH_GADGET_WIDTH 160
#define PATH_GADGET_HEIGHT 10
#define STR_LABEL_XOFFSET -60
#define STR_LABEL_YOFFSET 2
#define BUTTON_Y (FILE_GADGET_Y + 18)
#define BUTTON_HEIGHT 18
#define BUTTON_TEXT_XOFFSET 5
@ -68,26 +62,11 @@ static int filelist_bm_height;
#define CANCEL_BUTTON_X 174
#define CANCEL_BUTTON_WIDTH 58
#define DRAWER_GADGET_X 60
#define DRAWER_GADGET_Y 98
#define FILE_GADGET_X DRAWER_GADGET_X
#define FILE_GADGET_Y 115
#define PATH_GADGET_WIDTH 160
#define PATH_GADGET_HEIGHT 10
#define STR_LABEL_XOFFSET -60
#define STR_LABEL_YOFFSET 2
#define REQ_OK_BUTTON_ID 101
#define REQ_DRIVES_BUTTON_ID 102
#define REQ_PARENT_BUTTON_ID 103
#define REQ_CANCEL_BUTTON_ID 104
#define REQ_DIR_TEXT_ID 110
#define REQ_FILE_TEXT_ID 111
#define REQ_VSLIDER_ID 112
#define REQ_UP_ID 113
#define REQ_DOWN_ID 114
enum {
REQ_OK_BUTTON_ID = 101, REQ_DRIVES_BUTTON_ID, REQ_PARENT_BUTTON_ID,
REQ_CANCEL_BUTTON_ID, REQ_DIR_TEXT_ID, REQ_FILE_TEXT_ID, REQ_VSLIDER_ID,
REQ_UP_ID, REQ_DOWN_ID
} GadgetIDs;
static struct Requester requester;
static BOOL req_opened = FALSE;
@ -119,7 +98,7 @@ static WORD drives_border_points[] = {0, 0, DRIVES_BUTTON_WIDTH, 0, DRIVES_BUTTO
static WORD cancel_border_points[] = {0, 0, CANCEL_BUTTON_WIDTH, 0, CANCEL_BUTTON_WIDTH,
BUTTON_HEIGHT, 0, BUTTON_HEIGHT, 0, 0};
static WORD list_border_points[] = {0, 0, 0, 0, 0, FILE_LIST_HEIGHT, 0, FILE_LIST_HEIGHT, 0, 0};
static WORD list_border_points[10];
/* the -2 is the margin to set to avoid that the string gadget will overdraw the
borders */
@ -155,7 +134,7 @@ static struct NewWindow newwin = {
WBENCHSCREEN
};
static struct Gadget list_down = {NULL, 0, LIST_DOWN_Y,
static struct Gadget list_down = {NULL, 0, 0,
LIST_BUTTON_WIDTH, LIST_BUTTON_HEIGHT,
GFLG_GADGHCOMP | GFLG_GADGIMAGE, GACT_RELVERIFY,
GTYP_BOOLGADGET | GTYP_REQGADGET,
@ -163,7 +142,7 @@ static struct Gadget list_down = {NULL, 0, LIST_DOWN_Y,
NULL, 0, NULL,
REQ_DOWN_ID, NULL};
static struct Gadget list_up = {&list_down, 0, LIST_UP_Y,
static struct Gadget list_up = {&list_down, 0, 0,
LIST_BUTTON_WIDTH, LIST_BUTTON_HEIGHT,
GFLG_GADGHCOMP | GFLG_GADGIMAGE, GACT_RELVERIFY,
GTYP_BOOLGADGET | GTYP_REQGADGET,
@ -171,8 +150,7 @@ static struct Gadget list_up = {&list_down, 0, LIST_UP_Y,
NULL, 0, NULL,
REQ_UP_ID, NULL};
static struct Gadget list_vslider = {&list_up, 0, LIST_VSLIDER_Y,
LIST_VSLIDER_WIDTH, LIST_VSLIDER_HEIGHT,
static struct Gadget list_vslider = {&list_up, 0, 0, LIST_VSLIDER_WIDTH, 0,
GFLG_GADGHCOMP, GACT_RELVERIFY, GTYP_PROPGADGET,
&slider_image, NULL, NULL, 0, &propinfo,
REQ_VSLIDER_ID, NULL};
@ -253,7 +231,7 @@ int file_index(int mx, int my) {
int x1 = REQ_HMARGIN;
int y1 = REQ_VMARGIN;
int x2 = x1 + filelist_width;
int y2 = y1 + FILE_LIST_HEIGHT;
int y2 = y1 + filelist_height;
if (mx >= x1 && mx <= x2 && my >= y1 && my <= y2) {
int rely = my - y1;
printf("rely: %d\n", rely);
@ -308,7 +286,7 @@ static void cleanup()
for (int i = 0; i < filelist_bm_depth; i++) {
if (filelist_bitmap.Planes[i]) FreeRaster(filelist_bitmap.Planes[i],
filelist_width,
FILE_LIST_HEIGHT);
filelist_height);
}
}
@ -334,7 +312,7 @@ void draw_list()
Text(src_rp, cur->name, strlen(cur->name));
cur = cur->next;
ypos += font_height;
if (ypos > FILE_LIST_BM_HEIGHT) break;
if (ypos > filelist_bm_height) break;
}
SetDrMd(src_rp, COMPLEMENT);
// Draw selection rectangle
@ -343,7 +321,7 @@ void draw_list()
// Done drawing, offscreen bitmap is rendered, copy to the requester's layer
ClipBlit(src_rp, 0, 0, dst_rp,
FILE_LIST_BM_X, FILE_LIST_BM_Y, filelist_bm_width, FILE_LIST_BM_HEIGHT,
FILE_LIST_BM_X, FILE_LIST_BM_Y, filelist_bm_width, filelist_bm_height,
0xc0);
}
@ -357,15 +335,25 @@ void init_sizes(struct Window *window, struct Requester *requester)
int scrh = window->WScreen->Height;
// Determine the requester's dimensions
filelist_width = TextLength(window->RPort, "WWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", 30) + 10;
filelist_bm_width = filelist_width - 2;
filelist_bm_width = TextLength(window->RPort, "WWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", 30) + 10;
filelist_width = filelist_bm_width + 2;
struct TextFont *font = window->IFont;
int font_height = font->tf_YSize;
int font_baseline = font->tf_Baseline;
filelist_height = font_height * NUM_FILE_ENTRIES + 2 * FILE_LIST_VMARGIN +
(NUM_FILE_ENTRIES - 1) * FILE_LIST_LINE_DIST;
printf("Font ysize: %d, list height: %d\n", (int) font_height, filelist_height);
filelist_bm_height = filelist_height + 2;
// controls at the right of the list
int filelist_vslider_height = filelist_height - 2 * LIST_BUTTON_HEIGHT + 1;
int list_up_y = filelist_vslider_height;
int list_down_y = list_up_y + LIST_BUTTON_HEIGHT;
list_vslider.Height = filelist_vslider_height;
list_up.TopEdge = list_up_y;
list_down.TopEdge = list_down_y;
printf("Font ysize: %d, list height: %d\n", (int) font_height, filelist_height);
int buttonbar_width = TextLength(window->RPort, "OpenDrivesParentCancel", 22)
+ (BUTTON_HMARGIN * 2 * 4);
@ -384,6 +372,9 @@ void init_sizes(struct Window *window, struct Requester *requester)
// adjust border
list_border_points[2] = filelist_width;
list_border_points[4] = filelist_width;
list_border_points[5] = filelist_height;
list_border_points[7] = filelist_height;
// adjust gadgets
list_down.LeftEdge = filelist_width;
list_up.LeftEdge = filelist_width;
@ -415,15 +406,15 @@ void open_file(struct Window *window)
// TODO: we are scrolling by whole lines, this way we can avoid
// corrupting memory by drawing over the offline bitmap memory
// we copy the previous content a line up/down and insert the new line
InitBitMap(&filelist_bitmap, filelist_bm_depth, filelist_bm_width, FILE_LIST_BM_HEIGHT);
InitBitMap(&filelist_bitmap, filelist_bm_depth, filelist_bm_width, filelist_bm_height);
for (int i = 0; i < filelist_bm_depth; i++) filelist_bitmap.Planes[i] = NULL;
for (int i = 0; i < filelist_bm_depth; i++) {
if (!(filelist_bitmap.Planes[i] = AllocRaster(filelist_width, FILE_LIST_HEIGHT))) {
if (!(filelist_bitmap.Planes[i] = AllocRaster(filelist_width, filelist_height))) {
cleanup();
return;
} else {
BltClear(filelist_bitmap.Planes[i],
RASSIZE(filelist_width, FILE_LIST_HEIGHT), 1);
RASSIZE(filelist_width, filelist_height), 1);
}
}
InitRastPort(&filelist_rastport);