Esempio n. 1
0
/* blended color cycle */
static void ColorCycleBlend (TLN_Palette srcpalette, TLN_Palette dstpalette, struct Strip* strip, int t)
{
	int c;
	int idx0, idx1;
	uint8_t *srcptr0, *srcptr1, *dstptr;

	int t0 = strip->t0;
	int t1 = strip->timer;
	int count = strip->count;
	int steps = strip->pos;

	/* map [t0 - t1] to [0 - 255] */
	int f1 = lerp (t, t0,t1, 0,255);
	int f0 = 255 - f1;

	for (c=0; c<count; c++)
	{
		if (strip->dir)
		{
			idx0 = (c - steps + count) % count;
			idx1 = (c - steps - 1 + count) % count;
		}
		else
		{
			idx0 = (c + steps) % count;
			idx1 = (c + steps + 1) % count;
		}

		srcptr0 = GetPaletteData (srcpalette, strip->first + idx0);
		srcptr1 = GetPaletteData (srcpalette, strip->first + idx1);
		dstptr  = GetPaletteData (dstpalette, strip->first + c);
		blendColors (srcptr0, srcptr1, dstptr, f0, f1);
	}
}
Esempio n. 2
0
/* regular color cycle */
static void ColorCycle (TLN_Palette srcpalette, TLN_Palette dstpalette, struct Strip* strip)
{
	int c;
	uint32_t* srcptr = (uint32_t*)GetPaletteData (srcpalette, strip->first);
	uint32_t* dstptr = (uint32_t*)GetPaletteData (dstpalette, strip->first);
	int count = strip->count;
	int steps = strip->pos;

	if (strip->dir)
	{
		for (c=0; c<count; c++)
			dstptr[c] = srcptr[(c - steps + count) % count];
	}
	else
	{
		for (c=0; c<count; c++)
			dstptr[c] = srcptr[(c + steps) % count];
	}
}
Esempio n. 3
0
static void WimpButton( void )
{
    if ( iconbar && (e.data.mouse.window < 0) )
    {
        if ( e.data.mouse.button.data.menu )
            Menu_Show( &Menu_iconbar, e.data.mouse.pos.x, -1 );
        else if ( e.data.mouse.button.data.select )
            OpenMainWindow();
    }
    else if ( e.data.mouse.window == palh && e.data.mouse.button.data.select )
    {
        switch ( e.data.mouse.icon )
        {
        case palicon_KEEP:
        case palicon_256:
        case palicon_216:
        case palicon_FILE:
        case palicon_OPTIMISE:
            DoPaletteRadio();
            break;
        case palicon_OK:
            GetPaletteData();
            /* fall through */
        case palicon_CANCEL:
            Wimp_CloseWindow( palh );
            palette_open = FALSE;
            break;
        }
        return;
    }
    else if ( e.data.mouse.window == spropth && e.data.mouse.button.data.select )
    {
        switch ( e.data.mouse.icon )
        {
        case spropticon_FORCENEW:
            DoSprOptRadio();
            break;
        case spropticon_OK:
            GetSprOptData();
            /* fall through */
        case spropticon_CANCEL:
            Wimp_CloseWindow( spropth );
            spropt_open = FALSE;
            break;
        }
        return;
    }
    else if ( e.data.mouse.window == wCFSI && e.data.mouse.button.data.select )
    {
        switch ( e.data.mouse.icon )
        {
        case cfsiicon_CFSI:
            Icon_SetShade( wCFSI, cfsiicon_OPTIONS,
                           !Icon_GetSelect( wCFSI, cfsiicon_CFSI ) );
            break;
        case cfsiicon_OK:
            GetCFSIData();
            /* fall through */
        case cfsiicon_CANCEL:
            Wimp_CloseWindow( wCFSI );
            cfsi_open = FALSE;
            break;
        }
        return;
    }

    if ( e.data.mouse.window != wh )
        return;

    if ( e.data.mouse.button.data.select )
    {
        switch ( e.data.mouse.icon )
        {
        case igicon_TRANS_FORCE:
        case igicon_TRANS_USE:
        case igicon_TRANS_NONE:
            Icon_SetShade( wh, igicon_TRANS_VALUE,
                           !Icon_GetSelect( wh, igicon_TRANS_FORCE ) );
            break;
#if 0
            /* fall through */
        case igicon_INTERLACED:
            if ( !Icon_GetSelect( wh, igicon_TRANS_NONE )
                 && Icon_GetSelect( wh, igicon_INTERLACED ) )
                Icon_SetSelect( wh, igicon_TRIM, TRUE );
            break;
#endif
        case igicon_DELAY_USE:
            Icon_SetShade( wh, igicon_DELAY,
                           !Icon_GetSelect( wh, igicon_DELAY_USE ) );
            break;
        case igicon_HELP_FILE:
            _kernel_oscli( "Filer_Run <InterGif$Dir>.!Help" );
            break;
        case igicon_HELP_WEB:
            Internet_OpenURL( "http://utter.chaos.org.uk/~pdh/software/intergif.htm" );
            break;
        case igicon_OUT_GIF:
        case igicon_OUT_SPRITE:
            {
                BOOL bSprite = Icon_GetSelect( wh, igicon_OUT_SPRITE );

                strcpy( saveicon, bSprite ? "Sfile_ff9" : "Sfile_695" );
                Wimp_SetIconState( wh, igicon_DRAGGABLE, 0, 0 );
                Icon_SetShade( wh, igicon_INTERLACED, bSprite );
                Icon_SetShade( wh, igicon_LOOP,       bSprite );
                Icon_SetShade( wh, igicon_DELAY,
                               bSprite
                                || !Icon_GetSelect( wh, igicon_DELAY_USE ) );
                Icon_SetShade( wh, igicon_DELAY_USE,  bSprite );
                Icon_SetShade( wh, igicon_SPROPTIONS,  !bSprite );
            }
            break;
        case igicon_SAVE:
            SaveFile( savename );
            break;
        case igicon_PALETTE:
            OpenPaletteWindow();
            break;
        case igicon_SPROPTIONS:
            OpenSprOptWindow();
            break;
        case igicon_CFSI:
            OpenCFSIWindow();
            break;
        }
    }
    else if ( e.data.mouse.button.data.adjust )
    {
        if ( e.data.mouse.icon == igicon_TRANS_FORCE )
            Icon_SetShade( wh, igicon_TRANS_VALUE,
                           !Icon_GetSelect( wh, igicon_TRANS_FORCE ) );
    }
    else if ( e.data.mouse.button.data.dragselect )
    {
        if ( e.data.mouse.icon == igicon_DRAGGABLE && *loadname )
        {
            icon_block *pib = (icon_block*) ((&Template_intergif)+1);
            window_state ws;

            Wimp_GetWindowState( wh, &ws );
            pib += igicon_DRAGGABLE;
            ws.openblock.screenrect.min.x += pib->workarearect.min.x;
            ws.openblock.screenrect.max.x = ws.openblock.screenrect.min.x + 68;
            ws.openblock.screenrect.max.y += pib->workarearect.max.y;
            ws.openblock.screenrect.min.y = ws.openblock.screenrect.max.y - 68;
            DragASprite_Start( 0xC5, (void*)1, saveicon+1,
                               &ws.openblock.screenrect, NULL );
            draggingfile = TRUE;
        }
    }

}
Esempio n. 4
0
static void SaveFile( char *filename )
{
    icon_block *pib = (icon_block*)((&Template_intergif)+1);
    char buffer[700];   /* two filenames and then some */
    os_error *e;
    int next, oldnext, free, current;

    if (strchr( filename, ':' ) == NULL
    	&& strchr( filename, '.' ) == NULL )
    {
    	Error_Report2( 0, "To save, drag the icon to a directory display" );
    	return;
    }

    sprintf( buffer, "<InterGif$Dir>.intergif %s -desktop",
                     loadname );

    if ( Icon_GetSelect( wh, igicon_DELAY_USE ) )
    {
        strcat( buffer, " -d " );
        strcat( buffer, pib[igicon_DELAY].data.indirecttext.buffer );
    }

    if ( Icon_GetSelect( wh, igicon_SPLIT ) )
        strcat( buffer, " -split" );

    if ( Icon_GetSelect( wh, igicon_OUT_SPRITE ) )
        strcat( buffer, " -s" );

    if ( Icon_GetSelect( wh, igicon_INTERLACED ) )
        strcat( buffer, " -i" );

    if ( Icon_GetSelect( wh, igicon_LOOP ) )
        strcat( buffer, " -loop" );

    if ( Icon_GetSelect( wh, igicon_TRIM ) )
        strcat( buffer, " -trim" );

    if ( Icon_GetSelect( wh, igicon_JOIN ) )
        strcat( buffer, " -join" );

    if ( !Icon_GetSelect( wh, igicon_TRANS_NONE ) )
    {
        strcat( buffer, " -t " );   /* note extra space */

        if ( Icon_GetSelect( wh, igicon_TRANS_FORCE ) )
            strcat( buffer, pib[igicon_TRANS_VALUE].data.indirecttext.buffer );
    }

    if ( palette_open )
        GetPaletteData();

    if ( palette_which == palicon_FILE && (!palettefile[0] ) )
    {
        Error_Report2( 0, "Palette 'From file' chosen but no palette file supplied" );
        return;
    }

    switch ( palette_which )
    {
    case palicon_216:
        strcat( buffer, " -216" );
        break;
    case palicon_256:
        strcat( buffer, " -256" );
        break;
    case palicon_g16:
        strcat( buffer, " -g16" );
        break;
    case palicon_g256:
        strcat( buffer, " -g256" );
        break;
    case palicon_OPTIMISE:
        sprintf( buffer + strlen(buffer), " -best %d", palette_opt_colours );
        break;
    case palicon_FILE:
        sprintf( buffer + strlen(buffer), " -pal %s", palettefile );
        break;
    }

    if ( palette_keep_unused )
        strcat( buffer, " -same" );

    if ( palette_dither && (palette_which != palicon_KEEP) )
        strcat( buffer, " -diffuse -zigzag" );

    if ( spropt_open )
        GetSprOptData();

    if ( force_new )
    {
        strcat( buffer, " -new" );
        if (xdpi != 90) {
            sprintf( buffer + strlen(buffer), " -xdpi %d", xdpi );
        }
        if (ydpi != 90) {
            sprintf( buffer + strlen(buffer), " -ydpi %d", ydpi );
        }
    }

    if ( cfsi_open )
        GetCFSIData();

    if ( cfsi )
    {
        strcat( buffer, " -c \"" );
        strcat( buffer, cfsi_options );
        strcat( buffer, "\"" );
    }

    strcat( buffer, " -o " );
    strcat( buffer, filename );

    current = oldnext = free = -1;
    Wimp_SlotSize( &current, &oldnext, &free );

    next = free - 4*1024; /* 64*1024; */
    current = free = -1;
    Wimp_SlotSize( &current, &next, &free );

    Hourglass_On();
    e = Wimp_StartTask( buffer );
    Hourglass_Off();

    current = free = -1;
    Wimp_SlotSize( &current, &oldnext, &free );

    if ( e )
        Error_Report2( e->errnum, e->errmess );
    else
    {
        if ( _kernel_getenv( "InterGif$Error", buffer, 700 ) )
            Error_Report2( 0, "Internal error: error variable not set" );
        else if ( *buffer )
            Error_Report2( 0, buffer );
    }
}