void updateVolumeContents (ASVolume *v){ int align = Config->Align, h_spacing = 1, v_spacing = 1; ASFlagType context_mask = 0; if (v->contents == NULL ) { v->contents = create_astbar (); v->contents->context = C_TITLE ; } else /* delete label if it was previously created : */ delete_astbar_tile (v->contents, -1 ); if (!ASVolume_isRequestPending(v)) { if (ASVolume_isEjectable(v)) set_flags (context_mask, EJECT_CONTEXT); if (ASVolume_isMounted(v)) set_flags (context_mask, UNMOUNT_CONTEXT); else set_flags (context_mask, MOUNT_CONTEXT); } LOCAL_DEBUG_OUT ("volume %s context mask 0x%lx", v->name, context_mask); set_astbar_style_ptr (v->contents, -1, Scr.Look.MSWindow[ASVolume_isMounted(v)?BACK_UNFOCUSED:BACK_FOCUSED] ); set_astbar_hilite (v->contents, BAR_STATE_FOCUSED, Config->MountedBevel); set_astbar_hilite (v->contents, BAR_STATE_UNFOCUSED, Config->UnmountedBevel); set_astbar_composition_method(v->contents, BAR_STATE_FOCUSED, TEXTURE_TRANSPIXMAP_ALPHA); set_astbar_composition_method(v->contents, BAR_STATE_UNFOCUSED, TEXTURE_TRANSPIXMAP_ALPHA); if (v->iconIm){ safe_asimage_destroy (v->iconImScaled); #if 0 v->iconImScaled = scale_asimage (Scr.asv, v->iconIm, AppState.tileWidth-5, AppState.tileHeight-5-(AppState.buttons[0]->height + 4), ASA_ASImage, 100, ASIMAGE_QUALITY_DEFAULT); add_astbar_icon(v->contents, 0, 0, False, 0, v->iconImScaled); #else v->iconImScaled = scale_asimage (Scr.asv, v->iconIm, AppState.tileWidth*2/3, (AppState.tileHeight-(AppState.buttons[0]->height + 4)), ASA_ASImage, 100, ASIMAGE_QUALITY_DEFAULT); add_astbar_icon(v->contents, 0, 0, False, ALIGN_CENTER, v->iconImScaled); #endif } add_astbar_label (v->contents, 0, 0, False, align|AS_TilePadRight, h_spacing, v_spacing, v->name, AS_Text_UTF8 ); LOCAL_DEBUG_OUT ("mount_button.width = %d, mount_button.height = %d, image %dx%d", AppState.buttons[0]->width, AppState.buttons[0]->height, AppState.buttons[0]->pressed.image->width, AppState.buttons[0]->pressed.image->height); add_astbar_btnblock (v->contents, 0, 2, True, align, AppState.buttons, context_mask, BUTTONS_NUM, 2, 2, 5, 0); if (get_flags(Config->flags, ASMOUNT_ShowHints)) { char* hint = ASVolume_toString (v); set_astbar_balloon (v->contents, C_TITLE, hint, AS_Text_UTF8); safefree(hint); set_astbar_balloon (v->contents, MOUNT_CONTEXT, "Mount volume", AS_Text_UTF8); set_astbar_balloon (v->contents, EJECT_CONTEXT, "Eject drive", AS_Text_UTF8); set_astbar_balloon (v->contents, UNMOUNT_CONTEXT, "Un-mount volume", AS_Text_UTF8); } }
static void display_image_view (ASGtkImageView * iv) { ASImage *im = iv->image_entry ? iv->image_entry->preview : NULL; GdkPixbuf *pb = NULL; ASImage *scaled = NULL, *tiled = NULL; int scaled_w, scaled_h; int tiled_h, tiled_w; ASVisual *asv = get_screen_visual (NULL); int view_w, view_h; if (im == NULL) { gtk_image_set_from_stock (GTK_IMAGE (iv->view), GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_BUTTON); return; } #if 1 view_w = iv->view_width; view_h = iv->view_height; if (view_w <= 0 || view_h <= 0) return; scaled_w = im->width; scaled_h = im->height; if (get_flags (iv->flags, ASGTK_IMAGE_VIEW_SCALE_TO_VIEW)) { if (get_flags (iv->flags, ASGTK_IMAGE_VIEW_TILE_TO_ASPECT) && iv->aspect_x > 0 && iv->aspect_y > 0) { scaled_w = (im->width * view_w) / iv->aspect_x; scaled_h = (im->height * view_h) / iv->aspect_y; } else { scaled_w = view_w; scaled_h = view_h; } } else if (get_flags (iv->flags, ASGTK_IMAGE_VIEW_SCALE_TO_ASPECT) && iv->aspect_x > 0 && iv->aspect_y > 0) { scaled_w = iv->aspect_x; scaled_h = iv->aspect_y; } tiled_w = scaled_w; tiled_h = scaled_h; if (get_flags (iv->flags, ASGTK_IMAGE_VIEW_TILE_TO_ASPECT) && iv->aspect_x > 0 && iv->aspect_y > 0) { if (get_flags (iv->flags, ASGTK_IMAGE_VIEW_SCALE_TO_VIEW)) { if (tiled_w < view_w) tiled_w = view_w; if (tiled_h < view_h) tiled_h = view_h; } else { if (tiled_w < iv->aspect_x) tiled_w = iv->aspect_x; if (tiled_h < iv->aspect_y) tiled_h = iv->aspect_y; } } if (get_flags (iv->flags, ASGTK_IMAGE_VIEW_TILE_TO_VIEW)) { if (tiled_w < view_w) tiled_w = view_w; if (tiled_h < view_h) tiled_h = view_h; } LOCAL_DEBUG_OUT ("scaled size is %dx%d, tiled size %dx%d", scaled_w, scaled_h, tiled_w, tiled_h); if (scaled_w != im->width || scaled_h != im->height) { scaled = scale_asimage (asv, im, scaled_w, scaled_h, ASA_ASImage, 0, ASIMAGE_QUALITY_DEFAULT); if (scaled) im = scaled; } if (tiled_w != im->width || tiled_h != im->height) { tiled = tile_asimage (asv, im, 0, 0, tiled_w, tiled_h, TINT_LEAVE_SAME, ASA_ASImage, 0, ASIMAGE_QUALITY_DEFAULT); if (tiled) im = tiled; } pb = ASImage2GdkPixbuf (im); if (tiled) destroy_asimage (&tiled); if (scaled) destroy_asimage (&scaled); if (pb) { gtk_image_set_from_pixbuf (GTK_IMAGE (iv->view), pb); g_object_unref (pb); } LOCAL_DEBUG_OUT ("####!!! recquisition is %dx%d", GTK_WIDGET (iv->view)->requisition.width, GTK_WIDGET (iv->view)->requisition.height); #endif }
int main(int argc, char* argv[]) { Display *dpy = NULL; ASVisual *asv ; int screen = 0, depth = 0; int to_width = 1, to_height = 1; ASImageLayer *layers ; int layers_num = 0, i; ASImage *merged_im ; /* see ASView.1 : */ set_application_name( argv[0] ); #if (HAVE_AFTERBASE_FLAG==1) set_output_threshold(OUTPUT_LEVEL_DEBUG); #endif if( argc == 2 && strncmp(argv[1],"-h", 2) == 0 ) { usage(); return 0; } if( argc <= 3 ) { show_error( "not enough arguments, please see usage:%s", " "); usage() ; printf( "Using the default, \"The Burning Rose\", composition :\n"); printf( "\n\trose512.jpg add back.xpm:512x386 hue " "fore.xpm:512x386\n"); argv = &(burning_rose[0]) ; argc = 6; } #ifndef X_DISPLAY_MISSING dpy = XOpenDisplay(NULL); _XA_WM_DELETE_WINDOW = XInternAtom( dpy, "WM_DELETE_WINDOW", False); screen = DefaultScreen(dpy); depth = DefaultDepth( dpy, screen ); #endif /* see ASView.3 : */ asv = create_asvisual( dpy, screen, depth, NULL ); /* see ASMerge.1 : */ layers = safecalloc( argc/2, sizeof(ASImageLayer) ); for( i = 1 ; i < argc ; i++ ) { int x = 0, y = 0; unsigned int width, height ; int geom_flags = 0 ; char *separator; char *filename ; /* see ASMerge.2 */ if( i > 1 ) { /* see blend_scanlines_name2func() : */ if((layers[layers_num].merge_scanlines = blend_scanlines_name2func( argv[i] )) == NULL ) continue ; if( ++i >= argc ) break; } if( (separator = strchr( argv[i], ':' )) != NULL ) { /* see ASTile.1 : */ geom_flags = XParseGeometry( separator+1, &x, &y, &width, &height); filename = mystrndup( argv[i], separator-argv[i] ); }else filename = argv[i] ; layers[layers_num].im = file2ASImage( filename, 0xFFFFFFFF, SCREEN_GAMMA, 100, getenv("IMAGE_PATH"), NULL ); if( filename != argv[i] ) free( filename ); if( layers[layers_num].im != NULL ) { if( !get_flags(geom_flags, WidthValue) ) width = layers[layers_num].im->width ; if( !get_flags(geom_flags, HeightValue) ) height = layers[layers_num].im->height ; /* see ASMerge.3 : */ if( layers[layers_num].merge_scanlines == NULL ) layers[layers_num].merge_scanlines = alphablend_scanlines ; layers[layers_num].clip_width = width ; layers[layers_num].clip_height = height ; if( layers_num > 0 ) { layers[layers_num].dst_x = x ; layers[layers_num].dst_y = y ; }else { to_width = width ; to_height = height ; if( width != layers[layers_num].im->width || height != layers[layers_num].im->height ) { ASImage *scaled_bottom ; /* see ASScale.2 : */ scaled_bottom = scale_asimage( asv, layers[layers_num].im, width, height, False, 100, ASIMAGE_QUALITY_DEFAULT ); destroy_asimage( &(layers[layers_num].im) ); layers[layers_num].im = scaled_bottom ; } } ++layers_num ; } } if( layers_num <= 0 ) { show_error( "there is no images to merge. Aborting"); return 2; } /* see ASMerge.4 */ merged_im = merge_layers( asv, layers, layers_num, to_width, to_height, #ifndef X_DISPLAY_MISSING ASA_XImage, #else ASA_ASImage, #endif 0, ASIMAGE_QUALITY_DEFAULT ); while( --layers_num >= 0 ) destroy_asimage( &(layers[layers_num].im) ); free( layers ); if( merged_im ) { #ifndef X_DISPLAY_MISSING /* see ASView.4 : */ Window w = create_top_level_window( asv, DefaultRootWindow(dpy), 32, 32, to_width, to_height, 1, 0, NULL, "ASMerge", NULL ); if( w != None ) { Pixmap p ; XMapRaised (dpy, w); /* see ASView.5 : */ p = asimage2pixmap( asv, DefaultRootWindow(dpy), merged_im, NULL, True ); destroy_asimage( &merged_im ); /* see common.c: set_window_background_and_free() : */ p = set_window_background_and_free( w, p ); /* see common.c: wait_closedown() : */ } wait_closedown(w); dpy = NULL; #else /* writing result into the file */ ASImage2file( merged_im, NULL, "asmerge.jpg", ASIT_Jpeg, NULL ); destroy_asimage( &merged_im ); #endif } #ifdef DEBUG_ALLOCS build_xpm_colormap(NULL); print_unfreed_mem(); #endif return 0 ; }