146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* 246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL - Simple DirectMedia Layer 346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Copyright (C) 1997-2004 Sam Lantinga 446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner This library is free software; you can redistribute it and/or 646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner modify it under the terms of the GNU Library General Public 746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner License as published by the Free Software Foundation; either 846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner version 2 of the License, or (at your option) any later version. 946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 1046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner This library is distributed in the hope that it will be useful, 1146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner but WITHOUT ANY WARRANTY; without even the implied warranty of 1246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Library General Public License for more details. 1446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 1546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner You should have received a copy of the GNU Library General Public 1646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner License along with this library; if not, write to the Free 1746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 1846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 1946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Sam Lantinga 2046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner slouken@libsdl.org 2146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner*/ 2246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_config.h" 2346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 2446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* 2546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner File added by Alan Buckley (alan_baa@hotmail.com) for RISC OS compatability 2646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 27 March 2003 2746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 2846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Implements Sprite plotting code for wimp display.window 2946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner*/ 3046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 3146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "kernel.h" 3246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "swis.h" 3346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 3446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_stdinc.h" 3546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_riscosvideo.h" 3646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 3746be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern void WIMP_ReadModeInfo(_THIS); 3846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 3946be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid WIMP_PaletteChanged(_THIS); 4046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 4146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 4246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Create sprite buffer for screen */ 4346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 4446be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerunsigned char *WIMP_CreateBuffer(int width, int height, int bpp) 4546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 4646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner int size; 4746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner char sprite_name[12] = "display"; 4846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner unsigned char *buffer; 4946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner _kernel_swi_regs regs; 5046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner int bytesPerPixel; 5146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner int bytesPerRow; 5246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner int offsetToSpriteData = 60; 5346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 5446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner switch(bpp) 5546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 5646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case 32: bytesPerPixel = 4; break; 5746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case 16: bytesPerPixel = 2; break; 5846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case 8: 5946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner bytesPerPixel = 1; 6046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner offsetToSpriteData += 2048; /* Add in size of palette */ 6146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break; 6246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner default: 6346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner return NULL; 6446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break; 6546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 6646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 6746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner bytesPerRow = bytesPerPixel * width; 6846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 6946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if ((bytesPerRow & 3) != 0) 7046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 7146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner bytesPerRow += 4 - (bytesPerRow & 3); 7246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 7346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner size = bytesPerRow * height; 7446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 7546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner buffer = SDL_malloc( (size_t) size + offsetToSpriteData ); 7646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (!buffer) return NULL; 7746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 7846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* Initialise a sprite area */ 7946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 8046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner *(unsigned int *)buffer = size + offsetToSpriteData; 8146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner *(unsigned int *)(buffer + 8) = 16; 8246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 8346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[0] = 256+9; 8446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[1] = (unsigned int)buffer; 8546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner _kernel_swi(OS_SpriteOp, ®s, ®s); 8646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 8746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[0] = 256+15; 8846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[1] = (unsigned int)buffer; 8946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[2] = (unsigned int)&sprite_name; 9046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[3] = 0; /* Palette flag: 0 = no palette */ 9146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[4] = width; 9246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[5] = height; 9346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (bpp == 8) 9446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 9546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* Use old style mode number */ 9646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[6] = 28; /* 8bpp 90x90dpi */ 9746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } else 9846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 9946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[6] = (((bpp == 16) ? 5 : 6) << 27) /* Type 6 = 32bpp sprite, 5 = 16bpp sprite */ 10046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner | (90 << 14) /* Vertical dpi */ 10146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner | (90 << 1) /* Horizontal dpi */ 10246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner | 1; /* Marker to distinguish between mode selectors and sprite modes */ 10346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 10446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (_kernel_swi(OS_SpriteOp, ®s, ®s) == NULL) 10546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 10646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (bpp == 8) 10746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 10846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* Modify sprite to take into account 256 colour palette */ 10946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner int *sprite = (int *)(buffer + 16); 11046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* Adjust sprite offsets */ 11146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner sprite[0] += 2048; 11246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner sprite[8] += 2048; 11346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner sprite[9] += 2048; 11446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* Adjust sprite area next free pointer */ 11546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner (*(int *)(buffer+12)) += 2048; 11646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 11746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* Don't need to set up palette as SDL sets up the default 11846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 256 colour palette */ 11946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* { 12046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner int *pal = sprite + 11; 12146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner unsigned int j; 12246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner unsigned int entry; 12346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner for (j = 0; j < 255; j++) 12446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 12546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner entry = (j << 24) | (j << 16) | (j << 8); 12646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner *pal++ = entry; 12746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner *pal++ = entry; 12846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 12946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 13046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner*/ 13146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 13246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } else 13346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 13446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_free(buffer); 13546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner buffer = NULL; 13646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 13746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 13846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner return buffer; 13946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} 14046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 14146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 14246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Setup translation buffers for the sprite plotting */ 14346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 14446be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid WIMP_SetupPlotInfo(_THIS) 14546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 14646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner _kernel_swi_regs regs; 14746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner int *sprite = ((int *)this->hidden->bank[1])+4; 14846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 14946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[0] = (unsigned int)this->hidden->bank[1]; 15046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[1] = (unsigned int)sprite; 15146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[2] = -1; /* Current mode */ 15246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[3] = -1; /* Current palette */ 15346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[4] = 0; /* Get size of buffer */ 15446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[5] = 1|2|16; /* R1 - pointer to sprite and can use full palette words */ 15546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[6] = 0; 15646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[7] = 0; 15746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 15846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (this->hidden->pixtrans) SDL_free(this->hidden->pixtrans); 15946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner this->hidden->pixtrans = 0; 16046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 16146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* Get the size required for the buffer */ 16246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner _kernel_swi(ColourTrans_GenerateTable, ®s, ®s); 16346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (regs.r[4]) 16446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 16546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner this->hidden->pixtrans = SDL_malloc(regs.r[4]); 16646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 16746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[4] = (unsigned int)this->hidden->pixtrans; 16846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* Actually read the buffer */ 16946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner _kernel_swi(ColourTrans_GenerateTable, ®s, ®s); 17046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 17146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} 17246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 17346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Plot the sprite in the given context */ 17446be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid WIMP_PlotSprite(_THIS, int x, int y) 17546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 17646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner _kernel_swi_regs regs; 17746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner _kernel_oserror *err; 17846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 17946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[0] = 52 + 512; 18046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[1] = (unsigned int)this->hidden->bank[1]; 18146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[2] = (unsigned int)this->hidden->bank[1]+16; 18246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[3] = x; 18346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[4] = y; 18446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[5] = 0|32; /* Overwrite screen and pixtrans contains wide colour entries */ 18546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[6] = 0; /* No scale factors i.e. 1:1 */ 18646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[7] = (int)this->hidden->pixtrans; 18746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 18846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if ((err = _kernel_swi(OS_SpriteOp, ®s, ®s)) != 0) 18946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 19046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner int *p = (int *)this->hidden->pixtrans; 19146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner printf("OS_SpriteOp failed \n%s\n",err->errmess); 19246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner printf("pixtrans %d\n", (int)this->hidden->pixtrans); 19346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner printf("%x %x %x\n", p[0], p[1], p[2]); 19446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 19546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} 19646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 19746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 19846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Wimp mode has changes so update colour mapping and pixel sizes 19946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner of windows and the sprites they plot */ 20046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 20146be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid WIMP_ModeChanged(_THIS) 20246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 20346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner int oldXeig = this->hidden->xeig; 20446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner int oldYeig = this->hidden->yeig; 20546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 20646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner WIMP_ReadModeInfo(this); 20746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 20846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (oldXeig == this->hidden->xeig && oldYeig == this->hidden->yeig) 20946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 21046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* Only need to update the palette */ 21146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner WIMP_PaletteChanged(this); 21246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } else 21346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 21446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner _kernel_swi_regs regs; 21546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner int window_state[9]; 21646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner int extent[4]; 21746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner int currWidth, currHeight; 21846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner int newWidth, newHeight; 21946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 22046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* Need to resize windows and update the palette */ 22146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner WIMP_SetupPlotInfo(this); 22246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 22346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 22446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner window_state[0] = this->hidden->window_handle; 22546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[1] = (unsigned int)window_state; 22646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner _kernel_swi(Wimp_GetWindowState, ®s, ®s); 22746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 22846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner currWidth = window_state[3] - window_state[1]; 22946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner currHeight = window_state[4] - window_state[2]; 23046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 23146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner newWidth = (currWidth >> oldXeig) << this->hidden->xeig; 23246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner newHeight = (currHeight >> oldYeig) << this->hidden->yeig; 23346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* Need to avoid extent getting too small for visible part 23446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner of window */ 23546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner extent[0] = 0; 23646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (currHeight <= newHeight) 23746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 23846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner extent[1] = -newHeight; 23946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } else 24046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 24146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner extent[1] = -currHeight; 24246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 24346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (currWidth <= newWidth) 24446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 24546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner extent[2] = newWidth; 24646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } else 24746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 24846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner extent[2] = currWidth; 24946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 25046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner extent[3] = 0; 25146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 25246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[0] = this->hidden->window_handle; 25346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner regs.r[1] = (int)extent; 25446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner _kernel_swi(Wimp_SetExtent, ®s, ®s); 25546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 25646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /*TODO: May need to set flag to resize window on next open */ 25746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 25846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} 25946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 26046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Palette has changed so update palettes used for windows sprites */ 26146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 26246be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid WIMP_PaletteChanged(_THIS) 26346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 26446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner WIMP_SetupPlotInfo(this); 26546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} 266