hschumann2/TempleOS-Source-Code
0847
1 2#help_index "Graphics/Scrn"3 4U0 GrSetUpTables()5{6 CDC *dc;7 I64 i,j,k,l,m,x,y,rr;8 U8 *dst;9 10 k=0;11 for (i=0;i<256;i++)12 for (j=0;j<8;j++)13 if (Bt(&i,j))14 gr.to_8_bits(U8 *)[k++]=0xFF;15 else16 gr.to_8_bits(U8 *)[k++]=0x00;17 k=0;18 for (i=0;i<256;i++)19 for (j=0;j<8;j++)20 gr.to_8_colors(U8 *)[k++]=i;21 22 for (i=0;i<GR_PEN_BRUSHES_NUM;i++) {23 k=i+1;24 25 rr=k*k;26 for (y=1;y<k;y++)27 for (x=1;x<k;x++)28 if (SqrI64(y*2-k)+SqrI64(x*2-k)<rr) {29 if (x-1-i>>1<gr.circle_lo[i][i-y])30 gr.circle_lo[i][i-y]=x-1-i>>1;31 if (x-1-i>>1>gr.circle_hi[i][i-y])32 gr.circle_hi[i][i-y]=x-1-i>>1;33 }34 35 dc=DCNew(i,i);36 gr.pen_brushes[i]=dc;37 dc->color=COLOR_MONO;38 rr=k*k;39 for (y=1;y<k;y++)40 for (x=1;x<k;x++)41 if (SqrI64(y*2-k)+SqrI64(x*2-k)<rr)42 GrPlot0(dc,x-1,y-1);43 44 dc=DCNew(i,i);45 gr.collision_pen_brushes[i]=dc;46 dc->color=COLOR_INVALID;//Want color that never occurs.47 rr=k*k;48 for (y=1;y<k;y++)49 for (x=1;x<k;x++)50 if (SqrI64(y*2-k)+SqrI64(x*2-k)<rr)51 GrPlot0(dc,x-1,y-1);52 53 dc=DCNew(i,i);54 gr.even_pen_brushes[i]=dc;55 dc->color=COLOR_MONO;56 rr=k*k;57 for (y=1;y<k;y++)58 for (x=1;x<k;x++)59 if (!(((x-1)^(y-1))&1) && SqrI64(y*2-k)+SqrI64(x*2-k)<rr)60 GrPlot0(dc,x-1,y-1);61 62 dc=DCNew(i,i);63 gr.odd_pen_brushes[i]=dc;64 dc->color=COLOR_MONO;65 rr=k*k;66 for (y=1;y<k;y++)67 for (x=1;x<k;x++)68 if (((x-1)^(y-1))&1 && SqrI64(y*2-k)+SqrI64(x*2-k)<rr)69 GrPlot0(dc,x-1,y-1);70 }71 if (!Bt(&sys_run_level,RLf_VGA)) { //if text mode72 MemSet(text.vga_text_alias,0,TEXT_ROWS*TEXT_COLS*sizeof(U16));73 MemSet(gr.vga_text_cache,0,TEXT_ROWS*TEXT_COLS*sizeof(U16));74 } else {75 OutU8(VGAP_IDX,VGAR_MAP_MASK);76 OutU8(VGAP_DATA,0x0F);77//Virtual Box crashes on the following for some reason.78 // MemSet(text.vga_alias,0,GR_HEIGHT*GR_WIDTH>>3);79 MemSet(gr.scrn_image->body,0,GR_WIDTH*GR_HEIGHT>>1);80 }81 for (i=1;i<=GR_SCRN_ZOOM_MAX;i++) {82 dst=gr.scrn_zoom_tables[i]=MAlloc(256*i);83 for (j=0;j<256;j++) {84 m=0;85 for (k=0;k<8;k++) {86 if (Bt(&j,k)) {87 for (l=0;l<i;l++)88 Bts(&m,l+k*i);89 }90 }91 for (l=0;l<i;l++)92 dst[j+l*256]=m.u8[l];93 }94 }95}96 97#help_index "Graphics/Scrn;Windows"98 99U0 WinZBufFill(CTask *task)100{//Not public101 I64 y,t,b,l,r,w;102 if (!Bt(&task->display_flags,DISPLAYf_NO_BORDER)) {103 if (task->win_top-1>0)104 t=task->win_top-1;105 else106 t=0;107 if (task->win_bottom+1<TEXT_ROWS)108 b=task->win_bottom+1;109 else110 b=TEXT_ROWS-1;111 if (task->win_left-1>0)112 l=task->win_left-1;113 else114 l=0;115 if (task->win_right+1<TEXT_COLS)116 r=task->win_right+1;117 else118 r=TEXT_COLS-1;119 } else {120 if (task->win_top>0)121 t=task->win_top;122 else123 t=0;124 if (task->win_bottom<TEXT_ROWS)125 b=task->win_bottom;126 else127 b=TEXT_ROWS-1;128 if (task->win_left>0)129 l=task->win_left;130 else131 l=0;132 if (task->win_right<TEXT_COLS)133 r=task->win_right;134 else135 r=TEXT_COLS-1;136 }137 t=ClampI64(t,0,TEXT_ROWS-1);138 b=ClampI64(b,t,TEXT_ROWS-1);139 l=ClampI64(l,0,TEXT_COLS-1);140 r=ClampI64(r,l,TEXT_COLS-1);141 if (w=r-l+1)142 for (y=t;y<=b;y++)143 MemSetU16(gr.win_z_buf(U8 *)+(y*TEXT_COLS+l)*sizeof(U16),144 task->win_z_num,w);145}146 147public U0 WinZBufUpdate()148{//Might have to call if doing graphics outside winmgr callback routines.149//Call it if, for example, when a pop-up window closes and you need to refresh150 //before graphics.151 I64 i,z=1;152 U16 *ptr;153 CTask *task,*task1;154 if (gr.win_z_buf) {155 LBtr(&sys_semas[SEMA_UPDATE_WIN_Z_BUF],0);156 task1=task=sys_winmgr_task;157 do {158 if (!TaskValidate(task)) break;159 if (Bt(&task->display_flags,DISPLAYf_SHOW)) {160 task->win_z_num=z++;161 WinZBufFill(task);162 }163 task=task->next_task;164 } while (task!=task1 && z<0x10000);165 166 MemSet(gr.win_uncovered_bitmap,0,(gr.highest_uncovered+7)>>3+1);167 gr.highest_uncovered=z-1;168 for (ptr=gr.win_z_buf,i=TEXT_ROWS*TEXT_COLS;i;i--)169 Bts(gr.win_uncovered_bitmap,*ptr++);170 }171}172 173#help_index "Graphics"174U0 GrInit2()175{176 MemSet(&gr,0,sizeof(CGrGlbls));177 gr.sprite_hash=HashTableNew(512);178 HashDefineLstAdd("ST_SPRITE_ELEM_CODES",SPHT_ELEM_CODE,gr.sprite_hash);179 gr.scrn_zoom=1;180 181 PaletteSetStd;182 fp_set_std_palette=&PaletteSetStd;183 GrPaletteIndicesSet;184 185 gr.to_8_bits =MAlloc(256*sizeof(I64));186 gr.to_8_colors=MAlloc(256*sizeof(I64));187 188 gr.text_base=CAlloc(TEXT_ROWS*TEXT_COLS*sizeof(U32));189 gr.vga_text_cache=MAlloc(TEXT_ROWS*TEXT_COLS*sizeof(U16));190 gr.win_uncovered_bitmap=CAlloc(65536/8);191 gr.highest_uncovered=0;192 gr.win_z_buf=MAlloc(TEXT_ROWS*TEXT_COLS*sizeof(U16));193 194 gr.dc2=DCNew(GR_WIDTH,GR_HEIGHT);195 gr.dc2->flags|=DCF_SCRN_BITMAP;196 gr.dc_cache=DCNew(GR_WIDTH,GR_HEIGHT);197 198 gr.dc=DCNew(GR_WIDTH,GR_HEIGHT);199 gr.dc->flags|=DCF_SCRN_BITMAP|DCF_ON_TOP;200 DCFill;201 202 gr.dc1=DCNew(GR_WIDTH,GR_HEIGHT);203 gr.dc1->flags|=DCF_SCRN_BITMAP;204 205 gr.scrn_image=DCNew(GR_WIDTH,GR_HEIGHT); //4-bit206 gr.zoomed_dc =DCNew(GR_WIDTH,GR_HEIGHT); //4-bit207 gr.zoomed_dc->flags|=DCF_SCRN_BITMAP;208}209 210GrInit2;211 