mirror of https://github.com/OpenRCT2/OpenRCT2.git
refactor clip_drawpixelinfo to not allocate memory
This commit is contained in:
parent
cdee534eb1
commit
b7484db239
|
@ -338,57 +338,53 @@ void gfx_redraw_screen_rect(short left, short top, short right, short bottom)
|
|||
* height (dx)
|
||||
* drawpixelinfo (edi)
|
||||
*/
|
||||
rct_drawpixelinfo* clip_drawpixelinfo(rct_drawpixelinfo* dpi, int left, int width, int top, int height)
|
||||
bool clip_drawpixelinfo(rct_drawpixelinfo *dst, rct_drawpixelinfo *src, int x, int y, int width, int height)
|
||||
{
|
||||
rct_drawpixelinfo* newDrawPixelInfo = rct2_malloc(sizeof(rct_drawpixelinfo));
|
||||
int right = x + width;
|
||||
int bottom = y + height;
|
||||
|
||||
int right = left + width;
|
||||
int bottom = top + height;
|
||||
dst->bits = src->bits;
|
||||
dst->x = src->x;
|
||||
dst->y = src->y;
|
||||
dst->width = src->width;
|
||||
dst->height = src->height;
|
||||
dst->pitch = src->pitch;
|
||||
dst->zoom_level = 0;
|
||||
|
||||
newDrawPixelInfo->bits = dpi->bits;
|
||||
newDrawPixelInfo->x = dpi->x;
|
||||
newDrawPixelInfo->y = dpi->y;
|
||||
newDrawPixelInfo->width = dpi->width;
|
||||
newDrawPixelInfo->height = dpi->height;
|
||||
newDrawPixelInfo->pitch = dpi->pitch;
|
||||
newDrawPixelInfo->zoom_level = 0;
|
||||
|
||||
if (left > newDrawPixelInfo->x) {
|
||||
uint16 clippedFromLeft = left - newDrawPixelInfo->x;
|
||||
newDrawPixelInfo->width -= clippedFromLeft;
|
||||
newDrawPixelInfo->x = left;
|
||||
newDrawPixelInfo->pitch += clippedFromLeft;
|
||||
newDrawPixelInfo->bits += clippedFromLeft;
|
||||
if (x > dst->x) {
|
||||
uint16 clippedFromLeft = x - dst->x;
|
||||
dst->width -= clippedFromLeft;
|
||||
dst->x = x;
|
||||
dst->pitch += clippedFromLeft;
|
||||
dst->bits += clippedFromLeft;
|
||||
}
|
||||
|
||||
int stickOutWidth = newDrawPixelInfo->x + newDrawPixelInfo->width - right;
|
||||
int stickOutWidth = dst->x + dst->width - right;
|
||||
if (stickOutWidth > 0) {
|
||||
newDrawPixelInfo->width -= stickOutWidth;
|
||||
newDrawPixelInfo->pitch += stickOutWidth;
|
||||
dst->width -= stickOutWidth;
|
||||
dst->pitch += stickOutWidth;
|
||||
}
|
||||
|
||||
if (top > newDrawPixelInfo->y) {
|
||||
uint16 clippedFromTop = top - newDrawPixelInfo->y;
|
||||
newDrawPixelInfo->height -= clippedFromTop;
|
||||
newDrawPixelInfo->y = top;
|
||||
uint32 bitsPlus = (newDrawPixelInfo->pitch + newDrawPixelInfo->width) * clippedFromTop;
|
||||
newDrawPixelInfo->bits += bitsPlus;
|
||||
if (y > dst->y) {
|
||||
uint16 clippedFromTop = y - dst->y;
|
||||
dst->height -= clippedFromTop;
|
||||
dst->y = y;
|
||||
uint32 bitsPlus = (dst->pitch + dst->width) * clippedFromTop;
|
||||
dst->bits += bitsPlus;
|
||||
}
|
||||
|
||||
int bp = newDrawPixelInfo->y + newDrawPixelInfo->height - bottom;
|
||||
int bp = dst->y + dst->height - bottom;
|
||||
if (bp > 0) {
|
||||
newDrawPixelInfo->height -= bp;
|
||||
dst->height -= bp;
|
||||
}
|
||||
|
||||
if (newDrawPixelInfo->width > 0 && newDrawPixelInfo->height > 0) {
|
||||
newDrawPixelInfo->x -= left;
|
||||
newDrawPixelInfo->y -= top;
|
||||
|
||||
return newDrawPixelInfo;
|
||||
if (dst->width > 0 && dst->height > 0) {
|
||||
dst->x -= x;
|
||||
dst->y -= y;
|
||||
return true;
|
||||
}
|
||||
|
||||
rct2_free(newDrawPixelInfo);
|
||||
return NULL;
|
||||
return false;
|
||||
}
|
||||
|
||||
/***
|
||||
|
|
|
@ -93,7 +93,7 @@ extern rct_g1_element *g1Elements;
|
|||
extern rct_gx g2;
|
||||
|
||||
//
|
||||
rct_drawpixelinfo* clip_drawpixelinfo(rct_drawpixelinfo* dpi, int left, int width, int top, int height);
|
||||
bool clip_drawpixelinfo(rct_drawpixelinfo *dst, rct_drawpixelinfo *src, int x, int y, int width, int height);
|
||||
void gfx_set_dirty_blocks(sint16 left, sint16 top, sint16 right, sint16 bottom);
|
||||
void gfx_draw_all_dirty_blocks();
|
||||
void gfx_redraw_screen_rect(short left, short top, short right, short bottom);
|
||||
|
|
36
src/object.c
36
src/object.c
|
@ -859,8 +859,8 @@ static bool object_type_small_scenery_test(void *objectEntry)
|
|||
static void object_type_small_scenery_paint(void *objectEntry, rct_drawpixelinfo *dpi, sint32 x, sint32 y)
|
||||
{
|
||||
rct_scenery_entry* sceneryEntry = (rct_scenery_entry*)objectEntry;
|
||||
dpi = clip_drawpixelinfo(dpi, x - 56, 112, y - 56, 112);
|
||||
if (dpi == NULL) {
|
||||
rct_drawpixelinfo clipDPI;
|
||||
if (!clip_drawpixelinfo(&clipDPI, dpi, x - 56, y - 56, 112, 112)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -880,14 +880,14 @@ static void object_type_small_scenery_paint(void *objectEntry, rct_drawpixelinfo
|
|||
}
|
||||
}
|
||||
|
||||
gfx_draw_sprite(dpi, imageId, x, y, 0);
|
||||
gfx_draw_sprite(&clipDPI, imageId, x, y, 0);
|
||||
if (sceneryEntry->small_scenery.flags & SMALL_SCENERY_FLAG10) {
|
||||
imageId = sceneryEntry->image + 0x44500004;
|
||||
if (sceneryEntry->small_scenery.flags & SMALL_SCENERY_FLAG_HAS_SECONDARY_COLOUR) {
|
||||
imageId |= 0x92000000;
|
||||
}
|
||||
|
||||
gfx_draw_sprite(dpi, imageId, x, y, 0);
|
||||
gfx_draw_sprite(&clipDPI, imageId, x, y, 0);
|
||||
}
|
||||
|
||||
if (sceneryEntry->small_scenery.flags & SMALL_SCENERY_FLAG8) {
|
||||
|
@ -896,10 +896,8 @@ static void object_type_small_scenery_paint(void *objectEntry, rct_drawpixelinfo
|
|||
imageId |= 0x92000000;
|
||||
}
|
||||
|
||||
gfx_draw_sprite(dpi, imageId, x, y, 0);
|
||||
gfx_draw_sprite(&clipDPI, imageId, x, y, 0);
|
||||
}
|
||||
|
||||
rct2_free(dpi);
|
||||
}
|
||||
|
||||
static rct_string_id object_type_small_scenery_desc(void *objectEntry)
|
||||
|
@ -1059,8 +1057,8 @@ static bool object_type_wall_test(void *objectEntry)
|
|||
static void object_type_wall_paint(void *objectEntry, rct_drawpixelinfo *dpi, sint32 x, sint32 y)
|
||||
{
|
||||
rct_scenery_entry* sceneryEntry = (rct_scenery_entry*)objectEntry;
|
||||
dpi = clip_drawpixelinfo(dpi, x - 56, 112, y - 56, 112);
|
||||
if (dpi == NULL) {
|
||||
rct_drawpixelinfo clipDPI;
|
||||
if (!clip_drawpixelinfo(&clipDPI, dpi, x - 56, y - 56, 112, 112)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1072,17 +1070,15 @@ static void object_type_wall_paint(void *objectEntry, rct_drawpixelinfo *dpi, si
|
|||
|
||||
x = 70;
|
||||
y = sceneryEntry->wall.height * 2 + 72;
|
||||
gfx_draw_sprite(dpi, imageId, x, y, 0);
|
||||
gfx_draw_sprite(&clipDPI, imageId, x, y, 0);
|
||||
|
||||
if (sceneryEntry->wall.flags & WALL_SCENERY_FLAG2){
|
||||
imageId = sceneryEntry->image + 0x44500006;
|
||||
gfx_draw_sprite(dpi, imageId, x, y, 0);
|
||||
gfx_draw_sprite(&clipDPI, imageId, x, y, 0);
|
||||
} else if (sceneryEntry->wall.flags & WALL_SCENERY_FLAG5){
|
||||
imageId++;
|
||||
gfx_draw_sprite(dpi, imageId, x, y, 0);
|
||||
gfx_draw_sprite(&clipDPI, imageId, x, y, 0);
|
||||
}
|
||||
|
||||
rct2_free(dpi);
|
||||
}
|
||||
|
||||
static rct_string_id object_type_wall_desc(void *objectEntry)
|
||||
|
@ -1428,17 +1424,15 @@ static void object_type_park_entrance_paint(void *objectEntry, rct_drawpixelinfo
|
|||
{
|
||||
rct_entrance_type *entranceType = (rct_entrance_type*)objectEntry;
|
||||
|
||||
dpi = clip_drawpixelinfo(dpi, x - 56, 112, y - 56, 112);
|
||||
if (dpi == NULL) {
|
||||
rct_drawpixelinfo clipDPI;
|
||||
if (!clip_drawpixelinfo(&clipDPI, dpi, x - 56, y - 56, 112, 112)) {
|
||||
return;
|
||||
}
|
||||
|
||||
int imageId = entranceType->image_id;
|
||||
gfx_draw_sprite(dpi, imageId + 1, 24, 68, 0);
|
||||
gfx_draw_sprite(dpi, imageId, 56, 84, 0);
|
||||
gfx_draw_sprite(dpi, imageId + 2, 88, 100, 0);
|
||||
|
||||
rct2_free(dpi);
|
||||
gfx_draw_sprite(&clipDPI, imageId + 1, 24, 68, 0);
|
||||
gfx_draw_sprite(&clipDPI, imageId, 56, 84, 0);
|
||||
gfx_draw_sprite(&clipDPI, imageId + 2, 88, 100, 0);
|
||||
}
|
||||
|
||||
static rct_string_id object_type_park_entrance_desc(void *objectEntry)
|
||||
|
|
|
@ -537,8 +537,10 @@ static void window_game_bottom_toolbar_draw_news_item(rct_drawpixelinfo *dpi, rc
|
|||
if (newsItem->flags & 1)
|
||||
break;
|
||||
|
||||
rct_drawpixelinfo* cliped_dpi = clip_drawpixelinfo(dpi, x + 1, 22, y + 1, 22);
|
||||
if (!cliped_dpi) break;
|
||||
rct_drawpixelinfo cliped_dpi;
|
||||
if (!clip_drawpixelinfo(&cliped_dpi, dpi, x + 1, y + 1, 22, 22)) {
|
||||
break;
|
||||
}
|
||||
|
||||
rct_peep* peep = GET_PEEP(newsItem->assoc);
|
||||
int clip_x = 10, clip_y = 19;
|
||||
|
@ -556,28 +558,26 @@ static void window_game_bottom_toolbar_draw_news_item(rct_drawpixelinfo *dpi, rc
|
|||
uint32 image_id = image_id_base;
|
||||
image_id |= 0xA0000000 | (peep->tshirt_colour << 19) | (peep->trousers_colour << 24);
|
||||
|
||||
gfx_draw_sprite(cliped_dpi, image_id, clip_x, clip_y, 0);
|
||||
gfx_draw_sprite(&cliped_dpi, image_id, clip_x, clip_y, 0);
|
||||
|
||||
if (image_id_base >= 0x2A1D && image_id_base < 0x2A3D){
|
||||
image_id_base += 32;
|
||||
image_id_base |= 0x20000000 | (peep->balloon_colour << 19);
|
||||
|
||||
gfx_draw_sprite(cliped_dpi, image_id_base, clip_x, clip_y, 0);
|
||||
gfx_draw_sprite(&cliped_dpi, image_id_base, clip_x, clip_y, 0);
|
||||
}
|
||||
else if (image_id_base >= 0x2BBD && image_id_base < 0x2BDD){
|
||||
image_id_base += 32;
|
||||
image_id_base |= 0x20000000 | (peep->umbrella_colour << 19);
|
||||
|
||||
gfx_draw_sprite(cliped_dpi, image_id_base, clip_x, clip_y, 0);
|
||||
gfx_draw_sprite(&cliped_dpi, image_id_base, clip_x, clip_y, 0);
|
||||
}
|
||||
else if (image_id_base >= 0x29DD && image_id_base < 0x29FD){
|
||||
image_id_base += 32;
|
||||
image_id_base |= 0x20000000 | (peep->hat_colour << 19);
|
||||
|
||||
gfx_draw_sprite(cliped_dpi, image_id_base, clip_x, clip_y, 0);
|
||||
gfx_draw_sprite(&cliped_dpi, image_id_base, clip_x, clip_y, 0);
|
||||
}
|
||||
|
||||
rct2_free(cliped_dpi);
|
||||
break;
|
||||
case NEWS_ITEM_MONEY:
|
||||
gfx_draw_sprite(dpi, SPR_FINANCE, x, y, 0);
|
||||
|
|
|
@ -819,8 +819,10 @@ void window_guest_overview_tab_paint(rct_window* w, rct_drawpixelinfo* dpi){
|
|||
int y = widget->top + 1 + w->y;
|
||||
if (w->page == WINDOW_GUEST_OVERVIEW) height++;
|
||||
|
||||
rct_drawpixelinfo* clip_dpi = clip_drawpixelinfo(dpi, x, width, y, height );
|
||||
if (!clip_dpi) return;
|
||||
rct_drawpixelinfo clip_dpi;
|
||||
if (!clip_drawpixelinfo(&clip_dpi, dpi, x, y, width, height)) {
|
||||
return;
|
||||
}
|
||||
|
||||
x = 14;
|
||||
y = 20;
|
||||
|
@ -841,30 +843,28 @@ void window_guest_overview_tab_paint(rct_window* w, rct_drawpixelinfo* dpi){
|
|||
ebx += eax;
|
||||
|
||||
int sprite_id = ebx | (peep->tshirt_colour << 19) | (peep->trousers_colour << 24) | 0xA0000000;
|
||||
gfx_draw_sprite( clip_dpi, sprite_id, x, y, 0);
|
||||
gfx_draw_sprite(&clip_dpi, sprite_id, x, y, 0);
|
||||
|
||||
// If holding a balloon
|
||||
if (ebx >= 0x2A1D && ebx < 0x2A3D){
|
||||
ebx += 32;
|
||||
ebx |= (peep->balloon_colour << 19) | 0x20000000;
|
||||
gfx_draw_sprite( clip_dpi, ebx, x, y, 0);
|
||||
gfx_draw_sprite(&clip_dpi, ebx, x, y, 0);
|
||||
}
|
||||
|
||||
// If holding umbrella
|
||||
if (ebx >= 0x2BBD && ebx < 0x2BDD){
|
||||
ebx += 32;
|
||||
ebx |= (peep->umbrella_colour << 19) | 0x20000000;
|
||||
gfx_draw_sprite(clip_dpi, ebx, x, y, 0);
|
||||
gfx_draw_sprite(&clip_dpi, ebx, x, y, 0);
|
||||
}
|
||||
|
||||
// If wearing hat
|
||||
if (ebx >= 0x29DD && ebx < 0x29FD){
|
||||
ebx += 32;
|
||||
ebx |= (peep->hat_colour << 19) | 0x20000000;
|
||||
gfx_draw_sprite( clip_dpi, ebx, x, y, 0);
|
||||
gfx_draw_sprite(&clip_dpi, ebx, x, y, 0);
|
||||
}
|
||||
|
||||
rct2_free(clip_dpi);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1016,14 +1016,15 @@ void window_guest_overview_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
|||
int left = widget->left + 2 + w->x;
|
||||
int top = widget->top + w->y;
|
||||
int height = widget->bottom - widget->top;
|
||||
rct_drawpixelinfo* dpi_marquee = clip_drawpixelinfo(dpi, left, width, top, height);
|
||||
rct_drawpixelinfo dpi_marquee;
|
||||
if (!clip_drawpixelinfo(&dpi_marquee, dpi, left, top, width, height)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!dpi_marquee)return;
|
||||
int i = 0;
|
||||
for (; i < PEEP_MAX_THOUGHTS; ++i){
|
||||
if (peep->thoughts[i].type == PEEP_THOUGHT_TYPE_NONE){
|
||||
w->list_information_type = 0;
|
||||
rct2_free(dpi_marquee);
|
||||
return;
|
||||
}
|
||||
if (peep->thoughts[i].var_2 == 1){ // If a fresh thought
|
||||
|
@ -1032,7 +1033,6 @@ void window_guest_overview_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
|||
}
|
||||
if (i == PEEP_MAX_THOUGHTS){
|
||||
w->list_information_type = 0;
|
||||
rct2_free(dpi_marquee);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1043,9 +1043,7 @@ void window_guest_overview_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
|||
RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 8, uint16) = 0;
|
||||
|
||||
x = widget->right - widget->left - w->list_information_type;
|
||||
gfx_draw_string_left(dpi_marquee, 1193, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, 0);
|
||||
|
||||
rct2_free(dpi_marquee);
|
||||
gfx_draw_string_left(&dpi_marquee, 1193, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -328,8 +328,10 @@ static void window_news_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int s
|
|||
case NEWS_ITEM_PEEP:
|
||||
case NEWS_ITEM_PEEP_ON_RIDE:
|
||||
{
|
||||
rct_drawpixelinfo* cliped_dpi = clip_drawpixelinfo(dpi, x + 1, 22, yy + 1, 22);
|
||||
if (!cliped_dpi) break;
|
||||
rct_drawpixelinfo cliped_dpi;
|
||||
if (!clip_drawpixelinfo(&cliped_dpi, dpi, x + 1, yy + 1, 22, 22)) {
|
||||
break;
|
||||
}
|
||||
|
||||
rct_peep* peep = GET_PEEP(newsItem->assoc);
|
||||
int clip_x = 10, clip_y = 19;
|
||||
|
@ -348,9 +350,7 @@ static void window_news_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int s
|
|||
image_id += 0xA0000001;
|
||||
image_id |= (peep->tshirt_colour << 19) | (peep->trousers_colour << 24);
|
||||
|
||||
gfx_draw_sprite(cliped_dpi, image_id, clip_x, clip_y, 0);
|
||||
|
||||
rct2_free(cliped_dpi);
|
||||
gfx_draw_sprite(&cliped_dpi, image_id, clip_x, clip_y, 0);
|
||||
break;
|
||||
}
|
||||
case NEWS_ITEM_MONEY:
|
||||
|
|
|
@ -1028,9 +1028,10 @@ static void window_ride_draw_tab_vehicle(rct_drawpixelinfo *dpi, rct_window *w)
|
|||
x += w->x;
|
||||
y += w->y;
|
||||
|
||||
dpi = clip_drawpixelinfo(dpi, x, width, y, height);
|
||||
if (dpi == NULL)
|
||||
rct_drawpixelinfo clipDPI;
|
||||
if (!clip_drawpixelinfo(&clipDPI, dpi, x, y, width, height)) {
|
||||
return;
|
||||
}
|
||||
|
||||
x = (widget->right - widget->left) / 2;
|
||||
y = (widget->bottom - widget->top) - 12;
|
||||
|
@ -1042,13 +1043,13 @@ static void window_ride_draw_tab_vehicle(rct_drawpixelinfo *dpi, rct_window *w)
|
|||
|
||||
rideEntry = ride_get_entry(ride);
|
||||
if (rideEntry->flags & RIDE_ENTRY_FLAG_0) {
|
||||
dpi->zoom_level = 1;
|
||||
dpi->width *= 2;
|
||||
dpi->height *= 2;
|
||||
clipDPI.zoom_level = 1;
|
||||
clipDPI.width *= 2;
|
||||
clipDPI.height *= 2;
|
||||
x *= 2;
|
||||
y *= 2;
|
||||
dpi->x *= 2;
|
||||
dpi->y *= 2;
|
||||
clipDPI.x *= 2;
|
||||
clipDPI.y *= 2;
|
||||
}
|
||||
|
||||
rct_ride_type_vehicle* rideVehicleEntry = &rideEntry->vehicles[trainLayout[rideEntry->tab_vehicle]];
|
||||
|
@ -1066,8 +1067,7 @@ static void window_ride_draw_tab_vehicle(rct_drawpixelinfo *dpi, rct_window *w)
|
|||
spriteIndex |= (vehicleColour.additional_1 << 24) | (vehicleColour.main << 19);
|
||||
spriteIndex |= 0x80000000;
|
||||
|
||||
gfx_draw_sprite(dpi, spriteIndex, x, y, vehicleColour.additional_2);
|
||||
rct2_free(dpi);
|
||||
gfx_draw_sprite(&clipDPI, spriteIndex, x, y, vehicleColour.additional_2);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4208,7 +4208,7 @@ static void window_ride_colour_invalidate(rct_window *w)
|
|||
*/
|
||||
static void window_ride_colour_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
||||
{
|
||||
rct_drawpixelinfo *clippedDpi;
|
||||
rct_drawpixelinfo clippedDpi;
|
||||
rct_widget *widget;
|
||||
rct_ride *ride;
|
||||
rct_ride_type *rideEntry;
|
||||
|
@ -4265,11 +4265,15 @@ static void window_ride_colour_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
|||
trackColour = ride_get_track_colour(ride, 0);
|
||||
widget = &w->widgets[WIDX_ENTRANCE_PREVIEW];
|
||||
if (widget->type != WWT_EMPTY) {
|
||||
clippedDpi = clip_drawpixelinfo(
|
||||
dpi, w->x + widget->left + 1, widget->right - widget->left, w->y + widget->top + 1, widget->bottom - widget->top
|
||||
);
|
||||
if (clippedDpi != NULL) {
|
||||
gfx_clear(clippedDpi, 0x0C0C0C0C);
|
||||
if (clip_drawpixelinfo(
|
||||
&clippedDpi,
|
||||
dpi,
|
||||
w->x + widget->left + 1,
|
||||
w->y + widget->top + 1,
|
||||
widget->right - widget->left,
|
||||
widget->bottom - widget->top
|
||||
)) {
|
||||
gfx_clear(&clippedDpi, 0x0C0C0C0C);
|
||||
|
||||
if (ride->entrance_style != RIDE_ENTRANCE_STYLE_NONE) {
|
||||
const rct_ride_entrance_definition *entranceStyle = &RideEntranceDefinitions[ride->entrance_style];
|
||||
|
@ -4284,17 +4288,15 @@ static void window_ride_colour_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
|||
spriteIndex += RideEntranceDefinitions[ride->entrance_style].sprite_index;
|
||||
|
||||
// Back
|
||||
gfx_draw_sprite(clippedDpi, spriteIndex, 34, 20, terniaryColour);
|
||||
gfx_draw_sprite(&clippedDpi, spriteIndex, 34, 20, terniaryColour);
|
||||
|
||||
// Front
|
||||
gfx_draw_sprite(clippedDpi, spriteIndex + 4, 34, 20, terniaryColour);
|
||||
gfx_draw_sprite(&clippedDpi, spriteIndex + 4, 34, 20, terniaryColour);
|
||||
|
||||
// ?
|
||||
if (terniaryColour != 0)
|
||||
gfx_draw_sprite(clippedDpi, ((spriteIndex + 20) & 0x7FFFF) + terniaryColour, 34, 20, terniaryColour);
|
||||
gfx_draw_sprite(&clippedDpi, ((spriteIndex + 20) & 0x7FFFF) + terniaryColour, 34, 20, terniaryColour);
|
||||
}
|
||||
|
||||
rct2_free(clippedDpi);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2094,7 +2094,7 @@ static void window_ride_construction_invalidate(rct_window *w)
|
|||
*/
|
||||
static void window_ride_construction_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
||||
{
|
||||
rct_drawpixelinfo *clipdpi;
|
||||
rct_drawpixelinfo clipdpi;
|
||||
rct_widget *widget;
|
||||
int x, y, width, height;
|
||||
|
||||
|
@ -2113,10 +2113,8 @@ static void window_ride_construction_paint(rct_window *w, rct_drawpixelinfo *dpi
|
|||
y = w->y + widget->top + 1;
|
||||
width = widget->right - widget->left - 1;
|
||||
height = widget->bottom - widget->top - 1;
|
||||
clipdpi = clip_drawpixelinfo(dpi, x, width, y, height);
|
||||
if (clipdpi != NULL) {
|
||||
window_ride_construction_draw_track_piece(w, clipdpi, rideIndex, trackType, trackDirection, edxRS16, width, height);
|
||||
rct2_free(clipdpi);
|
||||
if (clip_drawpixelinfo(&clipdpi, dpi, x, y, width, height)) {
|
||||
window_ride_construction_draw_track_piece(w, &clipdpi, rideIndex, trackType, trackDirection, edxRS16, width, height);
|
||||
}
|
||||
|
||||
// Draw cost
|
||||
|
|
|
@ -1091,8 +1091,8 @@ void window_scenery_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int scrol
|
|||
gfx_draw_sprite(dpi, imageId, left + 0x21, top, w->colours[1]);
|
||||
} else if (currentSceneryGlobalId >= 0x200) {
|
||||
sceneryEntry = g_wallSceneryEntries[currentSceneryGlobalId - 0x200];
|
||||
rct_drawpixelinfo* clipdpi = clip_drawpixelinfo(dpi, left + 1, 64, top + 1, 78);
|
||||
if (clipdpi != NULL) {
|
||||
rct_drawpixelinfo clipdpi;
|
||||
if (clip_drawpixelinfo(&clipdpi, dpi, left + 1, top + 1, 64, 78)) {
|
||||
uint32 imageId = sceneryEntry->image;
|
||||
uint8 tertiaryColour = w->colours[1];
|
||||
|
||||
|
@ -1102,11 +1102,11 @@ void window_scenery_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int scrol
|
|||
if (sceneryEntry->wall.flags & WALL_SCENERY_HAS_SECONDARY_COLOUR) {
|
||||
imageId |= (window_scenery_secondary_colour << 24) | 0x80000000;
|
||||
}
|
||||
gfx_draw_sprite(clipdpi, imageId, 0x2F, (sceneryEntry->wall.height * 2) + 0x32,
|
||||
gfx_draw_sprite(&clipdpi, imageId, 0x2F, (sceneryEntry->wall.height * 2) + 0x32,
|
||||
tertiaryColour);
|
||||
|
||||
imageId = (sceneryEntry->image + 0x40000006) | ((window_scenery_primary_colour + 0x70) << 19);
|
||||
gfx_draw_sprite(clipdpi, imageId, 0x2F, (sceneryEntry->wall.height * 2) + 0x32,
|
||||
gfx_draw_sprite(&clipdpi, imageId, 0x2F, (sceneryEntry->wall.height * 2) + 0x32,
|
||||
tertiaryColour);
|
||||
}
|
||||
else {
|
||||
|
@ -1121,17 +1121,14 @@ void window_scenery_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int scrol
|
|||
}
|
||||
|
||||
}
|
||||
gfx_draw_sprite(clipdpi, imageId, 0x2F, (sceneryEntry->wall.height * 2) + 0x32,
|
||||
gfx_draw_sprite(&clipdpi, imageId, 0x2F, (sceneryEntry->wall.height * 2) + 0x32,
|
||||
tertiaryColour);
|
||||
|
||||
if (sceneryEntry->wall.flags & WALL_SCENERY_FLAG5){
|
||||
gfx_draw_sprite(clipdpi, imageId + 1, 0x2F, (sceneryEntry->wall.height * 2) + 0x32,
|
||||
gfx_draw_sprite(&clipdpi, imageId + 1, 0x2F, (sceneryEntry->wall.height * 2) + 0x32,
|
||||
tertiaryColour);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
rct2_free(clipdpi);
|
||||
}
|
||||
} else if (currentSceneryGlobalId >= 0x100) {
|
||||
sceneryEntry = g_pathBitSceneryEntries[currentSceneryGlobalId - 0x100];
|
||||
|
@ -1140,9 +1137,8 @@ void window_scenery_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int scrol
|
|||
gfx_draw_sprite(dpi, imageId, left + 0x0B, top + 0x10, w->colours[1]);
|
||||
} else {
|
||||
sceneryEntry = g_smallSceneryEntries[currentSceneryGlobalId];
|
||||
rct_drawpixelinfo* clipdpi = clip_drawpixelinfo(dpi, left + 1, SCENERY_BUTTON_WIDTH - 2, top + 1, SCENERY_BUTTON_HEIGHT - 2);
|
||||
if (clipdpi != NULL) {
|
||||
|
||||
rct_drawpixelinfo clipdpi;
|
||||
if (clip_drawpixelinfo(&clipdpi, dpi, left + 1, top + 1, SCENERY_BUTTON_WIDTH - 2, SCENERY_BUTTON_HEIGHT - 2)) {
|
||||
uint32 imageId = sceneryEntry->image + window_scenery_rotation;
|
||||
|
||||
if (sceneryEntry->small_scenery.flags & SMALL_SCENERY_FLAG_HAS_PRIMARY_COLOUR) {
|
||||
|
@ -1160,21 +1156,19 @@ void window_scenery_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int scrol
|
|||
spriteTop -= 0x0C;
|
||||
}
|
||||
|
||||
gfx_draw_sprite(clipdpi, imageId, 0x20, spriteTop, w->colours[1]);
|
||||
gfx_draw_sprite(&clipdpi, imageId, 0x20, spriteTop, w->colours[1]);
|
||||
|
||||
if (sceneryEntry->small_scenery.flags & 0x200) {
|
||||
imageId = ((sceneryEntry->image + window_scenery_rotation) + 0x40000004) +
|
||||
((window_scenery_primary_colour + 0x70) << 19);
|
||||
|
||||
gfx_draw_sprite(clipdpi, imageId, 0x20, spriteTop, w->colours[1]);
|
||||
gfx_draw_sprite(&clipdpi, imageId, 0x20, spriteTop, w->colours[1]);
|
||||
}
|
||||
|
||||
if (sceneryEntry->small_scenery.flags & SMALL_SCENERY_FLAG8) {
|
||||
imageId = (sceneryEntry->image + window_scenery_rotation) + 4;
|
||||
gfx_draw_sprite(clipdpi, imageId, 0x20, spriteTop, w->colours[1]);
|
||||
gfx_draw_sprite(&clipdpi, imageId, 0x20, spriteTop, w->colours[1]);
|
||||
}
|
||||
|
||||
rct2_free(clipdpi);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -976,8 +976,10 @@ void window_staff_overview_tab_paint(rct_window* w, rct_drawpixelinfo* dpi)
|
|||
int y = widget->top + 1 + w->y;
|
||||
if (w->page == WINDOW_STAFF_OVERVIEW) height++;
|
||||
|
||||
rct_drawpixelinfo* clip_dpi = clip_drawpixelinfo(dpi, x, width, y, height);
|
||||
if (!clip_dpi) return;
|
||||
rct_drawpixelinfo clip_dpi;
|
||||
if (!clip_drawpixelinfo(&clip_dpi, dpi, x, y, width, height)) {
|
||||
return;
|
||||
}
|
||||
|
||||
x = 14;
|
||||
y = 20;
|
||||
|
@ -998,30 +1000,28 @@ void window_staff_overview_tab_paint(rct_window* w, rct_drawpixelinfo* dpi)
|
|||
ebx += eax;
|
||||
|
||||
int sprite_id = ebx | (peep->tshirt_colour << 19) | (peep->trousers_colour << 24) | 0xA0000000;
|
||||
gfx_draw_sprite(clip_dpi, sprite_id, x, y, 0);
|
||||
gfx_draw_sprite(&clip_dpi, sprite_id, x, y, 0);
|
||||
|
||||
// If holding a balloon
|
||||
if (ebx >= 0x2A1D && ebx < 0x2A3D){
|
||||
ebx += 32;
|
||||
ebx |= (peep->balloon_colour << 19) | 0x20000000;
|
||||
gfx_draw_sprite(clip_dpi, ebx, x, y, 0);
|
||||
gfx_draw_sprite(&clip_dpi, ebx, x, y, 0);
|
||||
}
|
||||
|
||||
// If holding umbrella
|
||||
if (ebx >= 0x2BBD && ebx < 0x2BDD){
|
||||
ebx += 32;
|
||||
ebx |= (peep->umbrella_colour << 19) | 0x20000000;
|
||||
gfx_draw_sprite(clip_dpi, ebx, x, y, 0);
|
||||
gfx_draw_sprite(&clip_dpi, ebx, x, y, 0);
|
||||
}
|
||||
|
||||
// If wearing hat
|
||||
if (ebx >= 0x29DD && ebx < 0x29FD){
|
||||
ebx += 32;
|
||||
ebx |= (peep->hat_colour << 19) | 0x20000000;
|
||||
gfx_draw_sprite(clip_dpi, ebx, x, y, 0);
|
||||
gfx_draw_sprite(&clip_dpi, ebx, x, y, 0);
|
||||
}
|
||||
|
||||
rct2_free(clip_dpi);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -574,27 +574,19 @@ void window_staff_list_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
|||
window_staff_list_widgets[WIDX_STAFF_LIST_SECURITY_TAB].bottom - 6 + w->y, 0
|
||||
);
|
||||
|
||||
rct_drawpixelinfo* sprite_dpi = clip_drawpixelinfo(
|
||||
rct_drawpixelinfo sprite_dpi;
|
||||
if (clip_drawpixelinfo(
|
||||
&sprite_dpi,
|
||||
dpi,
|
||||
window_staff_list_widgets[WIDX_STAFF_LIST_ENTERTAINERS_TAB].left + w->x + 1,
|
||||
window_staff_list_widgets[WIDX_STAFF_LIST_ENTERTAINERS_TAB].right - window_staff_list_widgets[WIDX_STAFF_LIST_ENTERTAINERS_TAB].left - 1,
|
||||
window_staff_list_widgets[WIDX_STAFF_LIST_ENTERTAINERS_TAB].top + w->y + 1,
|
||||
window_staff_list_widgets[WIDX_STAFF_LIST_ENTERTAINERS_TAB].right - window_staff_list_widgets[WIDX_STAFF_LIST_ENTERTAINERS_TAB].left - 1,
|
||||
window_staff_list_widgets[WIDX_STAFF_LIST_ENTERTAINERS_TAB].bottom - window_staff_list_widgets[WIDX_STAFF_LIST_ENTERTAINERS_TAB].top - 1
|
||||
);
|
||||
|
||||
|
||||
|
||||
if (sprite_dpi != NULL) {
|
||||
)) {
|
||||
// Entertainers tab image
|
||||
i = (selectedTab == 3 ? w->list_information_type & 0x0FFFFFFFC : 0);
|
||||
i += RCT2_ADDRESS(RCT2_GLOBAL(0x00982738, int), int)[0] + 1;
|
||||
gfx_draw_sprite(
|
||||
sprite_dpi,
|
||||
i,
|
||||
0x0F,
|
||||
0x17, 0
|
||||
);
|
||||
rct2_free(sprite_dpi);
|
||||
gfx_draw_sprite(&sprite_dpi, i, 0x0F, 0x17, 0);
|
||||
}
|
||||
|
||||
if (!(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY)) {
|
||||
|
|
|
@ -595,14 +595,13 @@ static void window_track_place_invalidate(rct_window *w)
|
|||
*/
|
||||
static void window_track_place_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
||||
{
|
||||
rct_drawpixelinfo *clippedDpi;
|
||||
rct_drawpixelinfo clippedDpi;
|
||||
rct_g1_element tmpElement, *substituteElement;
|
||||
|
||||
window_draw_widgets(w, dpi);
|
||||
|
||||
// Draw mini tile preview
|
||||
clippedDpi = clip_drawpixelinfo(dpi, w->x + 4, 168, w->y + 18, 78);
|
||||
if (clippedDpi != NULL) {
|
||||
if (clip_drawpixelinfo(&clippedDpi, dpi, w->x + 4, 168, w->y + 18, 78)) {
|
||||
substituteElement = &g1Elements[0];
|
||||
tmpElement = *substituteElement;
|
||||
substituteElement->offset = _window_track_place_mini_preview;
|
||||
|
@ -611,10 +610,8 @@ static void window_track_place_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
|||
substituteElement->x_offset = 0;
|
||||
substituteElement->y_offset = 0;
|
||||
substituteElement->flags = 0;
|
||||
gfx_draw_sprite(clippedDpi, 0, 0, 0, 0);
|
||||
gfx_draw_sprite(&clippedDpi, 0, 0, 0, 0);
|
||||
*substituteElement = tmpElement;
|
||||
|
||||
rct2_free(clippedDpi);
|
||||
}
|
||||
|
||||
// Price
|
||||
|
|
Loading…
Reference in New Issue