/* Copyright 1997 Acorn Computers Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /***************************************************/ /* File : Images.h */ /* */ /* Purpose: Image related functions. */ /* */ /* Author : Merlyn Kline for Customer browser */ /* This source adapted by A.D.Hodgkinson */ /* */ /* History: 28-Nov-96: Created with dummy function */ /* for temporary use in other */ /* routines. */ /* 20-Jan-97: Filled in with most of the */ /* functions present and */ /* converted to the new data */ /* structures where needed. */ /* 15-Mar-97: Reorganised a bit, putting */ /* functions in a more logical */ /* order to aid legibility. */ /* 17-Dec-97: Added support for saving as */ /* a Draw file. */ /***************************************************/ /* Size reported for an image or Object if it's data isn't */ /* present and no other size information can be found */ #define ImageDefaultOSSize_X 48 #define ImageDefaultOSSize_Y 48 /* The image_info structure is used for the image handling code, */ /* where each image has associated data about its size, fetch */ /* status and so-on. */ struct browser_data; typedef struct image_info { unsigned int handle; /* URL fetch handle for this image */ Image * istore; /* Imagetrans pointer */ browser_data * owner; /* Owner of this structure */ int x; /* X position on the page for the owner */ int y; /* Y position on the page for the owner */ int dataoffset; /* Offset of image data within image data block */ int alloc; /* Total space allocated in flex block */ int ualloc; /* Space allocated to url in flex block */ int isize; /* Size of image storage used */ HStream * token; /* Token this image appears in */ int currw; /* Current width of image */ int currh; /* Current height of image */ int xref; /* Cross-reference to image record with same url */ int bytesgot; /* Total bytes fetched for this image so far */ unsigned int started :1; /* The fetch has started to happen */ unsigned int fetched :1; /* Flag indicating the image is fetched */ unsigned int delayed :1; /* Flag indicating the image is delayed (by delayimages option) */ unsigned int success :1; /* This image completed fetching without errors */ unsigned int fixedsize :1; /* The size has been fixed in the HTML */ unsigned int background :1; /* The image is being used as a page background */ unsigned int hadfirst :1; /* 1 = image has had image_update_image called for it */ unsigned int reformat :1; /* 1 = should reformat on next image update if fixedsize = 0 */ unsigned int fromhistory :1; /* 1 = image size came from image history rather than HTML */ unsigned int hadfiller :1; /* 1 = image has had RegisterFiller called for it */ unsigned int canredraw :1; /* 1 = image may be redrawn, else is waiting for a reformat */ unsigned int priority :1; /* 1 = show the image regardless of any global settings */ } image_info; /* Function prototypes */ _kernel_oserror * image_new_image (browser_data * b, const char * url, HStream * token, int background); void image_abort_fetches (browser_data * b); _kernel_oserror * image_process_null (browser_data * b); _kernel_oserror * image_discard (browser_data * b); void image_reload (browser_data * b, HStream * token); void image_delay_fetches (browser_data * b); void image_restart_fetches (browser_data * b, int foreground, int background); int image_animate_images (int eventcode, WimpPollBlock * block, IdBlock * idb, browser_data * handle); _kernel_oserror * image_fill_background (void * handle, int * i); _kernel_oserror * image_redraw (browser_data * b, WimpRedrawWindowBlock * r, HStream * token, int x, int y); int image_tile_window (browser_data * b, WimpRedrawWindowBlock * r, int xorigin, int yorigin); void image_mark_as_redrawable (browser_data * b, int image); void image_token_reformatted (browser_data * b, HStream * token); _kernel_oserror * image_mode_change (void); int image_fetching (browser_data * b); int image_fetched (browser_data * b, int image); int image_token_fetched (browser_data * b, HStream * token); int image_total_bytes_fetched (browser_data * b); int image_count_pending (browser_data * b); int image_count_specific_pending (browser_data * b); int image_count_delayed (browser_data * b); int image_plot_started (browser_data * b, int image); int image_token_plot_started (browser_data * b, HStream * token); void image_lock_token_image_size (browser_data * b, HStream * token); void image_unlock_token_image_size (browser_data * b, HStream * token); _kernel_oserror * image_get_token_image_size (browser_data * b, HStream * token, BBox * box); _kernel_oserror * image_set_token_image_size (browser_data * b, HStream * token, BBox * box); _kernel_oserror * image_get_back_image_size (browser_data * b, BBox * box); int image_get_token_image_position (browser_data * b, HStream * t, int * x, int * y); int image_set_token_image_position (browser_data * b, HStream * t, int x, int y); void image_get_background_image_url (browser_data * b, char * buffer, int size); void image_convert_to_pixels (browser_data * b, HStream * token, int * x, int * y); _kernel_oserror * image_return_click_offset (browser_data * b, HStream * t, WimpGetPointerInfoBlock * i, int * x, int * y); _kernel_oserror * image_export_sprite (char * path, browser_data * b, HStream * image); int image_sprite_size (browser_data * b, HStream * image); _kernel_oserror * image_export_original (char * path, browser_data * b, HStream * image); int image_original_size (browser_data * b, HStream * image); int image_to_draw_file (browser_data * b, WimpRedrawWindowBlock * r, HStream * token, int x, int y, int dont_create); int image_draw_file_size (browser_data * b, HStream * token, int dont_delete); int image_tile_to_draw (browser_data * b, WimpRedrawWindowBlock * r, int xorigin, int yorigin, int * size); int image_token_can_be_saved_as_sprite (browser_data * b, HStream * image);