diff options
| -rw-r--r-- | gui/console.h | 38 | ||||
| -rw-r--r-- | gui/debugger.cpp | 5 | ||||
| -rw-r--r-- | gui/debugger.h | 4 | 
3 files changed, 41 insertions, 6 deletions
| diff --git a/gui/console.h b/gui/console.h index 8079e2620b..70f3d7c6f1 100644 --- a/gui/console.h +++ b/gui/console.h @@ -31,11 +31,44 @@ namespace GUI {  class ScrollBarWidget; +/* + FIXME #1: The console dialog code has some fundamental problems.  + First of, note the conflict between the (constant) value kCharsPerLine, and the + (variable) value _pageWidth. Look a bit at the code get familiar with them, + then return... + Now, why don't we just drop kCharsPerLine? Because of the problem of resizing! + When the user changes the scaler, the console will get resized. If the dialog + becomes smaller because of this, we may have to rewrap text. If the resolution + is then increased again, we'd end up with garbled content. +  + One can now either ignore this problem (and modify our code accordingly to  + implement this simple rewrapping -- we currently don't do that at all!). +  + Or, one can go and implement a more complete console, by replacing the + _buffer by a real line buffer -- an arrach of char* pointers. + This will allow one to implement resizing perfectly, but has the drawback + of making things like scrolling, drawing etc. more complicated. +  + Either way, the current situation is bad, and we should resolve it one way + or the other (and if you can think of a thirds, feel free to suggest it). +  +  +  + FIXME #2: Another problem is that apparently _pageWidth isn't computed quite + correctly. The current line ends well before reaching the right side of the + console dialog. That's irritating and should be fixed. +  +  + FIXME #3: The scroll bar is not shown initially, but the area it would  + occupy is not used for anything else. As a result, the gap described above + becomes even wider and thus even more irritating. +*/  class ConsoleDialog : public Dialog {  public:  	typedef bool (*InputCallbackProc)(ConsoleDialog *console, const char *input, void *refCon);  	typedef bool (*CompletionCallbackProc)(ConsoleDialog* console, const char *input, char*& completion, void *refCon); +protected:  	enum {  		kBufferSize	= 32768,  		kCharsPerLine = 128, @@ -44,7 +77,6 @@ public:  		kHistorySize = 20  	}; -protected:  	const Graphics::Font *_font;  	char	_buffer[kBufferSize]; @@ -123,6 +155,10 @@ public:  		_completionCallbackProc = proc;  		_completionCallbackRefCon = refCon;  	} +	 +	int getCharsPerLine() { +		return _pageWidth; +	}  protected:  	inline char &buffer(int idx) { diff --git a/gui/debugger.cpp b/gui/debugger.cpp index cde8b22a03..e31d7fc771 100644 --- a/gui/debugger.cpp +++ b/gui/debugger.cpp @@ -366,6 +366,7 @@ bool Debugger::Cmd_Exit(int argc, const char **argv) {  // nicely word-wrapped.  bool Debugger::Cmd_Help(int argc, const char **argv) { +	const int charsPerLine = _debuggerDialog->getCharsPerLine();  	int width, size, i;  	DebugPrintf("Commands are:\n"); @@ -373,7 +374,7 @@ bool Debugger::Cmd_Help(int argc, const char **argv) {  	for (i = 0; i < _dcmd_count; i++) {  		size = strlen(_dcmds[i].name) + 1; -		if ((width + size) >= GUI::ConsoleDialog::kCharsPerLine) { +		if ((width + size) >= charsPerLine) {  			DebugPrintf("\n");  			width = size;  		} else @@ -390,7 +391,7 @@ bool Debugger::Cmd_Help(int argc, const char **argv) {  		for (i = 0; i < _dvar_count; i++) {  			size = strlen(_dvars[i].name) + 1; -			if ((width + size) >= GUI::ConsoleDialog::kCharsPerLine) { +			if ((width + size) >= charsPerLine) {  				DebugPrintf("\n");  				width = size;  			} else diff --git a/gui/debugger.h b/gui/debugger.h index 7b07b1bca3..568c4e3bc9 100644 --- a/gui/debugger.h +++ b/gui/debugger.h @@ -101,15 +101,14 @@ protected:  	int _frame_countdown;  	bool _detach_now; +private:  	// TODO: Consider replacing the following two arrays by a Hashmap -  	int _dvar_count;  	DVar _dvars[256];  	int _dcmd_count;  	DCmd _dcmds[256]; -private:  	bool _isAttached;  	char *_errStr;  	bool _firstTime; @@ -129,7 +128,6 @@ protected:  private: -//protected:  	void detach();  	void enter(); | 
