mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-10 07:49:57 -04:00
ios: add flags in servers list
This commit is contained in:
parent
c891f8d656
commit
cfaa57ade8
@ -553,6 +553,11 @@ void LBackend_TableReposition(struct LTable* w) {
|
|||||||
LTable_ClampTopRow(w);
|
LTable_ClampTopRow(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LBackend_TableFlagAdded(struct LTable* w) {
|
||||||
|
/* TODO: Only redraw flags */
|
||||||
|
LWidget_Draw(w);
|
||||||
|
}
|
||||||
|
|
||||||
/* Draws background behind column headers */
|
/* Draws background behind column headers */
|
||||||
static void LTable_DrawHeaderBackground(struct LTable* w) {
|
static void LTable_DrawHeaderBackground(struct LTable* w) {
|
||||||
BitmapCol gridColor = BitmapCol_Make(20, 20, 10, 255);
|
BitmapCol gridColor = BitmapCol_Make(20, 20, 10, 255);
|
||||||
|
@ -48,8 +48,9 @@ void LBackend_SliderDraw(struct LSlider* w);
|
|||||||
|
|
||||||
void LBackend_TableInit(struct LTable* w);
|
void LBackend_TableInit(struct LTable* w);
|
||||||
void LBackend_TableUpdate(struct LTable* w);
|
void LBackend_TableUpdate(struct LTable* w);
|
||||||
void LBackend_TableDraw(struct LTable* w);
|
|
||||||
void LBackend_TableReposition(struct LTable* w);
|
void LBackend_TableReposition(struct LTable* w);
|
||||||
|
void LBackend_TableFlagAdded(struct LTable* w);
|
||||||
|
void LBackend_TableDraw(struct LTable* w);
|
||||||
|
|
||||||
void LBackend_TableMouseDown(struct LTable* w, int idx);
|
void LBackend_TableMouseDown(struct LTable* w, int idx);
|
||||||
void LBackend_TableMouseUp(struct LTable* w, int idx);
|
void LBackend_TableMouseUp(struct LTable* w, int idx);
|
||||||
|
@ -1401,8 +1401,7 @@ static void ServersScreen_Tick(struct LScreen* s_) {
|
|||||||
|
|
||||||
count = FetchFlagsTask.count;
|
count = FetchFlagsTask.count;
|
||||||
LWebTask_Tick(&FetchFlagsTask.Base);
|
LWebTask_Tick(&FetchFlagsTask.Base);
|
||||||
/* TODO: Only redraw flags */
|
if (count != FetchFlagsTask.count) LBackend_TableFlagAdded(&s->table);
|
||||||
if (count != FetchFlagsTask.count) LWidget_Draw(&s->table);
|
|
||||||
|
|
||||||
if (!FetchServersTask.Base.working) return;
|
if (!FetchServersTask.Base.working) return;
|
||||||
LWebTask_Tick(&FetchServersTask.Base);
|
LWebTask_Tick(&FetchServersTask.Base);
|
||||||
|
14
src/LWeb.c
14
src/LWeb.c
@ -569,10 +569,6 @@ void FetchUpdateTask_Run(cc_bool release, int buildIndex) {
|
|||||||
struct FetchFlagsData FetchFlagsTask;
|
struct FetchFlagsData FetchFlagsTask;
|
||||||
static int flagsCount, flagsCapacity;
|
static int flagsCount, flagsCapacity;
|
||||||
|
|
||||||
struct Flag {
|
|
||||||
struct Bitmap bmp;
|
|
||||||
char country[2];
|
|
||||||
};
|
|
||||||
static struct Flag* flags;
|
static struct Flag* flags;
|
||||||
|
|
||||||
/* Scales up flag bitmap if necessary */
|
/* Scales up flag bitmap if necessary */
|
||||||
@ -595,14 +591,16 @@ static void FetchFlagsTask_Scale(struct Bitmap* bmp) {
|
|||||||
|
|
||||||
static void FetchFlagsTask_DownloadNext(void);
|
static void FetchFlagsTask_DownloadNext(void);
|
||||||
static void FetchFlagsTask_Handle(cc_uint8* data, cc_uint32 len) {
|
static void FetchFlagsTask_Handle(cc_uint8* data, cc_uint32 len) {
|
||||||
|
struct Flag* flag = &flags[FetchFlagsTask.count];
|
||||||
struct Stream s;
|
struct Stream s;
|
||||||
cc_result res;
|
cc_result res;
|
||||||
|
|
||||||
Stream_ReadonlyMemory(&s, data, len);
|
Stream_ReadonlyMemory(&s, data, len);
|
||||||
res = Png_Decode(&flags[FetchFlagsTask.count].bmp, &s);
|
res = Png_Decode(&flag->bmp, &s);
|
||||||
if (res) Logger_SysWarn(res, "decoding flag");
|
if (res) Logger_SysWarn(res, "decoding flag");
|
||||||
|
flag->meta = NULL;
|
||||||
|
|
||||||
FetchFlagsTask_Scale(&flags[FetchFlagsTask.count].bmp);
|
FetchFlagsTask_Scale(&flag->bmp);
|
||||||
FetchFlagsTask.count++;
|
FetchFlagsTask.count++;
|
||||||
FetchFlagsTask_DownloadNext();
|
FetchFlagsTask_DownloadNext();
|
||||||
}
|
}
|
||||||
@ -651,12 +649,12 @@ void FetchFlagsTask_Add(const struct ServerInfo* server) {
|
|||||||
FetchFlagsTask_DownloadNext();
|
FetchFlagsTask_DownloadNext();
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Bitmap* Flags_Get(const struct ServerInfo* server) {
|
struct Flag* Flags_Get(const struct ServerInfo* server) {
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < FetchFlagsTask.count; i++) {
|
for (i = 0; i < FetchFlagsTask.count; i++) {
|
||||||
if (flags[i].country[0] != server->country[0]) continue;
|
if (flags[i].country[0] != server->country[0]) continue;
|
||||||
if (flags[i].country[1] != server->country[1]) continue;
|
if (flags[i].country[1] != server->country[1]) continue;
|
||||||
return &flags[i].bmp;
|
return &flags[i];
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
13
src/LWeb.h
13
src/LWeb.h
@ -1,6 +1,7 @@
|
|||||||
#ifndef CC_LWEB_H
|
#ifndef CC_LWEB_H
|
||||||
#define CC_LWEB_H
|
#define CC_LWEB_H
|
||||||
#include "Http.h"
|
#include "Http.h"
|
||||||
|
#include "Bitmap.h"
|
||||||
/* Implements asynchronous web tasks for the launcher.
|
/* Implements asynchronous web tasks for the launcher.
|
||||||
Copyright 2014-2021 ClassiCube | Licensed under BSD-3
|
Copyright 2014-2021 ClassiCube | Licensed under BSD-3
|
||||||
*/
|
*/
|
||||||
@ -41,6 +42,13 @@ struct ServerInfo {
|
|||||||
char _softBuffer[STRING_SIZE];
|
char _softBuffer[STRING_SIZE];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Represents a country flag */
|
||||||
|
struct Flag {
|
||||||
|
struct Bitmap bmp;
|
||||||
|
char country[2]; /* ISO 3166-1 alpha-2 */
|
||||||
|
void* meta; /* Backend specific meta */
|
||||||
|
};
|
||||||
|
|
||||||
struct LWebTask {
|
struct LWebTask {
|
||||||
cc_bool completed; /* Whether the task has finished executing. */
|
cc_bool completed; /* Whether the task has finished executing. */
|
||||||
cc_bool working; /* Whether the task is currently in progress, or is scheduled to be. */
|
cc_bool working; /* Whether the task is currently in progress, or is scheduled to be. */
|
||||||
@ -115,10 +123,11 @@ extern struct FetchFlagsData {
|
|||||||
/* Number of flags downloaded. */
|
/* Number of flags downloaded. */
|
||||||
int count;
|
int count;
|
||||||
} FetchFlagsTask;
|
} FetchFlagsTask;
|
||||||
|
|
||||||
/* Asynchronously downloads the flag associated with the given server's country. */
|
/* Asynchronously downloads the flag associated with the given server's country. */
|
||||||
void FetchFlagsTask_Add(const struct ServerInfo* server);
|
void FetchFlagsTask_Add(const struct ServerInfo* server);
|
||||||
/* Gets the bitmap for the flag associated with the given server's country. */
|
/* Gets the country flag associated with the given server's country. */
|
||||||
struct Bitmap* Flags_Get(const struct ServerInfo* server);
|
struct Flag* Flags_Get(const struct ServerInfo* server);
|
||||||
/* Frees all flag bitmaps. */
|
/* Frees all flag bitmaps. */
|
||||||
void Flags_Free(void);
|
void Flags_Free(void);
|
||||||
|
|
||||||
|
@ -467,9 +467,9 @@ void LSlider_SetProgress(struct LSlider* w, int progress) {
|
|||||||
*------------------------------------------------------TableWidget--------------------------------------------------------*
|
*------------------------------------------------------TableWidget--------------------------------------------------------*
|
||||||
*#########################################################################################################################*/
|
*#########################################################################################################################*/
|
||||||
static void FlagColumn_Draw(struct ServerInfo* row, struct DrawTextArgs* args, struct LTableCell* cell) {
|
static void FlagColumn_Draw(struct ServerInfo* row, struct DrawTextArgs* args, struct LTableCell* cell) {
|
||||||
struct Bitmap* bmp = Flags_Get(row);
|
struct Flag* flag = Flags_Get(row);
|
||||||
if (!bmp) return;
|
if (!flag) return;
|
||||||
Drawer2D_BmpCopy(&Launcher_Framebuffer, cell->x + flagXOffset, cell->y + flagYOffset, bmp);
|
Drawer2D_BmpCopy(&Launcher_Framebuffer, cell->x + flagXOffset, cell->y + flagYOffset, &flag->bmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void NameColumn_Draw(struct ServerInfo* row, struct DrawTextArgs* args, struct LTableCell* cell) {
|
static void NameColumn_Draw(struct ServerInfo* row, struct DrawTextArgs* args, struct LTableCell* cell) {
|
||||||
|
@ -655,11 +655,20 @@ static NSString* cellID = @"CC_Cell";
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct ServerInfo* server = Servers_Get([indexPath row]);
|
struct ServerInfo* server = Servers_Get([indexPath row]);
|
||||||
|
struct Flag* flag = Flags_Get(server);
|
||||||
|
|
||||||
char descBuffer[128];
|
char descBuffer[128];
|
||||||
cc_string desc = String_FromArray(descBuffer);
|
cc_string desc = String_FromArray(descBuffer);
|
||||||
String_Format2(&desc, "%i/%i players, up for ", &server->players, &server->maxPlayers);
|
String_Format2(&desc, "%i/%i players, up for ", &server->players, &server->maxPlayers);
|
||||||
LTable_FormatUptime(&desc, server->uptime);
|
LTable_FormatUptime(&desc, server->uptime);
|
||||||
|
|
||||||
|
if (flag && !flag->meta && flag->bmp.scan0) {
|
||||||
|
UIImage* img = ToUIImage(&flag->bmp);
|
||||||
|
flag->meta = CFBridgingRetain(img);
|
||||||
|
}
|
||||||
|
if (flag && flag->meta)
|
||||||
|
cell.imageView.image = (__bridge UIImage*)flag->meta;
|
||||||
|
|
||||||
cell.textLabel.text = ToNSString(&server->name);
|
cell.textLabel.text = ToNSString(&server->name);
|
||||||
cell.detailTextLabel.text = ToNSString(&desc);//[ToNSString(&desc) stringByAppendingString:@"\nLine2"];
|
cell.detailTextLabel.text = ToNSString(&desc);//[ToNSString(&desc) stringByAppendingString:@"\nLine2"];
|
||||||
return cell;
|
return cell;
|
||||||
@ -855,6 +864,12 @@ void LBackend_TableUpdate(struct LTable* w) {
|
|||||||
[tbl reloadData];
|
[tbl reloadData];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO only redraw flags
|
||||||
|
void LBackend_TableFlagAdded(struct LTable* w) {
|
||||||
|
UITableView* tbl = (__bridge UITableView*)w->meta;
|
||||||
|
[tbl reloadData];
|
||||||
|
}
|
||||||
|
|
||||||
void LBackend_TableDraw(struct LTable* w) { }
|
void LBackend_TableDraw(struct LTable* w) { }
|
||||||
void LBackend_TableReposition(struct LTable* w) { }
|
void LBackend_TableReposition(struct LTable* w) { }
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user