diff options
Diffstat (limited to 'engines/sci/gfx')
| -rw-r--r-- | engines/sci/gfx/gfx_gui.cpp | 6 | ||||
| -rw-r--r-- | engines/sci/gfx/gfx_resmgr.cpp | 15 | ||||
| -rw-r--r-- | engines/sci/gfx/gfx_resmgr.h | 4 | ||||
| -rw-r--r-- | engines/sci/gfx/gfx_support.cpp | 18 | ||||
| -rw-r--r-- | engines/sci/gfx/gfx_system.h | 8 | ||||
| -rw-r--r-- | engines/sci/gfx/gfx_tools.h | 4 | ||||
| -rw-r--r-- | engines/sci/gfx/gfx_widgets.cpp | 13 | ||||
| -rw-r--r-- | engines/sci/gfx/operations.cpp | 53 | ||||
| -rw-r--r-- | engines/sci/gfx/operations.h | 17 | ||||
| -rw-r--r-- | engines/sci/gfx/res_font.cpp | 12 |
10 files changed, 40 insertions, 110 deletions
diff --git a/engines/sci/gfx/gfx_gui.cpp b/engines/sci/gfx/gfx_gui.cpp index 2659704d7e..b4479b7341 100644 --- a/engines/sci/gfx/gfx_gui.cpp +++ b/engines/sci/gfx/gfx_gui.cpp @@ -455,12 +455,6 @@ GfxList *sciw_new_list_control(GfxPort *port, reg_t ID, rect_t zone, int font_nr font_height = gfxop_get_font_height(port->_visual->_gfxState, font_nr); columns = (zone.height - 20); - if (font_height <= 0) { - error("Attempt to create list control with invalid font %d", font_nr); - delete list; - return NULL; - } - columns /= font_height; gfxw_set_id(list, ID.segment, ID.offset); diff --git a/engines/sci/gfx/gfx_resmgr.cpp b/engines/sci/gfx/gfx_resmgr.cpp index 12551fa0f9..940fed21d6 100644 --- a/engines/sci/gfx/gfx_resmgr.cpp +++ b/engines/sci/gfx/gfx_resmgr.cpp @@ -76,7 +76,7 @@ GfxResManager::~GfxResManager() { _staticPalette = 0; } -int GfxResManager::calculatePic(gfxr_pic_t *scaled_pic, gfxr_pic_t *unscaled_pic, int flags, int default_palette, int nr) { +void GfxResManager::calculatePic(gfxr_pic_t *scaled_pic, gfxr_pic_t *unscaled_pic, int flags, int default_palette, int nr) { Resource *res = _resMan->findResource(ResourceId(kResourceTypePic, nr), 0); int need_unscaled = unscaled_pic != NULL; gfxr_pic0_params_t style, basic_style; @@ -93,7 +93,7 @@ int GfxResManager::calculatePic(gfxr_pic_t *scaled_pic, gfxr_pic_t *unscaled_pic #endif if (!res || !res->data) - return GFX_ERROR; + error("calculatePic(): pic number %d not found", nr); if (need_unscaled) { if (_resMan->sciVersion() == SCI_VERSION_1_1) @@ -132,8 +132,6 @@ int GfxResManager::calculatePic(gfxr_pic_t *scaled_pic, gfxr_pic_t *unscaled_pic if (unscaled_pic) unscaled_pic->visual_map->loop = default_palette; - - return GFX_OK; } int GfxResManager::getOptionsHash(gfx_resource_type_t type) { @@ -363,12 +361,9 @@ gfxr_pic_t *GfxResManager::getPic(int num, int maps, int flags, int default_pale } gfxr_clear_pic0(pic, SCI_TITLEBAR_SIZE); } - if (calculatePic(pic, unscaled_pic, flags, default_palette, num)) { - gfxr_free_pic(pic); - if (unscaled_pic) - gfxr_free_pic(unscaled_pic); - return NULL; - } + + calculatePic(pic, unscaled_pic, flags, default_palette, num); + if (!res) { res = (gfx_resource_t *)malloc(sizeof(gfx_resource_t)); res->ID = GFXR_RES_ID(GFX_RESOURCE_TYPE_PIC, num); diff --git a/engines/sci/gfx/gfx_resmgr.h b/engines/sci/gfx/gfx_resmgr.h index 3b19fd4eed..98cc06c5d7 100644 --- a/engines/sci/gfx/gfx_resmgr.h +++ b/engines/sci/gfx/gfx_resmgr.h @@ -225,10 +225,8 @@ public: * @param[in] default_palette The default palette to use for pic * drawing (interpreter dependant) * @param[in] nr pic resource number - * @return GFX_ERROR if the resource could not be - * found, GFX_OK otherwise */ - int calculatePic(gfxr_pic_t *scaled_pic, gfxr_pic_t *unscaled_pic, + void calculatePic(gfxr_pic_t *scaled_pic, gfxr_pic_t *unscaled_pic, int flags, int default_palette, int nr); diff --git a/engines/sci/gfx/gfx_support.cpp b/engines/sci/gfx/gfx_support.cpp index 40da361f91..4f247e2cb1 100644 --- a/engines/sci/gfx/gfx_support.cpp +++ b/engines/sci/gfx/gfx_support.cpp @@ -194,7 +194,7 @@ void _gfx_crossblit_simple(byte *dest, byte *src, int dest_line_width, int src_l } } -int gfx_crossblit_pixmap(gfx_mode_t *mode, gfx_pixmap_t *pxm, int priority, rect_t src_coords, rect_t dest_coords, +void gfx_crossblit_pixmap(gfx_mode_t *mode, gfx_pixmap_t *pxm, int priority, rect_t src_coords, rect_t dest_coords, byte *dest, int dest_line_width, byte *priority_dest, int priority_line_width, int priority_skip, int flags) { int maxx = 320 * mode->xfact; int maxy = 200 * mode->yfact; @@ -217,9 +217,9 @@ int gfx_crossblit_pixmap(gfx_mode_t *mode, gfx_pixmap_t *pxm, int priority, rect // --???-- if (src_coords.y > yl) - return GFX_OK; + return; if (src_coords.x > xl) - return GFX_OK; + return; // --???-- if (dest_coords.x + xl >= maxx) @@ -231,10 +231,10 @@ int gfx_crossblit_pixmap(gfx_mode_t *mode, gfx_pixmap_t *pxm, int priority, rect yl -= yoffset; if (!pxm->data) - return GFX_ERROR; + error("Attempted to crossblit an empty pixmap"); if (xl <= 0 || yl <= 0) - return GFX_OK; + return; // Set destination offsets @@ -275,10 +275,8 @@ int gfx_crossblit_pixmap(gfx_mode_t *mode, gfx_pixmap_t *pxm, int priority, rect int shift_nr = 0; alpha_mask = 0; - if (!alpha_mask && pxm->alpha_map) { + if (!alpha_mask && pxm->alpha_map) error("Invalid alpha mode: both pxm->alpha_map and alpha_mask are white"); - return GFX_ERROR; - } if (alpha_mask) { while (!(alpha_mask & 0xff)) { @@ -319,7 +317,6 @@ int gfx_crossblit_pixmap(gfx_mode_t *mode, gfx_pixmap_t *pxm, int priority, rect 0, 0, 0, 0); else { error("Invalid mode->bytespp: %d", mode->bytespp); - return GFX_ERROR; } } else { // priority if (bpp > 0 && bpp < 5) @@ -328,11 +325,8 @@ int gfx_crossblit_pixmap(gfx_mode_t *mode, gfx_pixmap_t *pxm, int priority, rect priority_pos, priority_line_width, priority_skip, priority); else { error("Invalid mode->bytespp: %d", mode->bytespp); - return GFX_ERROR; } } - - return GFX_OK; } } // End of namespace Sci diff --git a/engines/sci/gfx/gfx_system.h b/engines/sci/gfx/gfx_system.h index 21ce9a8175..9bc2c82605 100644 --- a/engines/sci/gfx/gfx_system.h +++ b/engines/sci/gfx/gfx_system.h @@ -223,14 +223,6 @@ struct gfx_pixmap_t { /** @name Constant values * @{ */ -/** Return values */ -enum gfx_return_value_t { - GFX_OK = 0, /**< Indicates "operation successful" */ - GFX_ERROR = -1, /**< Indicates "operation failed" */ - GFX_FATAL = -2 /**< Fatal error: Used by graphics drivers to indicate - that they were unable to do anything useful */ -}; - /** Map masks */ enum gfx_map_mask_t { GFX_MASK_NONE = 0, diff --git a/engines/sci/gfx/gfx_tools.h b/engines/sci/gfx/gfx_tools.h index 69e82a92d6..a17760f16d 100644 --- a/engines/sci/gfx/gfx_tools.h +++ b/engines/sci/gfx/gfx_tools.h @@ -200,10 +200,8 @@ void gfx_xlate_pixmap(gfx_pixmap_t *pxm, gfx_mode_t *mode); * @param[in] priority_skip Amount of bytes allocated by each priority * value * @param[in] flags Any crossblit flags - * @return GFX_OK, or GFX_ERROR if the specified mode - * was invalid or unsupported */ -int gfx_crossblit_pixmap(gfx_mode_t *mode, gfx_pixmap_t *pxm, int priority, +void gfx_crossblit_pixmap(gfx_mode_t *mode, gfx_pixmap_t *pxm, int priority, rect_t src_coords, rect_t dest_coords, byte *dest, int dest_line_width, byte *priority_dest, int priority_line_width, int priority_skip, int flags); diff --git a/engines/sci/gfx/gfx_widgets.cpp b/engines/sci/gfx/gfx_widgets.cpp index 0bea12fca8..3d94bf1342 100644 --- a/engines/sci/gfx/gfx_widgets.cpp +++ b/engines/sci/gfx/gfx_widgets.cpp @@ -537,10 +537,7 @@ GfxView::GfxView(GfxState *state, Common::Point pos_, int view_, int loop_, int error("Attempt to create view widget with NULL state"); } - if (gfxop_get_cel_parameters(state, view_, loop_, cel_, &width, &height, &offset)) { - error("Attempt to retrieve cel parameters for (%d/%d/%d) failed (Maybe the values weren't checked beforehand?)", - view_, cel_, loop_); - } + gfxop_get_cel_parameters(state, view_, loop_, cel_, &width, &height, &offset); _pos = pos_; _color.mask = ((priority < 0) ? 0 : GFX_MASK_PRIORITY) | ((control < 0) ? 0 : GFX_MASK_CONTROL); @@ -743,14 +740,10 @@ GfxDynView::GfxDynView(GfxState *state, Common::Point pos_, int z_, int view_, i _type = GFXW_DYN_VIEW; - if (!state) { + if (!state) error("Attempt to create view widget with NULL state"); - } - if (gfxop_get_cel_parameters(state, view_, loop_, cel_, &width, &height, &offset)) { - error("Attempt to retrieve cel parameters for (%d/%d/%d) failed (Maybe the values weren't checked beforehand?)", - view_, cel_, loop_); - } + gfxop_get_cel_parameters(state, view_, loop_, cel_, &width, &height, &offset); _pos = pos_; _color.mask = ((priority < 0) ? 0 : GFX_MASK_PRIORITY) | ((control < 0) ? 0 : GFX_MASK_CONTROL); diff --git a/engines/sci/gfx/operations.cpp b/engines/sci/gfx/operations.cpp index 2da129ca69..8d15b51696 100644 --- a/engines/sci/gfx/operations.cpp +++ b/engines/sci/gfx/operations.cpp @@ -1059,8 +1059,10 @@ static void _gfxop_set_pointer(GfxState *state, gfx_pixmap_t *pxm, Common::Point } void gfxop_set_pointer_cursor(GfxState *state, int nr) { - if (nr == GFXOP_NO_POINTER) + if (nr == GFXOP_NO_POINTER) { _gfxop_set_pointer(state, NULL, NULL); + return; + } gfx_pixmap_t *new_pointer = state->gfxResMan->getCursor(nr); @@ -1502,8 +1504,7 @@ int gfxop_lookup_view_get_loops(GfxState *state, int nr) { view = state->gfxResMan->getView(nr, &loop, &cel, 0); if (!view) { - warning("[GFX] Attempt to retrieve number of loops from invalid view %d", nr); - return 0; + error("[GFX] Attempt to retrieve number of loops from invalid view %d", nr); } return view->loops_nr; @@ -1525,27 +1526,21 @@ int gfxop_lookup_view_get_cels(GfxState *state, int nr, int loop) { return view->loops[real_loop].cels_nr; } -int gfxop_check_cel(GfxState *state, int nr, int *loop, int *cel) { +void gfxop_check_cel(GfxState *state, int nr, int *loop, int *cel) { gfxr_view_t *testView = state->gfxResMan->getView(nr, loop, cel, 0); - if (!testView) { - warning("[GFX] Attempt to verify loop/cel values for invalid view %d", nr); - return GFX_ERROR; - } - - return GFX_OK; + if (!testView) + error("[GFX] Attempt to verify loop/cel values for invalid view %d", nr); } -int gfxop_overflow_cel(GfxState *state, int nr, int *loop, int *cel) { +void gfxop_overflow_cel(GfxState *state, int nr, int *loop, int *cel) { int loop_v = *loop; int cel_v = *cel; gfxr_view_t *testView = state->gfxResMan->getView(nr, &loop_v, &cel_v, 0); - if (!testView) { - warning("[GFX] Attempt to verify loop/cel values for invalid view %d", nr); - return GFX_ERROR; - } + if (!testView) + error("[GFX] Attempt to verify loop/cel values for invalid view %d", nr); if (loop_v != *loop) *loop = 0; @@ -1553,28 +1548,22 @@ int gfxop_overflow_cel(GfxState *state, int nr, int *loop, int *cel) { if (loop_v != *loop || cel_v != *cel) *cel = 0; - - return GFX_OK; } -int gfxop_get_cel_parameters(GfxState *state, int nr, int loop, int cel, int *width, int *height, Common::Point *offset) { +void gfxop_get_cel_parameters(GfxState *state, int nr, int loop, int cel, int *width, int *height, Common::Point *offset) { gfxr_view_t *view = NULL; gfx_pixmap_t *pxm = NULL; view = state->gfxResMan->getView(nr, &loop, &cel, 0); - if (!view) { - warning("[GFX] Attempt to get cel parameters for invalid view %d", nr); - return GFX_ERROR; - } + if (!view) + error("[GFX] Attempt to get cel parameters for invalid view %d", nr); pxm = view->loops[loop].cels[cel]; *width = pxm->index_width; *height = pxm->index_height; offset->x = pxm->xoffset; offset->y = pxm->yoffset; - - return GFX_OK; } static void _gfxop_draw_cel_buffer(GfxState *state, int nr, int loop, int cel, Common::Point pos, gfx_color_t color, int static_buf, int palette) { @@ -1706,12 +1695,12 @@ int gfxop_get_font_height(GfxState *state, int font_nr) { font = state->gfxResMan->getFont(font_nr); if (!font) - return GFX_ERROR; + error("gfxop_get_font_height(): Font number %d not found", font_nr); return font->line_height; } -int gfxop_get_text_params(GfxState *state, int font_nr, const char *text, int maxwidth, int *width, int *height, int text_flags, +void gfxop_get_text_params(GfxState *state, int font_nr, const char *text, int maxwidth, int *width, int *height, int text_flags, int *lines_nr, int *lineheight, int *lastline_width) { Common::Array<TextFragment> fragments; bool textsplits; @@ -1719,11 +1708,8 @@ int gfxop_get_text_params(GfxState *state, int font_nr, const char *text, int ma font = state->gfxResMan->getFont(font_nr); - if (!font) { + if (!font) error("Attempt to calculate text size with invalid font #%d", font_nr); - *width = *height = 0; - return GFX_ERROR; - } #ifdef CUSTOM_GRAPHICS_OPTIONS textsplits = gfxr_font_calculate_size(fragments, font, maxwidth, text, width, height, lineheight, lastline_width, @@ -1732,16 +1718,11 @@ int gfxop_get_text_params(GfxState *state, int font_nr, const char *text, int ma textsplits = gfxr_font_calculate_size(fragments, font, maxwidth, text, width, height, lineheight, lastline_width, text_flags); #endif - if (!textsplits) { + if (!textsplits) error("Could not calculate text size"); - *width = *height = 0; - return GFX_ERROR; - } if (lines_nr) *lines_nr = fragments.size(); - - return GFX_OK; } TextHandle *gfxop_new_text(GfxState *state, int font_nr, const Common::String &text, int maxwidth, gfx_alignment_t halign, diff --git a/engines/sci/gfx/operations.h b/engines/sci/gfx/operations.h index 359b437d94..7ca714aaed 100644 --- a/engines/sci/gfx/operations.h +++ b/engines/sci/gfx/operations.h @@ -452,9 +452,8 @@ int gfxop_lookup_view_get_cels(GfxState *state, int nr, int loop); * @param[in] nr Number of the view to use * @param[in] loop Pointer to the variable storing the loop number to verify * @param[in] cel Pointer to the variable storing the cel number to check - * @return GFX_OK or GFX_ERROR if the view didn't exist */ -int gfxop_check_cel(GfxState *state, int nr, int *loop, int *cel); +void gfxop_check_cel(GfxState *state, int nr, int *loop, int *cel); /** * Resets loop/cel values to zero if they have become invalid. @@ -463,11 +462,8 @@ int gfxop_check_cel(GfxState *state, int nr, int *loop, int *cel); * @param[in] nr Number of the view to use * @param[in] loop Pointer to the variable storing the loop number to verify * @param[in] cel Pointer to the variable storing the cel number to check - * @return GFX_OK or GFX_ERROR if the view didn't exist *loop is - * clipped first, then *cel. The resulting setup will be a - * valid view configuration. */ -int gfxop_overflow_cel(GfxState *state, int nr, int *loop, int *cel); +void gfxop_overflow_cel(GfxState *state, int nr, int *loop, int *cel); /** * Retrieves the width and height of a cel. @@ -479,10 +475,8 @@ int gfxop_overflow_cel(GfxState *state, int nr, int *loop, int *cel); * @param[in] width The variable the width will be stored in * @param[in] height The variable the height will be stored in * @param[in] offset The variable the cel's x/y offset will be stored in - * @return GFX_OK if the lookup succeeded, GFX_ERROR if the - * nr/loop/cel combination was invalid */ -int gfxop_get_cel_parameters(GfxState *state, int nr, int loop, int cel, +void gfxop_get_cel_parameters(GfxState *state, int nr, int loop, int cel, int *width, int *height, Common::Point *offset); /** @@ -582,7 +576,7 @@ void gfxop_add_to_pic(GfxState *state, int nr, int flags, int default_palette); * * @param[in] state The state to work on * @param[in] font_nr Number of the font to inspect - * @return GFX_ERROR, GFX_FATAL, or the font line height + * @return The font line height */ int gfxop_get_font_height(GfxState *state, int font_nr); @@ -601,9 +595,8 @@ int gfxop_get_font_height(GfxState *state, int font_nr); * @param[out] lineheight Pixel height (SCI scale) of each text line * @param[out] lastline_width Pixel offset (SCI scale) of the space after * the last character in the last line - * @return GFX_OK or GFX_ERROR if the font didn't exist */ -int gfxop_get_text_params(GfxState *state, int font_nr, const char *text, +void gfxop_get_text_params(GfxState *state, int font_nr, const char *text, int maxwidth, int *width, int *height, int flags, int *lines_nr, int *lineheight, int *lastline_width); diff --git a/engines/sci/gfx/res_font.cpp b/engines/sci/gfx/res_font.cpp index cddbade845..fd2cae08e6 100644 --- a/engines/sci/gfx/res_font.cpp +++ b/engines/sci/gfx/res_font.cpp @@ -35,7 +35,7 @@ extern int font_counter; #define FONT_HEIGHT_OFFSET 4 #define FONT_MAXCHAR_OFFSET 2 -static int calc_char(byte *dest, int total_width, int total_height, byte *src, int size) { +static void calc_char(byte *dest, int total_width, int total_height, byte *src, int size) { int width = src[0]; int height = src[1]; int byte_width = (width + 7) >> 3; @@ -45,12 +45,10 @@ static int calc_char(byte *dest, int total_width, int total_height, byte *src, i if ((width >> 3) > total_width || height > total_height) { error("Weird character: width=%d/%d, height=%d/%d", width, total_width, height, total_height); - return GFX_ERROR; } if (byte_width * height + 2 > size) { error("Character extends to %d of %d allowed bytes", byte_width * height + 2, size); - return GFX_ERROR; } for (y = 0; y < height; y++) { @@ -58,8 +56,6 @@ static int calc_char(byte *dest, int total_width, int total_height, byte *src, i src += byte_width; dest += total_width; } - - return GFX_OK; } gfx_bitmap_font_t *gfxr_read_font(int id, byte *resource, int size) { @@ -129,11 +125,7 @@ gfx_bitmap_font_t *gfxr_read_font(int id, byte *resource, int size) { for (i = 0; i < chars_nr; i++) { int offset = READ_LE_UINT16(resource + (i << 1) + 6); - if (calc_char(font->data + (font->char_size * i), font->row_size, max_height, resource + offset, size - offset)) { - error("Problem occured in font %04x, char %d/%d", id, i, chars_nr); - gfxr_free_font(font); - return NULL; - } + calc_char(font->data + (font->char_size * i), font->row_size, max_height, resource + offset, size - offset); } return font; |
