public void update_blocks(utils.ETileViewType _view_type, tiles_data _tiles_data, bool _prop_per_block, data_sets_manager.EScreenDataType _scr_type) { Image img; Graphics gfx; m_block_rect.Width = m_block_rect.Height = (_view_type == utils.ETileViewType.tvt_ObjectId && !_prop_per_block) ? (utils.CONST_BLOCKS_IMG_SIZE >> 1):utils.CONST_BLOCKS_IMG_SIZE; for (int i = 0; i < platform_data.get_max_blocks_cnt(); i++) { img = m_imagelist_blocks.Images[i]; gfx = Graphics.FromImage(img); if (_tiles_data != null) { update_block(i, _view_type, _tiles_data, _prop_per_block, gfx, img, _scr_type); } else { gfx.Clear(utils.CONST_COLOR_BLOCK_CLEAR); } m_imagelist_blocks.Images[i] = img; gfx.Dispose(); } m_panel_blocks.Refresh(); }
public void update_tiles(utils.ETileViewType _view_type, tiles_data _tiles_data, data_sets_manager.EScreenDataType _scr_type) { Image img; Graphics gfx; if (_scr_type == data_sets_manager.EScreenDataType.sdt_Tiles4x4) { for (int i = 0; i < platform_data.get_max_tiles_cnt(); i++) { img = m_imagelist_tiles.Images[i]; gfx = Graphics.FromImage(img); if (_tiles_data != null) { update_tile(i, _view_type, _tiles_data, gfx, img, _scr_type); } else { gfx.Clear(utils.CONST_COLOR_TILE_CLEAR); } m_imagelist_tiles.Images[i] = img; gfx.Dispose(); } m_panel_tiles.Refresh(); } }
public void set_view_type(utils.ETileViewType _view_type) { m_tile_editor.view_type = m_block_editor.view_type = m_CHR_bank_viewer.view_type = _view_type; }
public void insert_screen(bool _all_banks_list, int _CHR_bank_ind, int _scr_local_ind, int _scr_global_ind, List <tiles_data> _tiles_data, data_sets_manager.EScreenDataType _scr_type, utils.ETileViewType _view_type) { int i; int size; m_listview_screens.BeginUpdate(); Bitmap bmp = create_screen_image(_scr_local_ind, _tiles_data[_CHR_bank_ind], _scr_type, _view_type); if (_scr_global_ind == m_scr_list.count()) { // add image m_scr_list.add(bmp); } else { // insert image m_scr_list.add(bmp); size = m_scr_list.count(); for (i = size - 1; i > _scr_global_ind; i--) { m_scr_list.replace(i, m_scr_list.get(i - 1)); } m_scr_list.replace(_scr_global_ind, bmp); } ListViewItem lst = new ListViewItem(); lst.Name = lst.Text = utils.get_screen_id_str(_CHR_bank_ind, _scr_local_ind); lst.ImageIndex = _scr_global_ind; int insert_ind = _all_banks_list ? _scr_global_ind:_scr_local_ind; m_listview_screens.Items.Insert(insert_ind, lst); size = m_listview_screens.Items.Count; for (i = insert_ind + 1; i < size; i++) { lst = m_listview_screens.Items[i]; ++lst.ImageIndex; } m_listview_screens.EndUpdate(); }
private Bitmap create_screen_image(int _screen_n, tiles_data _data, data_sets_manager.EScreenDataType _scr_type, utils.ETileViewType _view_type) { #if DEF_SCREEN_DRAW_FAST Image block_img; #endif int tile_n; int block_n; ushort tile_id; int tile_offs_x; int tile_offs_y; palette_group.Instance.set_palette(_data); Bitmap bmp = new Bitmap(platform_data.get_screen_width_pixels(), platform_data.get_screen_height_pixels(), PixelFormat.Format32bppPArgb); Graphics gfx = Graphics.FromImage(bmp); gfx.InterpolationMode = InterpolationMode.NearestNeighbor; gfx.PixelOffsetMode = PixelOffsetMode.None; gfx.Clear(utils.CONST_COLOR_SCREEN_CLEAR); if (_scr_type == data_sets_manager.EScreenDataType.sdt_Tiles4x4) { for (tile_n = 0; tile_n < platform_data.get_screen_tiles_cnt(); tile_n++) { tile_id = _data.get_screen_tile(_screen_n, tile_n); tile_offs_x = (tile_n % platform_data.get_screen_tiles_width()) << 5; tile_offs_y = (tile_n / platform_data.get_screen_tiles_width()) << 5; for (block_n = 0; block_n < utils.CONST_BLOCK_SIZE; block_n++) { #if DEF_SCREEN_DRAW_FAST block_img = m_imagelist_blocks.Images[_data.get_tile_block(tile_id, block_n)]; gfx.DrawImage(block_img, ((block_n % 2) << 4) + tile_offs_x, ((block_n >> 1) << 4) + tile_offs_y, block_img.Width >> 1, block_img.Height >> 1); #else #if DEF_ZX utils.update_block_gfx(_data.get_tile_block(tile_id, block_n), _data, gfx, 8, 8, ((block_n % 2) << 4) + tile_offs_x, ((block_n >> 1) << 4) + tile_offs_y, utils.get_draw_block_flags_by_view_type(_view_type)); #else utils.update_block_gfx(_data.get_tile_block(tile_id, block_n), _data, gfx, 8, 8, ((block_n % 2) << 4) + tile_offs_x, ((block_n >> 1) << 4) + tile_offs_y); #endif #endif } } } else { for (tile_n = 0; tile_n < platform_data.get_screen_blocks_cnt(); tile_n++) { #if DEF_SCREEN_DRAW_FAST block_img = m_imagelist_blocks.Images[_data.get_screen_tile(_screen_n, tile_n)]; gfx.DrawImage(block_img, ((tile_n % platform_data.get_screen_blocks_width()) << 4), ((tile_n / platform_data.get_screen_blocks_width()) << 4), block_img.Width >> 1, block_img.Height >> 1); #else #if DEF_ZX utils.update_block_gfx(_data.get_screen_tile(_screen_n, tile_n), _data, gfx, 8, 8, ((tile_n % platform_data.get_screen_blocks_width()) << 4), ((tile_n / platform_data.get_screen_blocks_width()) << 4), utils.get_draw_block_flags_by_view_type(_view_type)); #else utils.update_block_gfx(_data.get_screen_tile(_screen_n, tile_n), _data, gfx, 8, 8, ((tile_n % platform_data.get_screen_blocks_width()) << 4), ((tile_n / platform_data.get_screen_blocks_width()) << 4)); #endif #endif } } return(bmp); }
public void update_screens(List <tiles_data> _tiles_data, data_sets_manager.EScreenDataType _scr_type, bool _update_images, utils.ETileViewType _view_type, int _bank_id = -1) { m_listview_screens.BeginUpdate(); m_listview_screens.Items.Clear(); tiles_data data; ListViewItem lst; int img_ind; int screens_cnt; int screens_ind = 0; int banks_cnt = _tiles_data.Count; for (int bank_n = 0; bank_n < banks_cnt; bank_n++) { data = _tiles_data[bank_n]; screens_cnt = data.screen_data_cnt(); if ((_bank_id >= 0 && _bank_id == bank_n) || _bank_id < 0) { palette_group.Instance.set_palette(data); for (int screen_n = 0; screen_n < screens_cnt; screen_n++) { img_ind = screens_ind + screen_n; if (_update_images) { m_scr_list.get(img_ind).Dispose(); m_scr_list.replace(img_ind, create_screen_image(screen_n, data, _scr_type, _view_type)); } lst = new ListViewItem(); lst.Name = lst.Text = utils.get_screen_id_str(bank_n, screen_n); lst.ImageIndex = img_ind; m_listview_screens.Items.Add(lst); } } screens_ind += screens_cnt; } m_listview_screens.EndUpdate(); }
public void update_all_screens(List <tiles_data> _tiles_data, data_sets_manager.EScreenDataType _scr_type, utils.ETileViewType _view_type) { m_listview_screens.BeginUpdate(); // clear items { m_scr_list.clear(); m_listview_screens.Items.Clear(); } tiles_data data; ListViewItem lst; int screens_cnt; int img_ind = 0; int banks_cnt = _tiles_data.Count; for (int bank_n = 0; bank_n < banks_cnt; bank_n++) { data = _tiles_data[bank_n]; palette_group.Instance.set_palette(data); screens_cnt = data.screen_data_cnt(); for (int screen_n = 0; screen_n < screens_cnt; screen_n++) { m_scr_list.add(create_screen_image(screen_n, data, _scr_type, _view_type)); lst = new ListViewItem(); lst.Name = lst.Text = utils.get_screen_id_str(bank_n, screen_n); lst.ImageIndex = img_ind; ++img_ind; m_listview_screens.Items.Add(lst); } } m_listview_screens.EndUpdate(); }
public void update_block(int _block_ind, utils.ETileViewType _view_type, tiles_data _tiles_data, bool _prop_per_block, Graphics _gfx, Image _img, data_sets_manager.EScreenDataType _scr_type) { int obj_id; Image img; if (_img != null) { img = _img; } else { img = m_imagelist_blocks.Images[_block_ind]; } Graphics gfx; if (_gfx != null) { gfx = _gfx; } else { gfx = Graphics.FromImage(img); } gfx.InterpolationMode = InterpolationMode.NearestNeighbor; gfx.PixelOffsetMode = PixelOffsetMode.Half; #if DEF_ZX utils.update_block_gfx(_block_ind, _tiles_data, gfx, img.Width >> 1, img.Height >> 1, 0, 0, utils.get_draw_block_flags_by_view_type(_view_type)); #else utils.update_block_gfx(_block_ind, _tiles_data, gfx, img.Width >> 1, img.Height >> 1); #endif if (_view_type == utils.ETileViewType.tvt_ObjectId) // obj id { if (_prop_per_block) { obj_id = tiles_data.get_block_flags_obj_id(_tiles_data.blocks[_block_ind << 2]); utils.brush.Color = Color.FromArgb((CONST_ALPHA << 24) | m_clrs_arr[obj_id]); draw_block_info(String.Format("{0}", obj_id), gfx); } else { for (int chr_n = 0; chr_n < utils.CONST_BLOCK_SIZE; chr_n++) { obj_id = tiles_data.get_block_flags_obj_id(_tiles_data.blocks[(_block_ind << 2) + chr_n]); utils.brush.Color = Color.FromArgb((CONST_ALPHA << 24) | m_clrs_arr[obj_id]); m_block_rect.X = ((chr_n & 0x01) == 0x01) ? m_block_rect.Width:0; m_block_rect.Y = ((chr_n & 0x02) == 0x02) ? m_block_rect.Height:0; gfx.FillRectangle(utils.brush, m_block_rect); } } } else if (_view_type == utils.ETileViewType.tvt_BlocksUsage) // usage { utils.brush.Color = Color.FromArgb((CONST_ALPHA << 24) | 0x00ffffff); draw_block_info(String.Format("{0}", _tiles_data.get_block_usage(( ushort )_block_ind, _scr_type)), gfx); } else if (_scr_type == data_sets_manager.EScreenDataType.sdt_Blocks2x2) { if (_view_type == utils.ETileViewType.tvt_Number) // block id { utils.brush.Color = Color.FromArgb((CONST_ALPHA << 24) | 0x00ffffff); draw_block_info(String.Format("{0:X2}", _block_ind), gfx); } } if (_img == null) { m_imagelist_blocks.Images[_block_ind] = img; } if (_gfx == null) { gfx.Dispose(); } }
public void update_tile(int _tile_ind, utils.ETileViewType _view_type, tiles_data _tiles_data, Graphics _gfx, Image _img, data_sets_manager.EScreenDataType _scr_type) { #if DEF_TILE_DRAW_FAST Image block_img; #else ushort[] blocks_arr = null; byte[] CHR_data = null; // draw a block from CHR bank sprites if (_tiles_data != null) { blocks_arr = _tiles_data.blocks; CHR_data = _tiles_data.CHR_bank; } #endif //DEF_TILE_DRAW_FAST Image img; if (_img != null) { img = _img; } else { img = m_imagelist_tiles.Images[_tile_ind]; } Graphics gfx; if (_gfx != null) { gfx = _gfx; } else { gfx = Graphics.FromImage(img); } gfx.InterpolationMode = InterpolationMode.NearestNeighbor; gfx.PixelOffsetMode = PixelOffsetMode.None; #if DEF_TILE_DRAW_FAST for (int j = 0; j < utils.CONST_TILE_SIZE; j++) { block_img = m_imagelist_blocks.Images[_tiles_data.get_tile_block(_tile_ind, j)]; gfx.DrawImage(block_img, ((j % 2) << 5), ((j >> 1) << 5), block_img.Width, block_img.Height); } #else // draw a block from CHR bank sprites for (int j = 0; j < utils.CONST_TILE_SIZE; j++) { utils.update_block_gfx(_tiles_data.get_tile_block(_tile_ind, j), blocks_arr, CHR_data, gfx, utils.CONST_BLOCKS_IMG_SIZE >> 1, utils.CONST_BLOCKS_IMG_SIZE >> 1, ((j % 2) << 5), ((j >> 1) << 5)); } #endif //DEF_TILE_DRAW_FAST if (_scr_type == data_sets_manager.EScreenDataType.sdt_Tiles4x4) { if (_view_type == utils.ETileViewType.tvt_Number) // tile id { draw_tile_info(String.Format("{0:X2}", _tile_ind), gfx); } else if (_view_type == utils.ETileViewType.tvt_TilesUsage) // usage { draw_tile_info(String.Format("{0}", _tiles_data.get_tile_usage(( ushort )_tile_ind, _scr_type)), gfx); } } if (_img == null) { m_imagelist_tiles.Images[_tile_ind] = img; } if (_gfx == null) { gfx.Dispose(); } }