mirror of
https://github.com/Oibaf66/frodo-wii.git
synced 2024-11-10 21:55:11 +01:00
Cleanup some unused stuff and redesign text message sending (not
quite done yet, has bugs, but in theory functional)
This commit is contained in:
parent
5d6c55d4c7
commit
63b7d45688
@ -211,9 +211,10 @@ void C64::network_vblank()
|
||||
}
|
||||
}
|
||||
|
||||
char *msg = TheDisplay->GetTextMessage();
|
||||
const char *msg = TheDisplay->GetTextMessage();
|
||||
if (msg)
|
||||
remote->EncodeTextMessage(msg);
|
||||
free((void *)msg);
|
||||
|
||||
remote->EncodeJoystickUpdate(*js);
|
||||
|
||||
|
@ -29,8 +29,10 @@
|
||||
#include "Prefs.h"
|
||||
#include "C64.h"
|
||||
#include "CIA.h"
|
||||
#include "utils.hh"
|
||||
|
||||
#include "gui/gui.hh"
|
||||
#include "gui/status_bar.hh"
|
||||
#include "gui/virtual_keyboard.hh"
|
||||
|
||||
// LED states
|
||||
@ -202,9 +204,6 @@ C64Display::C64Display(C64 *the_c64) : TheC64(the_c64)
|
||||
quit_requested = false;
|
||||
speedometer_string[0] = 0;
|
||||
networktraffic_string[0] = 0;
|
||||
memset(this->text_message, 0, sizeof(this->text_message));
|
||||
this->text_message_idx = 0;
|
||||
this->entering_text_message = false;
|
||||
this->text_message_send = NULL;
|
||||
|
||||
// Open window
|
||||
@ -617,45 +616,48 @@ void C64Display::TranslateKey(SDLKey key, bool key_up, uint8 *key_matrix,
|
||||
shift_on = true;
|
||||
else if (c64_key == MATRIX(1,7) || c64_key == MATRIX(6,4))
|
||||
shift_on = false;
|
||||
else if (!key_up && this->entering_text_message)
|
||||
{
|
||||
char c = Gui::gui->kbd->keycodeToChar(c64_key | (shift_on ? 0x80 : 0) );
|
||||
|
||||
if ((size_t)this->text_message_idx >= sizeof(this->text_message) - 2 ||
|
||||
c == '\n')
|
||||
{
|
||||
this->text_message[this->text_message_idx] = '\0';
|
||||
this->text_message_send = this->text_message;
|
||||
this->text_message_idx = 0;
|
||||
this->entering_text_message = false;
|
||||
return;
|
||||
}
|
||||
if (c == '\b')
|
||||
{
|
||||
this->text_message_idx--;
|
||||
if (this->text_message_idx < 0)
|
||||
this->text_message_idx = 0;
|
||||
this->text_message[this->text_message_idx] = '\0';
|
||||
return;
|
||||
}
|
||||
|
||||
this->text_message[this->text_message_idx] = c;
|
||||
this->text_message[this->text_message_idx + 1] = '\0';
|
||||
this->text_message_idx++;
|
||||
return;
|
||||
}
|
||||
|
||||
this->UpdateKeyMatrix(c64_key, key_up, key_matrix, rev_matrix, joystick);
|
||||
}
|
||||
|
||||
char *C64Display::GetTextMessage()
|
||||
const char *C64Display::GetTextMessage()
|
||||
{
|
||||
char *out = this->text_message_send;
|
||||
const char *out = this->text_message_send;
|
||||
|
||||
this->text_message_send = NULL;
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
class TypeNetworkMessageListener : public KeyboardListener
|
||||
{
|
||||
public:
|
||||
TypeNetworkMessageListener(const char **out)
|
||||
{
|
||||
this->out = out;
|
||||
}
|
||||
|
||||
virtual void stringCallback(const char *str)
|
||||
{
|
||||
*out = (const char *)xstrdup(str);
|
||||
/* Remove thyself! */
|
||||
delete this;
|
||||
}
|
||||
|
||||
private:
|
||||
const char **out;
|
||||
};
|
||||
|
||||
void C64Display::TypeNetworkMessage()
|
||||
{
|
||||
TypeNetworkMessageListener *nl = new TypeNetworkMessageListener(&this->text_message_send);
|
||||
|
||||
Gui::gui->status_bar->queueMessage("Type message to send to peer");
|
||||
VirtualKeyboard::kbd->registerListener(nl);
|
||||
VirtualKeyboard::kbd->activate();
|
||||
}
|
||||
|
||||
|
||||
void C64Display::PollKeyboard(uint8 *key_matrix, uint8 *rev_matrix, uint8 *joystick)
|
||||
{
|
||||
SDL_Event event;
|
||||
@ -674,9 +676,9 @@ void C64Display::PollKeyboard(uint8 *key_matrix, uint8 *rev_matrix, uint8 *joyst
|
||||
|
||||
case SDLK_F10: // F10/ScrLk: Enter text (for network taunts)
|
||||
case SDLK_SCROLLOCK:
|
||||
this->entering_text_message = !this->entering_text_message;
|
||||
if (this->entering_text_message)
|
||||
this->text_message[0] = '\0';
|
||||
if (TheC64->network_connection_type == CLIENT ||
|
||||
TheC64->network_connection_type == MASTER)
|
||||
this->TypeNetworkMessage();
|
||||
break;
|
||||
|
||||
case SDLK_F11: // F11: NMI (Restore)
|
||||
|
157
Src/Display.h
157
Src/Display.h
@ -86,12 +86,9 @@ public:
|
||||
void NetworkTrafficMeter(float kb_per_s, bool has_throttled);
|
||||
uint8 *BitmapBase(void);
|
||||
int BitmapXMod(void);
|
||||
#ifdef __riscos__
|
||||
void PollKeyboard(uint8 *key_matrix, uint8 *rev_matrix, uint8 *joystick, uint8 *joystick2);
|
||||
#else
|
||||
|
||||
void PollKeyboard(uint8 *key_matrix, uint8 *rev_matrix, uint8 *joystick);
|
||||
#endif
|
||||
#if defined(HAVE_SDL)
|
||||
|
||||
void FakeKeyPress(int kc, uint8 *CIA_key_matrix, uint8 *CIA_rev_matrix);
|
||||
void TranslateKey(SDLKey key, bool key_up, uint8 *key_matrix, uint8 *rev_matrix, uint8 *joystick);
|
||||
void UpdateKeyMatrix(int c64_key, bool key_up, uint8 *key_matrix,
|
||||
@ -102,165 +99,25 @@ public:
|
||||
void Update_32(uint8 *src_pixels);
|
||||
void Update_stretched(uint8 *src_pixels);
|
||||
SDL_Surface *SurfaceFromC64Display();
|
||||
char *GetTextMessage();
|
||||
#endif
|
||||
const char *GetTextMessage();
|
||||
bool NumLock(void);
|
||||
void InitColors(uint8 *colors);
|
||||
void NewPrefs(Prefs *prefs);
|
||||
|
||||
void TypeNetworkMessage();
|
||||
|
||||
C64 *TheC64;
|
||||
|
||||
#ifdef __BEOS__
|
||||
void Pause(void);
|
||||
void Resume(void);
|
||||
#endif
|
||||
|
||||
#ifdef __riscos__
|
||||
void ModeChange(void);
|
||||
unsigned int *GetColourTable(void); // returns pointer to mode_cols
|
||||
bool CheckForUnpause(bool CheckLastState);
|
||||
|
||||
ROScreen *screen;
|
||||
Joy_Keys JoystickKeys[2]; // it's easier making the joystick keys public
|
||||
#endif
|
||||
|
||||
#if defined(__unix) || defined(GEKKO)
|
||||
bool quit_requested;
|
||||
#endif
|
||||
|
||||
|
||||
private:
|
||||
int led_state[4];
|
||||
int old_led_state[4];
|
||||
|
||||
#ifdef __BEOS__
|
||||
C64Window *the_window; // One of these is NULL
|
||||
C64Screen *the_screen;
|
||||
bool using_screen; // Flag: Using the_screen
|
||||
key_info old_key_info;
|
||||
int draw_bitmap; // Number of bitmap for the VIC to draw into
|
||||
#endif
|
||||
|
||||
#ifdef AMIGA
|
||||
void draw_led_bar(void); // Draw LED bar at the bottom of the window
|
||||
void draw_led(int num, int state); // Draw one LED
|
||||
|
||||
struct Window *the_window; // Pointer to C64 display window
|
||||
struct Screen *the_screen; // The window's screen
|
||||
struct RastPort *the_rp; // The window's RastPort
|
||||
struct VisualInfo *the_visual_info;
|
||||
struct Menu *the_menus;
|
||||
struct TextFont *led_font;
|
||||
struct TextFont *speedo_font;
|
||||
struct RastPort temp_rp; // For WritePixelArray8()
|
||||
struct BitMap *temp_bm;
|
||||
uint8 *chunky_buf; // Chunky buffer for drawing into
|
||||
LONG pens[16]; // Pens for C64 colors
|
||||
int xo, yo; // Window X/Y border size
|
||||
struct FileRequester *open_req, *save_req; // File requesters for load/save snapshot
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SDL
|
||||
char speedometer_string[16]; // Speedometer text
|
||||
char networktraffic_string[80]; // Speedometer text
|
||||
char text_message[80];
|
||||
char *text_message_send;
|
||||
int text_message_idx;
|
||||
bool entering_text_message;
|
||||
#endif
|
||||
|
||||
#ifdef __unix
|
||||
void draw_led(int num, int state); // Draw one LED
|
||||
static void pulse_handler(...); // LED error blinking
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
public:
|
||||
long ShowRequester(const char *str, const char *button1, const char *button2 = NULL);
|
||||
void WaitUntilActive();
|
||||
void NewPrefs();
|
||||
void Pause();
|
||||
void Resume();
|
||||
void Quit();
|
||||
|
||||
struct DisplayMode {
|
||||
int x;
|
||||
int y;
|
||||
int depth;
|
||||
BOOL modex;
|
||||
};
|
||||
int GetNumDisplayModes() const;
|
||||
const DisplayMode *GetDisplayModes() const;
|
||||
|
||||
private:
|
||||
// Window members.
|
||||
void ResetKeyboardState();
|
||||
BOOL MakeWindow();
|
||||
static LRESULT CALLBACK StaticWindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
long WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
static int VirtKey2C64(int virtkey, DWORD keydata);
|
||||
BOOL CalcViewPort();
|
||||
BOOL SetupWindow();
|
||||
BOOL SetupWindowMode(BOOL full_screen);
|
||||
BOOL RestoreWindow();
|
||||
BOOL ResizeWindow(int side, RECT *pRect);
|
||||
void WindowTitle();
|
||||
void CreateObjects();
|
||||
void DeleteObjects();
|
||||
|
||||
// DirectDraw management members.
|
||||
BOOL StartDirectDraw();
|
||||
BOOL ResumeDirectDraw();
|
||||
BOOL ResetDirectDraw();
|
||||
BOOL StopDirectDraw();
|
||||
static HRESULT CALLBACK EnumModesCallback(LPDDSURFACEDESC pDDSD, LPVOID lpContext);
|
||||
HRESULT EnumModesCallback(LPDDSURFACEDESC pDDSD);
|
||||
static int CompareModes(const void *e1, const void *e2);
|
||||
BOOL Fail(const char *message);
|
||||
|
||||
// DirectDraw worker members.
|
||||
BOOL SetPalettes();
|
||||
BOOL BuildColorTable();
|
||||
BOOL CopySurface(RECT &rcWork);
|
||||
BOOL FlipSurfaces();
|
||||
BOOL EraseSurfaces();
|
||||
BOOL RestoreSurfaces();
|
||||
|
||||
void draw_led_bar(void); // Draw LED bar on the window
|
||||
void draw_leds(BOOL force = false); // Draw LEDs if force or changed
|
||||
void led_rect(int n, RECT &rc, RECT &led); // Compute LED rectangle
|
||||
void InsertNextDisk(); // should be a common func
|
||||
BOOL FileNameDialog(char *prefs_path, BOOL save = false);
|
||||
void OfferSave(); // Offer chance to save changes
|
||||
|
||||
UBYTE *chunky_buf; // Chunky buffer for drawing
|
||||
BOOL active; // is application active?
|
||||
BOOL paused; // is application paused?
|
||||
BOOL waiting; // is application waiting?
|
||||
DWORD windowed_style; // style of windowed window
|
||||
DWORD fullscreen_style; // style of fullscreen window
|
||||
char failure_message[128]; // what when wrong
|
||||
int speed_index; // look ma, no hands
|
||||
BOOL show_leds; // cached prefs option
|
||||
BOOL full_screen; // cached prefs option
|
||||
BOOL in_constructor; // if we are being contructed
|
||||
BOOL in_destructor; // if we are being destroyed
|
||||
|
||||
LPDIRECTDRAW pDD; // DirectDraw object
|
||||
LPDIRECTDRAWSURFACE pPrimary; // DirectDraw primary surface
|
||||
LPDIRECTDRAWSURFACE pBack; // DirectDraw back surface
|
||||
LPDIRECTDRAWSURFACE pWork; // DirectDraw working surface
|
||||
LPDIRECTDRAWCLIPPER pClipper; // DirectDraw clipper
|
||||
LPDIRECTDRAWPALETTE pPalette; // DirectDraw palette
|
||||
|
||||
DWORD colors[256]; // our palette colors
|
||||
int colors_depth; // depth of the colors table
|
||||
#endif
|
||||
|
||||
#ifdef __riscos__
|
||||
unsigned int mode_cols[256]; // Colours in the current mode corresponding to C64's
|
||||
uint8 *bitmap;
|
||||
uint32 lastkeys[8]; // bitfield describing keys pressed last time.
|
||||
#endif
|
||||
const char *text_message_send;
|
||||
};
|
||||
|
||||
|
||||
|
@ -368,7 +368,7 @@ bool Network::DecodeDisplayUpdate(struct NetworkUpdate *src)
|
||||
return false;
|
||||
}
|
||||
|
||||
void Network::EncodeTextMessage(char *str)
|
||||
void Network::EncodeTextMessage(const char *str)
|
||||
{
|
||||
NetworkUpdate *dst = (NetworkUpdate *)this->cur_ud;
|
||||
char *p = (char*)dst->data;
|
||||
@ -914,6 +914,7 @@ bool Network::DecodeUpdate(C64Display *display, uint8 *js, MOS6581 *dst)
|
||||
}
|
||||
break;
|
||||
case TEXT_MESSAGE:
|
||||
printf("Got message: %d, %s\n", p->size, (char*)p->data);
|
||||
Gui::gui->status_bar->queueMessage((const char*)p->data);
|
||||
break;
|
||||
case REGISTER_DATA:
|
||||
|
@ -173,7 +173,7 @@ public:
|
||||
|
||||
void EncodeJoystickUpdate(Uint8 v);
|
||||
|
||||
void EncodeTextMessage(char *str);
|
||||
void EncodeTextMessage(const char *str);
|
||||
|
||||
void EnqueueSound(uint32 linecnt, uint8 addr, uint8 val);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user