mirror of
https://github.com/netsurf-browser/netsurf
synced 2025-01-03 17:54:33 +03:00
Factor Amiga theme-related code out to a new file. This includes all throbber and
mouse pointer code (which are "theme modifiable") as well as normal theme reading code. svn path=/trunk/netsurf/; revision=10145
This commit is contained in:
parent
5e898e5a92
commit
861b5b4953
@ -95,6 +95,7 @@ S_AMIGA := compat.c gui.c tree.c history.c hotlist.c schedule.c \
|
||||
cookies.c context_menu.c clipboard.c save_complete.c \
|
||||
fetch_file.c fetch_mailto.c search.c history_local.c \
|
||||
download.c iff_dr2d.c sslcert.c gui_options.c print.c \
|
||||
theme.c \
|
||||
stringview/stringview.c stringview/urlhistory.c
|
||||
S_AMIGA := $(addprefix amiga/,$(S_AMIGA))
|
||||
|
||||
|
@ -16,6 +16,8 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <proto/wb.h>
|
||||
#include <proto/asl.h>
|
||||
#include <proto/exec.h>
|
||||
@ -33,6 +35,7 @@
|
||||
#include "amiga/options.h"
|
||||
#include "amiga/bitmap.h"
|
||||
#include "amiga/iff_dr2d.h"
|
||||
#include "amiga/theme.h"
|
||||
|
||||
#include "content/fetch.h"
|
||||
|
||||
@ -42,8 +45,6 @@
|
||||
#include "utils/messages.h"
|
||||
#include "utils/utils.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <proto/window.h>
|
||||
#include <proto/layout.h>
|
||||
|
||||
|
447
amiga/gui.c
447
amiga/gui.c
@ -55,6 +55,7 @@
|
||||
#include "amiga/print.h"
|
||||
#include "amiga/schedule.h"
|
||||
#include "amiga/search.h"
|
||||
#include "amiga/theme.h"
|
||||
#include "amiga/tree.h"
|
||||
#include "amiga/utf8.h"
|
||||
|
||||
@ -69,7 +70,6 @@
|
||||
#include <proto/dos.h>
|
||||
#include <proto/exec.h>
|
||||
#include <proto/graphics.h>
|
||||
#include <proto/icon.h>
|
||||
#include <proto/intuition.h>
|
||||
#include <proto/keymap.h>
|
||||
#include <proto/locale.h>
|
||||
@ -81,12 +81,11 @@
|
||||
/* Other OS includes */
|
||||
#include <datatypes/pictureclass.h>
|
||||
#include <devices/inputevent.h>
|
||||
#include <graphics/blitattr.h>
|
||||
#include <libraries/application.h>
|
||||
#include <libraries/gadtools.h>
|
||||
#include <libraries/keymap.h>
|
||||
#include <intuition/icclass.h>
|
||||
#include <intuition/pointerclass.h>
|
||||
#include <graphics/blitattr.h>
|
||||
#include <graphics/rpattr.h>
|
||||
#include <workbench/icon.h>
|
||||
#include <workbench/workbench.h>
|
||||
@ -141,8 +140,6 @@ struct ApplicationIFace *IApplication=NULL;
|
||||
|
||||
Class *urlStringClass;
|
||||
|
||||
struct BitMap *throbber = NULL;
|
||||
ULONG throbber_width,throbber_height,throbber_frames,throbber_update_interval;
|
||||
BOOL rmbtrapped;
|
||||
BOOL locked_screen = FALSE;
|
||||
BOOL screen_closed = FALSE;
|
||||
@ -153,62 +150,12 @@ extern colour scroll_widget_fg_colour;
|
||||
extern colour scroll_widget_bg_colour;
|
||||
extern colour scroll_widget_arrow_colour;
|
||||
|
||||
static Object *mouseptrobj[AMI_LASTPOINTER+1];
|
||||
static struct BitMap *mouseptrbm[AMI_LASTPOINTER+1];
|
||||
static int mouseptrcurrent=0;
|
||||
static struct DrawInfo *dri;
|
||||
|
||||
char *ptrs[AMI_LASTPOINTER+1] = {
|
||||
"ptr_default",
|
||||
"ptr_point",
|
||||
"ptr_caret",
|
||||
"ptr_menu",
|
||||
"ptr_up",
|
||||
"ptr_down",
|
||||
"ptr_left",
|
||||
"ptr_right",
|
||||
"ptr_rightup",
|
||||
"ptr_leftdown",
|
||||
"ptr_leftup",
|
||||
"ptr_rightdown",
|
||||
"ptr_cross",
|
||||
"ptr_move",
|
||||
"ptr_wait",
|
||||
"ptr_help",
|
||||
"ptr_nodrop",
|
||||
"ptr_notallowed",
|
||||
"ptr_progress",
|
||||
"ptr_blank",
|
||||
"ptr_drag"};
|
||||
|
||||
char *ptrs32[AMI_LASTPOINTER+1] = {
|
||||
"ptr32_default",
|
||||
"ptr32_point",
|
||||
"ptr32_caret",
|
||||
"ptr32_menu",
|
||||
"ptr32_up",
|
||||
"ptr32_down",
|
||||
"ptr32_left",
|
||||
"ptr32_right",
|
||||
"ptr32_rightup",
|
||||
"ptr32_leftdown",
|
||||
"ptr32_leftup",
|
||||
"ptr32_rightdown",
|
||||
"ptr32_cross",
|
||||
"ptr32_move",
|
||||
"ptr32_wait",
|
||||
"ptr32_help",
|
||||
"ptr32_nodrop",
|
||||
"ptr32_notallowed",
|
||||
"ptr32_progress",
|
||||
"ptr32_blank",
|
||||
"ptr32_drag"};
|
||||
|
||||
void ami_update_throbber(struct gui_window_2 *g,bool redraw);
|
||||
void ami_update_buttons(struct gui_window_2 *);
|
||||
void ami_scroller_hook(struct Hook *,Object *,struct IntuiMessage *);
|
||||
uint32 ami_popup_hook(struct Hook *hook,Object *item,APTR reserved);
|
||||
void ami_init_mouse_pointers(void);
|
||||
void ami_switch_tab(struct gui_window_2 *gwin,bool redraw);
|
||||
void ami_change_tab(struct gui_window_2 *gwin, int direction);
|
||||
static void *myrealloc(void *ptr, size_t len, void *pw);
|
||||
@ -265,12 +212,11 @@ int main(int argc, char** argv)
|
||||
void gui_init(int argc, char** argv)
|
||||
{
|
||||
struct Locale *locale;
|
||||
char lang[100],throbberfile[100];
|
||||
char lang[100];
|
||||
STRPTR tempacceptlangs;
|
||||
bool found=FALSE;
|
||||
int i;
|
||||
BPTR lock=0,amiupdatefh;
|
||||
Object *dto;
|
||||
BPTR lock = 0, amiupdatefh = 0;
|
||||
|
||||
msgport = AllocSysObjectTags(ASOT_PORT,
|
||||
ASO_NoTrack,FALSE,
|
||||
@ -496,71 +442,9 @@ void gui_init(int argc, char** argv)
|
||||
ami_global_history_initialise();
|
||||
ami_cookies_initialise();
|
||||
save_complete_init();
|
||||
|
||||
strcpy(throbberfile,option_theme);
|
||||
AddPart(throbberfile,"Theme",100);
|
||||
|
||||
lock = Lock(throbberfile,ACCESS_READ);
|
||||
|
||||
if(!lock)
|
||||
{
|
||||
warn_user("ThemeApplyErr",option_theme);
|
||||
strcpy(throbberfile,"PROGDIR:Resources/Themes/Default/Theme");
|
||||
free(option_theme);
|
||||
option_theme = (char *)strdup("PROGDIR:Resources/Themes/Default");
|
||||
}
|
||||
else
|
||||
{
|
||||
UnLock(lock);
|
||||
}
|
||||
|
||||
messages_load(throbberfile);
|
||||
|
||||
ami_theme_init();
|
||||
ami_init_mouse_pointers();
|
||||
|
||||
ami_get_theme_filename(throbberfile,"theme_throbber");
|
||||
throbber_frames=atoi(messages_get("theme_throbber_frames"));
|
||||
throbber_update_interval = atoi(messages_get("theme_throbber_delay"));
|
||||
if(throbber_update_interval == 0) throbber_update_interval = 100;
|
||||
|
||||
if(dto = NewDTObject(throbberfile,
|
||||
DTA_GroupID,GID_PICTURE,
|
||||
PDTA_DestMode,PMODE_V43,
|
||||
TAG_DONE))
|
||||
{
|
||||
struct BitMapHeader *throbber_bmh;
|
||||
struct RastPort throbber_rp;
|
||||
|
||||
if(GetDTAttrs(dto,PDTA_BitMapHeader,&throbber_bmh,TAG_DONE))
|
||||
{
|
||||
throbber_width = throbber_bmh->bmh_Width / throbber_frames;
|
||||
throbber_height = throbber_bmh->bmh_Height;
|
||||
throbber_bmh->bmh_Masking = mskHasAlpha;
|
||||
|
||||
InitRastPort(&throbber_rp);
|
||||
|
||||
if(throbber = p96AllocBitMap(throbber_bmh->bmh_Width,
|
||||
throbber_height,32,
|
||||
BMF_CLEAR | BMF_DISPLAYABLE | BMF_INTERLEAVED,
|
||||
NULL,RGBFB_A8R8G8B8))
|
||||
{
|
||||
struct RenderInfo ri;
|
||||
UBYTE *throbber_tempmem = AllocVec(throbber_bmh->bmh_Width*throbber_height*4,MEMF_PRIVATE | MEMF_CLEAR);
|
||||
throbber_rp.BitMap = throbber;
|
||||
ri.Memory = throbber_tempmem;
|
||||
ri.BytesPerRow = 4*throbber_bmh->bmh_Width;
|
||||
ri.RGBFormat = RGBFB_A8R8G8B8;
|
||||
|
||||
IDoMethod(dto,PDTM_READPIXELARRAY,ri.Memory,PBPAFMT_ARGB,ri.BytesPerRow,0,0,throbber_bmh->bmh_Width,throbber_height);
|
||||
|
||||
p96WritePixelArray((struct RenderInfo *)&ri,0,0,&throbber_rp,0,0,throbber_bmh->bmh_Width,throbber_height);
|
||||
|
||||
FreeVec(throbber_tempmem);
|
||||
}
|
||||
}
|
||||
DisposeDTObject(dto);
|
||||
}
|
||||
|
||||
ami_theme_throbber_setup();
|
||||
}
|
||||
|
||||
void ami_openscreen(void)
|
||||
@ -1973,7 +1857,7 @@ void gui_quit(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
p96FreeBitMap(throbber);
|
||||
ami_theme_throbber_free();
|
||||
|
||||
urldb_save(option_url_file);
|
||||
urldb_save_cookies(option_cookie_file);
|
||||
@ -2010,16 +1894,7 @@ void gui_quit(void)
|
||||
if(option_context_menu) ami_context_menu_free();
|
||||
ami_free_menulabs();
|
||||
|
||||
for(i=0;i<=AMI_LASTPOINTER;i++)
|
||||
{
|
||||
if(mouseptrbm[i])
|
||||
{
|
||||
FreeRaster(mouseptrbm[i]->Planes[0],16,16);
|
||||
FreeRaster(mouseptrbm[i]->Planes[1],16,16);
|
||||
FreeVec(mouseptrbm[i]);
|
||||
}
|
||||
}
|
||||
|
||||
ami_mouse_pointers_free();
|
||||
ami_clipboard_free();
|
||||
ami_print_free();
|
||||
|
||||
@ -2111,16 +1986,6 @@ void ami_update_buttons(struct gui_window_2 *gwin)
|
||||
}
|
||||
}
|
||||
|
||||
void ami_get_theme_filename(char *filename,char *themestring)
|
||||
{
|
||||
if(messages_get(themestring)[0] == '*') strncpy(filename,messages_get(themestring)+1,100);
|
||||
else
|
||||
{
|
||||
strcpy(filename,option_theme);
|
||||
AddPart(filename,messages_get(themestring),100);
|
||||
}
|
||||
}
|
||||
|
||||
void ami_toggletabbar(struct gui_window_2 *gwin, bool show)
|
||||
{
|
||||
if(ClickTabBase->lib_Version < 53) return;
|
||||
@ -3463,191 +3328,6 @@ void gui_window_set_status(struct gui_window *g, const char *text)
|
||||
}
|
||||
}
|
||||
|
||||
void gui_window_set_pointer(struct gui_window *g, gui_pointer_shape shape)
|
||||
{
|
||||
ami_update_pointer(g->shared->win,shape);
|
||||
}
|
||||
|
||||
void ami_update_pointer(struct Window *win, gui_pointer_shape shape)
|
||||
{
|
||||
if(mouseptrcurrent == shape) return;
|
||||
if(drag_save) return;
|
||||
|
||||
if(option_use_os_pointers)
|
||||
{
|
||||
switch(shape)
|
||||
{
|
||||
case GUI_POINTER_DEFAULT:
|
||||
SetWindowPointer(win,TAG_DONE);
|
||||
break;
|
||||
|
||||
case GUI_POINTER_WAIT:
|
||||
SetWindowPointer(win,
|
||||
WA_BusyPointer,TRUE,
|
||||
WA_PointerDelay,TRUE,
|
||||
TAG_DONE);
|
||||
break;
|
||||
|
||||
default:
|
||||
if(mouseptrobj[shape])
|
||||
{
|
||||
SetWindowPointer(win,WA_Pointer,mouseptrobj[shape],TAG_DONE);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetWindowPointer(win,TAG_DONE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(mouseptrobj[shape])
|
||||
{
|
||||
SetWindowPointer(win,WA_Pointer,mouseptrobj[shape],TAG_DONE);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(shape == GUI_POINTER_WAIT)
|
||||
{
|
||||
SetWindowPointer(win,
|
||||
WA_BusyPointer,TRUE,
|
||||
WA_PointerDelay,TRUE,
|
||||
TAG_DONE);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetWindowPointer(win,TAG_DONE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mouseptrcurrent = shape;
|
||||
}
|
||||
|
||||
void gui_window_hide_pointer(struct gui_window *g)
|
||||
{
|
||||
if(mouseptrcurrent != AMI_GUI_POINTER_BLANK)
|
||||
{
|
||||
SetWindowPointer(g->shared->win,WA_Pointer,mouseptrobj[AMI_GUI_POINTER_BLANK],TAG_DONE);
|
||||
mouseptrcurrent = AMI_GUI_POINTER_BLANK;
|
||||
}
|
||||
}
|
||||
|
||||
void ami_init_mouse_pointers(void)
|
||||
{
|
||||
int i;
|
||||
struct RastPort mouseptr;
|
||||
struct DiskObject *dobj;
|
||||
uint32 format = IDFMT_BITMAPPED;
|
||||
int32 mousexpt=0,mouseypt=0;
|
||||
|
||||
InitRastPort(&mouseptr);
|
||||
|
||||
for(i=0;i<=AMI_LASTPOINTER;i++)
|
||||
{
|
||||
BPTR ptrfile = 0;
|
||||
mouseptrbm[i] = NULL;
|
||||
mouseptrobj[i] = NULL;
|
||||
char ptrfname[1024];
|
||||
|
||||
if(option_truecolour_mouse_pointers)
|
||||
{
|
||||
ami_get_theme_filename(&ptrfname,ptrs32[i]);
|
||||
if(dobj = GetIconTags(ptrfname,ICONGETA_UseFriendBitMap,TRUE,TAG_DONE))
|
||||
{
|
||||
if(IconControl(dobj, ICONCTRLA_GetImageDataFormat, &format, TAG_DONE))
|
||||
{
|
||||
if(IDFMT_DIRECTMAPPED == format)
|
||||
{
|
||||
int32 width = 0, height = 0;
|
||||
uint8* data = 0;
|
||||
IconControl(dobj,
|
||||
ICONCTRLA_GetWidth, &width,
|
||||
ICONCTRLA_GetHeight, &height,
|
||||
ICONCTRLA_GetImageData1, &data,
|
||||
TAG_DONE);
|
||||
|
||||
if (width > 0 && width <= 64 && height > 0 && height <= 64 && data)
|
||||
{
|
||||
STRPTR tooltype;
|
||||
|
||||
if(tooltype = FindToolType(dobj->do_ToolTypes, "XOFFSET"))
|
||||
mousexpt = atoi(tooltype);
|
||||
|
||||
if(tooltype = FindToolType(dobj->do_ToolTypes, "YOFFSET"))
|
||||
mouseypt = atoi(tooltype);
|
||||
|
||||
if (mousexpt < 0 || mousexpt >= width)
|
||||
mousexpt = 0;
|
||||
if (mouseypt < 0 || mouseypt >= height)
|
||||
mouseypt = 0;
|
||||
|
||||
static uint8 dummyPlane[64 * 64 / 8];
|
||||
static struct BitMap dummyBitMap = { 64 / 8, 64, 0, 2, 0, { dummyPlane, dummyPlane, 0, 0, 0, 0, 0, 0 }, };
|
||||
|
||||
mouseptrobj[i] = NewObject(NULL, "pointerclass",
|
||||
POINTERA_BitMap, &dummyBitMap,
|
||||
POINTERA_XOffset, -mousexpt,
|
||||
POINTERA_YOffset, -mouseypt,
|
||||
POINTERA_WordWidth, (width + 15) / 16,
|
||||
POINTERA_XResolution, POINTERXRESN_SCREENRES,
|
||||
POINTERA_YResolution, POINTERYRESN_SCREENRESASPECT,
|
||||
POINTERA_ImageData, data,
|
||||
POINTERA_Width, width,
|
||||
POINTERA_Height, height,
|
||||
TAG_DONE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!mouseptrobj[i])
|
||||
{
|
||||
ami_get_theme_filename(ptrfname,ptrs[i]);
|
||||
if(ptrfile = Open(ptrfname,MODE_OLDFILE))
|
||||
{
|
||||
int mx,my;
|
||||
UBYTE *pprefsbuf = AllocVec(1061,MEMF_PRIVATE | MEMF_CLEAR);
|
||||
Read(ptrfile,pprefsbuf,1061);
|
||||
|
||||
mouseptrbm[i]=AllocVec(sizeof(struct BitMap),MEMF_PRIVATE | MEMF_CLEAR);
|
||||
InitBitMap(mouseptrbm[i],2,32,32);
|
||||
mouseptrbm[i]->Planes[0] = AllocRaster(32,32);
|
||||
mouseptrbm[i]->Planes[1] = AllocRaster(32,32);
|
||||
mouseptr.BitMap = mouseptrbm[i];
|
||||
|
||||
for(my=0;my<32;my++)
|
||||
{
|
||||
for(mx=0;mx<32;mx++)
|
||||
{
|
||||
SetAPen(&mouseptr,pprefsbuf[(my*(33))+mx]-'0');
|
||||
WritePixel(&mouseptr,mx,my);
|
||||
}
|
||||
}
|
||||
|
||||
mousexpt = ((pprefsbuf[1056]-'0')*10)+(pprefsbuf[1057]-'0');
|
||||
mouseypt = ((pprefsbuf[1059]-'0')*10)+(pprefsbuf[1060]-'0');
|
||||
|
||||
mouseptrobj[i] = NewObject(NULL,"pointerclass",
|
||||
POINTERA_BitMap,mouseptrbm[i],
|
||||
POINTERA_WordWidth,2,
|
||||
POINTERA_XOffset,-mousexpt,
|
||||
POINTERA_YOffset,-mouseypt,
|
||||
POINTERA_XResolution,POINTERXRESN_SCREENRES,
|
||||
POINTERA_YResolution,POINTERYRESN_SCREENRESASPECT,
|
||||
TAG_DONE);
|
||||
|
||||
FreeVec(pprefsbuf);
|
||||
Close(ptrfile);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} // for
|
||||
}
|
||||
|
||||
void gui_window_set_url(struct gui_window *g, const char *url)
|
||||
{
|
||||
ULONG cur_tab = 0;
|
||||
@ -3665,64 +3345,6 @@ void gui_window_set_url(struct gui_window *g, const char *url)
|
||||
}
|
||||
}
|
||||
|
||||
void gui_window_start_throbber(struct gui_window *g)
|
||||
{
|
||||
struct IBox *bbox;
|
||||
ULONG cur_tab = 0;
|
||||
|
||||
if(!g) return;
|
||||
|
||||
if(g->tab_node && (g->shared->tabs > 1))
|
||||
{
|
||||
GetAttr(CLICKTAB_Current, g->shared->objects[GID_TABS],
|
||||
(ULONG *)&cur_tab);
|
||||
SetClickTabNodeAttrs(g->tab_node, TNA_Flagged, TRUE, TAG_DONE);
|
||||
RefreshGadgets((APTR)g->shared->objects[GID_TABS],
|
||||
g->shared->win, NULL);
|
||||
}
|
||||
|
||||
g->throbbing = true;
|
||||
|
||||
if((cur_tab == g->tab) || (g->shared->tabs <= 1))
|
||||
{
|
||||
GetAttr(SPACE_AreaBox, g->shared->objects[GID_THROBBER],
|
||||
(ULONG *)&bbox);
|
||||
|
||||
if(g->shared->throbber_frame == 0) g->shared->throbber_frame=1;
|
||||
|
||||
BltBitMapRastPort(throbber,throbber_width,0,g->shared->win->RPort,bbox->Left,bbox->Top,throbber_width,throbber_height,0x0C0);
|
||||
}
|
||||
}
|
||||
|
||||
void gui_window_stop_throbber(struct gui_window *g)
|
||||
{
|
||||
struct IBox *bbox;
|
||||
ULONG cur_tab = 0;
|
||||
|
||||
if(!g) return;
|
||||
|
||||
if(g->tab_node && (g->shared->tabs > 1))
|
||||
{
|
||||
GetAttr(CLICKTAB_Current, g->shared->objects[GID_TABS],
|
||||
(ULONG *)&cur_tab);
|
||||
SetClickTabNodeAttrs(g->tab_node, TNA_Flagged, FALSE, TAG_DONE);
|
||||
RefreshGadgets((APTR)g->shared->objects[GID_TABS],
|
||||
g->shared->win, NULL);
|
||||
}
|
||||
|
||||
g->throbbing = false;
|
||||
|
||||
if((cur_tab == g->tab) || (g->shared->tabs <= 1))
|
||||
{
|
||||
GetAttr(SPACE_AreaBox, g->shared->objects[GID_THROBBER],
|
||||
(ULONG *)&bbox);
|
||||
|
||||
BltBitMapRastPort(throbber, 0, 0, g->shared->win->RPort, bbox->Left,
|
||||
bbox->Top, throbber_width, throbber_height, 0x0C0);
|
||||
}
|
||||
// g->shared->throbber_frame = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* function to add retrieved favicon to gui
|
||||
*/
|
||||
@ -3848,59 +3470,6 @@ void gui_window_set_search_ico(struct content *ico)
|
||||
} while(node = nnode);
|
||||
}
|
||||
|
||||
void ami_update_throbber(struct gui_window_2 *g,bool redraw)
|
||||
{
|
||||
struct IBox *bbox;
|
||||
int frame = g->throbber_frame;
|
||||
|
||||
if(!g) return;
|
||||
if(!g->objects[GID_THROBBER]) return;
|
||||
|
||||
if(g->bw->window->throbbing == false)
|
||||
{
|
||||
frame = 0;
|
||||
g->throbber_frame=1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!redraw)
|
||||
{
|
||||
if(g->throbber_update_count < throbber_update_interval)
|
||||
{
|
||||
g->throbber_update_count++;
|
||||
return;
|
||||
}
|
||||
|
||||
g->throbber_update_count = 0;
|
||||
|
||||
g->throbber_frame++;
|
||||
if(g->throbber_frame > (throbber_frames-1))
|
||||
g->throbber_frame=1;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
GetAttr(SPACE_AreaBox,(Object *)g->objects[GID_THROBBER],(ULONG *)&bbox);
|
||||
|
||||
/*
|
||||
EraseRect(g->win->RPort,bbox->Left,bbox->Top,
|
||||
bbox->Left+throbber_width,bbox->Top+throbber_height);
|
||||
*/
|
||||
|
||||
BltBitMapTags(BLITA_SrcX, throbber_width * frame,
|
||||
BLITA_SrcY,0,
|
||||
BLITA_DestX,bbox->Left,
|
||||
BLITA_DestY,bbox->Top,
|
||||
BLITA_Width,throbber_width,
|
||||
BLITA_Height,throbber_height,
|
||||
BLITA_Source,throbber,
|
||||
BLITA_Dest,g->win->RPort,
|
||||
BLITA_SrcType,BLITT_BITMAP,
|
||||
BLITA_DestType,BLITT_RASTPORT,
|
||||
// BLITA_UseSrcAlpha,TRUE,
|
||||
TAG_DONE);
|
||||
}
|
||||
|
||||
void gui_window_place_caret(struct gui_window *g, int x, int y, int height)
|
||||
{
|
||||
struct IBox *bbox;
|
||||
|
@ -74,10 +74,6 @@ enum
|
||||
GID_LAST
|
||||
};
|
||||
|
||||
#define AMI_GUI_POINTER_BLANK GUI_POINTER_PROGRESS+1
|
||||
#define AMI_GUI_POINTER_DRAG GUI_POINTER_PROGRESS+2
|
||||
#define AMI_LASTPOINTER AMI_GUI_POINTER_DRAG
|
||||
|
||||
struct find_window;
|
||||
struct history_window;
|
||||
|
||||
@ -127,10 +123,8 @@ struct gui_window
|
||||
};
|
||||
|
||||
void ami_get_msg(void);
|
||||
void ami_update_pointer(struct Window *win, gui_pointer_shape shape);
|
||||
void ami_close_all_tabs(struct gui_window_2 *gwin);
|
||||
void ami_quit_netsurf(void);
|
||||
void ami_get_theme_filename(char *filename,char *themestring);
|
||||
void ami_do_redraw(struct gui_window_2 *g);
|
||||
STRPTR ami_locale_langs(void);
|
||||
|
||||
|
495
amiga/theme.c
Normal file
495
amiga/theme.c
Normal file
@ -0,0 +1,495 @@
|
||||
/*
|
||||
* Copyright 2010 Chris Young <chris@unsatisfactorysoftware.co.uk>
|
||||
*
|
||||
* 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 <string.h>
|
||||
|
||||
#include <proto/clicktab.h>
|
||||
#include <proto/datatypes.h>
|
||||
#include <proto/dos.h>
|
||||
#include <proto/exec.h>
|
||||
#include <proto/graphics.h>
|
||||
#include <proto/icon.h>
|
||||
#include <proto/intuition.h>
|
||||
#include <proto/Picasso96API.h>
|
||||
|
||||
#include <gadgets/clicktab.h>
|
||||
#include <gadgets/space.h>
|
||||
#include <graphics/blitattr.h>
|
||||
#include <intuition/pointerclass.h>
|
||||
#include <workbench/icon.h>
|
||||
|
||||
#include "amiga/download.h"
|
||||
#include "amiga/options.h"
|
||||
#include "amiga/theme.h"
|
||||
#include "utils/messages.h"
|
||||
#include "utils/utils.h"
|
||||
|
||||
struct BitMap *throbber = NULL;
|
||||
ULONG throbber_frames,throbber_update_interval;
|
||||
static Object *mouseptrobj[AMI_LASTPOINTER+1];
|
||||
static struct BitMap *mouseptrbm[AMI_LASTPOINTER+1];
|
||||
static int mouseptrcurrent=0;
|
||||
|
||||
char *ptrs[AMI_LASTPOINTER+1] = {
|
||||
"ptr_default",
|
||||
"ptr_point",
|
||||
"ptr_caret",
|
||||
"ptr_menu",
|
||||
"ptr_up",
|
||||
"ptr_down",
|
||||
"ptr_left",
|
||||
"ptr_right",
|
||||
"ptr_rightup",
|
||||
"ptr_leftdown",
|
||||
"ptr_leftup",
|
||||
"ptr_rightdown",
|
||||
"ptr_cross",
|
||||
"ptr_move",
|
||||
"ptr_wait",
|
||||
"ptr_help",
|
||||
"ptr_nodrop",
|
||||
"ptr_notallowed",
|
||||
"ptr_progress",
|
||||
"ptr_blank",
|
||||
"ptr_drag"};
|
||||
|
||||
char *ptrs32[AMI_LASTPOINTER+1] = {
|
||||
"ptr32_default",
|
||||
"ptr32_point",
|
||||
"ptr32_caret",
|
||||
"ptr32_menu",
|
||||
"ptr32_up",
|
||||
"ptr32_down",
|
||||
"ptr32_left",
|
||||
"ptr32_right",
|
||||
"ptr32_rightup",
|
||||
"ptr32_leftdown",
|
||||
"ptr32_leftup",
|
||||
"ptr32_rightdown",
|
||||
"ptr32_cross",
|
||||
"ptr32_move",
|
||||
"ptr32_wait",
|
||||
"ptr32_help",
|
||||
"ptr32_nodrop",
|
||||
"ptr32_notallowed",
|
||||
"ptr32_progress",
|
||||
"ptr32_blank",
|
||||
"ptr32_drag"};
|
||||
|
||||
void ami_theme_init(void)
|
||||
{
|
||||
char themefile[1024];
|
||||
BPTR lock = 0;
|
||||
|
||||
strcpy(themefile,option_theme);
|
||||
AddPart(themefile,"Theme",100);
|
||||
|
||||
lock = Lock(themefile,ACCESS_READ);
|
||||
|
||||
if(!lock)
|
||||
{
|
||||
warn_user("ThemeApplyErr",option_theme);
|
||||
strcpy(themefile,"PROGDIR:Resources/Themes/Default/Theme");
|
||||
free(option_theme);
|
||||
option_theme = (char *)strdup("PROGDIR:Resources/Themes/Default");
|
||||
}
|
||||
else
|
||||
{
|
||||
UnLock(lock);
|
||||
}
|
||||
|
||||
messages_load(themefile);
|
||||
}
|
||||
|
||||
void ami_theme_throbber_setup(void)
|
||||
{
|
||||
char throbberfile[1024];
|
||||
Object *dto;
|
||||
|
||||
ami_get_theme_filename(throbberfile,"theme_throbber");
|
||||
throbber_frames=atoi(messages_get("theme_throbber_frames"));
|
||||
throbber_update_interval = atoi(messages_get("theme_throbber_delay"));
|
||||
if(throbber_update_interval == 0) throbber_update_interval = 100;
|
||||
|
||||
if(dto = NewDTObject(throbberfile,
|
||||
DTA_GroupID,GID_PICTURE,
|
||||
PDTA_DestMode,PMODE_V43,
|
||||
TAG_DONE))
|
||||
{
|
||||
struct BitMapHeader *throbber_bmh;
|
||||
struct RastPort throbber_rp;
|
||||
|
||||
if(GetDTAttrs(dto,PDTA_BitMapHeader,&throbber_bmh,TAG_DONE))
|
||||
{
|
||||
throbber_width = throbber_bmh->bmh_Width / throbber_frames;
|
||||
throbber_height = throbber_bmh->bmh_Height;
|
||||
throbber_bmh->bmh_Masking = mskHasAlpha;
|
||||
|
||||
InitRastPort(&throbber_rp);
|
||||
|
||||
if(throbber = p96AllocBitMap(throbber_bmh->bmh_Width,
|
||||
throbber_height,32,
|
||||
BMF_CLEAR | BMF_DISPLAYABLE | BMF_INTERLEAVED,
|
||||
NULL,RGBFB_A8R8G8B8))
|
||||
{
|
||||
struct RenderInfo ri;
|
||||
UBYTE *throbber_tempmem = AllocVec(throbber_bmh->bmh_Width*throbber_height*4,MEMF_PRIVATE | MEMF_CLEAR);
|
||||
throbber_rp.BitMap = throbber;
|
||||
ri.Memory = throbber_tempmem;
|
||||
ri.BytesPerRow = 4*throbber_bmh->bmh_Width;
|
||||
ri.RGBFormat = RGBFB_A8R8G8B8;
|
||||
|
||||
IDoMethod(dto,PDTM_READPIXELARRAY,ri.Memory,PBPAFMT_ARGB,ri.BytesPerRow,0,0,throbber_bmh->bmh_Width,throbber_height);
|
||||
|
||||
p96WritePixelArray((struct RenderInfo *)&ri,0,0,&throbber_rp,0,0,throbber_bmh->bmh_Width,throbber_height);
|
||||
|
||||
FreeVec(throbber_tempmem);
|
||||
}
|
||||
}
|
||||
DisposeDTObject(dto);
|
||||
}
|
||||
}
|
||||
|
||||
void ami_theme_throbber_free(void)
|
||||
{
|
||||
p96FreeBitMap(throbber);
|
||||
}
|
||||
|
||||
void ami_get_theme_filename(char *filename, char *themestring)
|
||||
{
|
||||
if(messages_get(themestring)[0] == '*')
|
||||
{
|
||||
strncpy(filename, messages_get(themestring) + 1, 100);
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy(filename, option_theme);
|
||||
AddPart(filename, messages_get(themestring), 100);
|
||||
}
|
||||
}
|
||||
|
||||
void gui_window_set_pointer(struct gui_window *g, gui_pointer_shape shape)
|
||||
{
|
||||
ami_update_pointer(g->shared->win,shape);
|
||||
}
|
||||
|
||||
void ami_update_pointer(struct Window *win, gui_pointer_shape shape)
|
||||
{
|
||||
if(mouseptrcurrent == shape) return;
|
||||
if(drag_save) return;
|
||||
|
||||
if(option_use_os_pointers)
|
||||
{
|
||||
switch(shape)
|
||||
{
|
||||
case GUI_POINTER_DEFAULT:
|
||||
SetWindowPointer(win,TAG_DONE);
|
||||
break;
|
||||
|
||||
case GUI_POINTER_WAIT:
|
||||
SetWindowPointer(win,
|
||||
WA_BusyPointer,TRUE,
|
||||
WA_PointerDelay,TRUE,
|
||||
TAG_DONE);
|
||||
break;
|
||||
|
||||
default:
|
||||
if(mouseptrobj[shape])
|
||||
{
|
||||
SetWindowPointer(win,WA_Pointer,mouseptrobj[shape],TAG_DONE);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetWindowPointer(win,TAG_DONE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(mouseptrobj[shape])
|
||||
{
|
||||
SetWindowPointer(win,WA_Pointer,mouseptrobj[shape],TAG_DONE);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(shape == GUI_POINTER_WAIT)
|
||||
{
|
||||
SetWindowPointer(win,
|
||||
WA_BusyPointer,TRUE,
|
||||
WA_PointerDelay,TRUE,
|
||||
TAG_DONE);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetWindowPointer(win,TAG_DONE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mouseptrcurrent = shape;
|
||||
}
|
||||
|
||||
void gui_window_hide_pointer(struct gui_window *g)
|
||||
{
|
||||
if(mouseptrcurrent != AMI_GUI_POINTER_BLANK)
|
||||
{
|
||||
SetWindowPointer(g->shared->win,WA_Pointer,mouseptrobj[AMI_GUI_POINTER_BLANK],TAG_DONE);
|
||||
mouseptrcurrent = AMI_GUI_POINTER_BLANK;
|
||||
}
|
||||
}
|
||||
|
||||
void ami_init_mouse_pointers(void)
|
||||
{
|
||||
int i;
|
||||
struct RastPort mouseptr;
|
||||
struct DiskObject *dobj;
|
||||
uint32 format = IDFMT_BITMAPPED;
|
||||
int32 mousexpt=0,mouseypt=0;
|
||||
|
||||
InitRastPort(&mouseptr);
|
||||
|
||||
for(i=0;i<=AMI_LASTPOINTER;i++)
|
||||
{
|
||||
BPTR ptrfile = 0;
|
||||
mouseptrbm[i] = NULL;
|
||||
mouseptrobj[i] = NULL;
|
||||
char ptrfname[1024];
|
||||
|
||||
if(option_truecolour_mouse_pointers)
|
||||
{
|
||||
ami_get_theme_filename(&ptrfname,ptrs32[i]);
|
||||
if(dobj = GetIconTags(ptrfname,ICONGETA_UseFriendBitMap,TRUE,TAG_DONE))
|
||||
{
|
||||
if(IconControl(dobj, ICONCTRLA_GetImageDataFormat, &format, TAG_DONE))
|
||||
{
|
||||
if(IDFMT_DIRECTMAPPED == format)
|
||||
{
|
||||
int32 width = 0, height = 0;
|
||||
uint8* data = 0;
|
||||
IconControl(dobj,
|
||||
ICONCTRLA_GetWidth, &width,
|
||||
ICONCTRLA_GetHeight, &height,
|
||||
ICONCTRLA_GetImageData1, &data,
|
||||
TAG_DONE);
|
||||
|
||||
if (width > 0 && width <= 64 && height > 0 && height <= 64 && data)
|
||||
{
|
||||
STRPTR tooltype;
|
||||
|
||||
if(tooltype = FindToolType(dobj->do_ToolTypes, "XOFFSET"))
|
||||
mousexpt = atoi(tooltype);
|
||||
|
||||
if(tooltype = FindToolType(dobj->do_ToolTypes, "YOFFSET"))
|
||||
mouseypt = atoi(tooltype);
|
||||
|
||||
if (mousexpt < 0 || mousexpt >= width)
|
||||
mousexpt = 0;
|
||||
if (mouseypt < 0 || mouseypt >= height)
|
||||
mouseypt = 0;
|
||||
|
||||
static uint8 dummyPlane[64 * 64 / 8];
|
||||
static struct BitMap dummyBitMap = { 64 / 8, 64, 0, 2, 0, { dummyPlane, dummyPlane, 0, 0, 0, 0, 0, 0 }, };
|
||||
|
||||
mouseptrobj[i] = NewObject(NULL, "pointerclass",
|
||||
POINTERA_BitMap, &dummyBitMap,
|
||||
POINTERA_XOffset, -mousexpt,
|
||||
POINTERA_YOffset, -mouseypt,
|
||||
POINTERA_WordWidth, (width + 15) / 16,
|
||||
POINTERA_XResolution, POINTERXRESN_SCREENRES,
|
||||
POINTERA_YResolution, POINTERYRESN_SCREENRESASPECT,
|
||||
POINTERA_ImageData, data,
|
||||
POINTERA_Width, width,
|
||||
POINTERA_Height, height,
|
||||
TAG_DONE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!mouseptrobj[i])
|
||||
{
|
||||
ami_get_theme_filename(ptrfname,ptrs[i]);
|
||||
if(ptrfile = Open(ptrfname,MODE_OLDFILE))
|
||||
{
|
||||
int mx,my;
|
||||
UBYTE *pprefsbuf = AllocVec(1061,MEMF_PRIVATE | MEMF_CLEAR);
|
||||
Read(ptrfile,pprefsbuf,1061);
|
||||
|
||||
mouseptrbm[i]=AllocVec(sizeof(struct BitMap),MEMF_PRIVATE | MEMF_CLEAR);
|
||||
InitBitMap(mouseptrbm[i],2,32,32);
|
||||
mouseptrbm[i]->Planes[0] = AllocRaster(32,32);
|
||||
mouseptrbm[i]->Planes[1] = AllocRaster(32,32);
|
||||
mouseptr.BitMap = mouseptrbm[i];
|
||||
|
||||
for(my=0;my<32;my++)
|
||||
{
|
||||
for(mx=0;mx<32;mx++)
|
||||
{
|
||||
SetAPen(&mouseptr,pprefsbuf[(my*(33))+mx]-'0');
|
||||
WritePixel(&mouseptr,mx,my);
|
||||
}
|
||||
}
|
||||
|
||||
mousexpt = ((pprefsbuf[1056]-'0')*10)+(pprefsbuf[1057]-'0');
|
||||
mouseypt = ((pprefsbuf[1059]-'0')*10)+(pprefsbuf[1060]-'0');
|
||||
|
||||
mouseptrobj[i] = NewObject(NULL,"pointerclass",
|
||||
POINTERA_BitMap,mouseptrbm[i],
|
||||
POINTERA_WordWidth,2,
|
||||
POINTERA_XOffset,-mousexpt,
|
||||
POINTERA_YOffset,-mouseypt,
|
||||
POINTERA_XResolution,POINTERXRESN_SCREENRES,
|
||||
POINTERA_YResolution,POINTERYRESN_SCREENRESASPECT,
|
||||
TAG_DONE);
|
||||
|
||||
FreeVec(pprefsbuf);
|
||||
Close(ptrfile);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} // for
|
||||
}
|
||||
|
||||
void ami_mouse_pointers_free(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i=0;i<=AMI_LASTPOINTER;i++)
|
||||
{
|
||||
if(mouseptrbm[i])
|
||||
{
|
||||
FreeRaster(mouseptrbm[i]->Planes[0],16,16);
|
||||
FreeRaster(mouseptrbm[i]->Planes[1],16,16);
|
||||
FreeVec(mouseptrbm[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void gui_window_start_throbber(struct gui_window *g)
|
||||
{
|
||||
struct IBox *bbox;
|
||||
ULONG cur_tab = 0;
|
||||
|
||||
if(!g) return;
|
||||
|
||||
if(g->tab_node && (g->shared->tabs > 1))
|
||||
{
|
||||
GetAttr(CLICKTAB_Current, g->shared->objects[GID_TABS],
|
||||
(ULONG *)&cur_tab);
|
||||
SetClickTabNodeAttrs(g->tab_node, TNA_Flagged, TRUE, TAG_DONE);
|
||||
RefreshGadgets((APTR)g->shared->objects[GID_TABS],
|
||||
g->shared->win, NULL);
|
||||
}
|
||||
|
||||
g->throbbing = true;
|
||||
|
||||
if((cur_tab == g->tab) || (g->shared->tabs <= 1))
|
||||
{
|
||||
GetAttr(SPACE_AreaBox, g->shared->objects[GID_THROBBER],
|
||||
(ULONG *)&bbox);
|
||||
|
||||
if(g->shared->throbber_frame == 0) g->shared->throbber_frame=1;
|
||||
|
||||
BltBitMapRastPort(throbber,throbber_width,0,g->shared->win->RPort,bbox->Left,bbox->Top,throbber_width,throbber_height,0x0C0);
|
||||
}
|
||||
}
|
||||
|
||||
void gui_window_stop_throbber(struct gui_window *g)
|
||||
{
|
||||
struct IBox *bbox;
|
||||
ULONG cur_tab = 0;
|
||||
|
||||
if(!g) return;
|
||||
|
||||
if(g->tab_node && (g->shared->tabs > 1))
|
||||
{
|
||||
GetAttr(CLICKTAB_Current, g->shared->objects[GID_TABS],
|
||||
(ULONG *)&cur_tab);
|
||||
SetClickTabNodeAttrs(g->tab_node, TNA_Flagged, FALSE, TAG_DONE);
|
||||
RefreshGadgets((APTR)g->shared->objects[GID_TABS],
|
||||
g->shared->win, NULL);
|
||||
}
|
||||
|
||||
g->throbbing = false;
|
||||
|
||||
if((cur_tab == g->tab) || (g->shared->tabs <= 1))
|
||||
{
|
||||
GetAttr(SPACE_AreaBox, g->shared->objects[GID_THROBBER],
|
||||
(ULONG *)&bbox);
|
||||
|
||||
BltBitMapRastPort(throbber, 0, 0, g->shared->win->RPort, bbox->Left,
|
||||
bbox->Top, throbber_width, throbber_height, 0x0C0);
|
||||
}
|
||||
// g->shared->throbber_frame = 0;
|
||||
}
|
||||
|
||||
void ami_update_throbber(struct gui_window_2 *g,bool redraw)
|
||||
{
|
||||
struct IBox *bbox;
|
||||
int frame = g->throbber_frame;
|
||||
|
||||
if(!g) return;
|
||||
if(!g->objects[GID_THROBBER]) return;
|
||||
|
||||
if(g->bw->window->throbbing == false)
|
||||
{
|
||||
frame = 0;
|
||||
g->throbber_frame=1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!redraw)
|
||||
{
|
||||
if(g->throbber_update_count < throbber_update_interval)
|
||||
{
|
||||
g->throbber_update_count++;
|
||||
return;
|
||||
}
|
||||
|
||||
g->throbber_update_count = 0;
|
||||
|
||||
g->throbber_frame++;
|
||||
if(g->throbber_frame > (throbber_frames-1))
|
||||
g->throbber_frame=1;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
GetAttr(SPACE_AreaBox,(Object *)g->objects[GID_THROBBER],(ULONG *)&bbox);
|
||||
|
||||
/*
|
||||
EraseRect(g->win->RPort,bbox->Left,bbox->Top,
|
||||
bbox->Left+throbber_width,bbox->Top+throbber_height);
|
||||
*/
|
||||
|
||||
BltBitMapTags(BLITA_SrcX, throbber_width * frame,
|
||||
BLITA_SrcY,0,
|
||||
BLITA_DestX,bbox->Left,
|
||||
BLITA_DestY,bbox->Top,
|
||||
BLITA_Width,throbber_width,
|
||||
BLITA_Height,throbber_height,
|
||||
BLITA_Source,throbber,
|
||||
BLITA_Dest,g->win->RPort,
|
||||
BLITA_SrcType,BLITT_BITMAP,
|
||||
BLITA_DestType,BLITT_RASTPORT,
|
||||
// BLITA_UseSrcAlpha,TRUE,
|
||||
TAG_DONE);
|
||||
}
|
39
amiga/theme.h
Normal file
39
amiga/theme.h
Normal file
@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright 2010 Chris Young <chris@unsatisfactorysoftware.co.uk>
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
#ifndef AMIGA_THEME_H
|
||||
#define AMIGA_THEME_H
|
||||
#include "amiga/gui.h"
|
||||
|
||||
#define AMI_GUI_POINTER_BLANK GUI_POINTER_PROGRESS+1
|
||||
#define AMI_GUI_POINTER_DRAG GUI_POINTER_PROGRESS+2
|
||||
#define AMI_LASTPOINTER AMI_GUI_POINTER_DRAG
|
||||
|
||||
ULONG throbber_width, throbber_height;
|
||||
|
||||
void ami_theme_init(void);
|
||||
void ami_get_theme_filename(char *filename, char *themestring);
|
||||
|
||||
void ami_theme_throbber_setup(void);
|
||||
void ami_theme_throbber_free(void);
|
||||
void ami_update_throbber(struct gui_window_2 *g,bool redraw);
|
||||
|
||||
void ami_init_mouse_pointers(void);
|
||||
void ami_mouse_pointers_free(void);
|
||||
void ami_update_pointer(struct Window *win, gui_pointer_shape shape);
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user