diff --git a/misc/linux/flatpak/net.classicube.flatpak.client.metainfo.xml b/misc/linux/flatpak/net.classicube.flatpak.client.metainfo.xml index bcdbe339e..7d1cb0e06 100644 --- a/misc/linux/flatpak/net.classicube.flatpak.client.metainfo.xml +++ b/misc/linux/flatpak/net.classicube.flatpak.client.metainfo.xml @@ -108,17 +108,6 @@ https://github.com/ClassiCube/ClassiCube/releases/tag/1.1.1 - - https://github.com/ClassiCube/ClassiCube/releases/tag/1.10 - - - https://github.com/ClassiCube/ClassiCube/releases/tag/1.0.9 - - - https://github.com/ClassiCube/ClassiCube/releases/tag/1.0.8 - - - https://github.com/ClassiCube/ClassiCube/releases/tag/1.0.7 https://www.classicube.net/ diff --git a/src/Screens.c b/src/Screens.c index 9dc2f7e6f..4eeb7a8a9 100644 --- a/src/Screens.c +++ b/src/Screens.c @@ -1636,19 +1636,20 @@ static void InventoryScreen_ContextRecreated(void* screen) { s->table.vb = s->vb; Gui_MakeBodyFont(&s->font); - TableWidget_Recreate(&s->table); + TableWidget_RecreateTitle(&s->table, true); } static void InventoryScreen_MoveToSelected(struct InventoryScreen* s) { struct TableWidget* table = &s->table; - TableWidget_SetBlockTo(table, Inventory_SelectedBlock); - TableWidget_Recreate(table); - s->deferredSelect = false; - /* User is holding invalid block */ - if (table->selectedIndex == -1) { - InventoryScreen_UpdateTitle(s, Inventory_SelectedBlock); + + if (Game_ClassicMode) { + /* Original classic preserves selected block across inventory menu opens */ + TableWidget_SetToIndex(table, table->selectedIndex); + } else { + TableWidget_SetToBlock(table, Inventory_SelectedBlock); } + TableWidget_RecreateTitle(table, true); } static void InventoryScreen_Init(void* screen) { diff --git a/src/Widgets.c b/src/Widgets.c index c02cff982..5ff660a29 100644 --- a/src/Widgets.c +++ b/src/Widgets.c @@ -743,9 +743,9 @@ static void TableWidget_MoveCursorToSelected(struct TableWidget* w) { Cursor_SetPosition(x, y); } -static void TableWidget_RecreateTitle(struct TableWidget* w) { +void TableWidget_RecreateTitle(struct TableWidget* w, cc_bool force) { BlockID block; - if (w->selectedIndex == w->lastCreatedIndex) return; + if (!force && w->selectedIndex == w->lastCreatedIndex) return; if (w->blocksCount == 0) return; w->lastCreatedIndex = w->selectedIndex; @@ -858,11 +858,6 @@ static int TableWidget_MaxVertices(void* w) { return TABLE_MAX_VERTICES; } static void TableWidget_Free(void* widget) { } -void TableWidget_Recreate(struct TableWidget* w) { - w->lastCreatedIndex = -1000; - TableWidget_RecreateTitle(w); -} - static void TableWidget_Reposition(void* widget) { struct TableWidget* w = (struct TableWidget*)widget; cc_bool classic = Gui.ClassicInventory; @@ -907,7 +902,7 @@ static void TableWidget_ScrollRelative(struct TableWidget* w, int delta) { w->scroll.topRow += (index / w->blocksPerRow) - (start / w->blocksPerRow); ScrollbarWidget_ClampTopRow(&w->scroll); - TableWidget_RecreateTitle(w); + TableWidget_RecreateTitle(w, false); TableWidget_MoveCursorToSelected(w); } @@ -949,7 +944,7 @@ static int TableWidget_MouseScroll(void* widget, float delta) { if (index >= w->blocksCount) index = -1; w->selectedIndex = index; - TableWidget_RecreateTitle(w); + TableWidget_RecreateTitle(w, false); return true; } @@ -977,7 +972,7 @@ static int TableWidget_PointerMove(void* widget, int id, int x, int y) { } } } - TableWidget_RecreateTitle(w); + TableWidget_RecreateTitle(w, false); return true; } @@ -1033,6 +1028,11 @@ void TableWidget_Create(struct TableWidget* w, int sbWidth) { w->scale = 1; w->padXAcc = 0; w->padYAcc = 0; + if (!w->everCreated) { + w->everCreated = true; + w->selectedIndex = -1; + } + classic = Gui.ClassicInventory; w->paddingL = Display_ScaleX(classic ? 20 : 15); w->paddingR = Display_ScaleX(classic ? 28 : 15); @@ -1040,21 +1040,27 @@ void TableWidget_Create(struct TableWidget* w, int sbWidth) { w->paddingB = Display_ScaleY(classic ? 14 : 15); } -void TableWidget_SetBlockTo(struct TableWidget* w, BlockID block) { - int i; - w->selectedIndex = -1; +void TableWidget_SetToBlock(struct TableWidget* w, BlockID block) { + int i, index = -1; - for (i = 0; i < w->blocksCount; i++) { - if (w->blocks[i] == block) w->selectedIndex = i; + for (i = 0; i < w->blocksCount; i++) + { + if (w->blocks[i] == block) index = i; } /* When holding air, inventory should open at middle */ - if (block == BLOCK_AIR) w->selectedIndex = -1; + if (block == BLOCK_AIR) index = -1; + + TableWidget_SetToIndex(w, index); +} + +void TableWidget_SetToIndex(struct TableWidget* w, int index) { + w->selectedIndex = index; w->scroll.topRow = w->selectedIndex / w->blocksPerRow; w->scroll.topRow -= (w->rowsVisible - 1); ScrollbarWidget_ClampTopRow(&w->scroll); TableWidget_MoveCursorToSelected(w); - TableWidget_RecreateTitle(w); + TableWidget_RecreateTitle(w, true); } void TableWidget_OnInventoryChanged(struct TableWidget* w) { @@ -1066,7 +1072,7 @@ void TableWidget_OnInventoryChanged(struct TableWidget* w) { w->scroll.topRow = w->selectedIndex / w->blocksPerRow; ScrollbarWidget_ClampTopRow(&w->scroll); - TableWidget_RecreateTitle(w); + TableWidget_RecreateTitle(w, true); } diff --git a/src/Widgets.h b/src/Widgets.h index f0225f107..11e608250 100644 --- a/src/Widgets.h +++ b/src/Widgets.h @@ -102,7 +102,7 @@ struct TableWidget { int selectedIndex, cellSizeX, cellSizeY; float normBlockSize, selBlockSize; GfxResourceID vb; - cc_bool pendingClose; + cc_bool pendingClose, everCreated; float scale; float padXAcc, padYAcc; @@ -119,10 +119,11 @@ struct TableWidget { CC_NOINLINE void TableWidget_Create(struct TableWidget* w, int sbWidth); /* Sets the selected block in the table to the given block. */ /* Also adjusts scrollbar and moves cursor to be over the given block. */ -CC_NOINLINE void TableWidget_SetBlockTo(struct TableWidget* w, BlockID block); +CC_NOINLINE void TableWidget_SetToBlock(struct TableWidget* w, BlockID block); +CC_NOINLINE void TableWidget_SetToIndex(struct TableWidget* w, int index); CC_NOINLINE void TableWidget_RecreateBlocks(struct TableWidget* w); CC_NOINLINE void TableWidget_OnInventoryChanged(struct TableWidget* w); -CC_NOINLINE void TableWidget_Recreate(struct TableWidget* w); +CC_NOINLINE void TableWidget_RecreateTitle(struct TableWidget* w, cc_bool force); #define INPUTWIDGET_MAX_LINES 3