diff options
| author | nyamatongwe <devnull@localhost> | 2001-12-20 22:44:04 +0000 | 
|---|---|---|
| committer | nyamatongwe <devnull@localhost> | 2001-12-20 22:44:04 +0000 | 
| commit | 5cd80a8dce1c7f35546567b0e2af6bed3e1116d8 (patch) | |
| tree | 93db982c27915669db06b442c2042f8e692103f2 | |
| parent | d679ceff1769acfd5abffd4f2a43076bb68cc311 (diff) | |
| download | scintilla-mirror-5cd80a8dce1c7f35546567b0e2af6bed3e1116d8.tar.gz | |
Patch from stephan to avoid setting cursor to the same value multiple
times on GTK+ as it is retained by the window.
Minor cleanups.
| -rw-r--r-- | gtk/PlatGTK.cxx | 30 | ||||
| -rw-r--r-- | include/Platform.h | 8 | ||||
| -rw-r--r-- | src/Editor.h | 2 | ||||
| -rw-r--r-- | win32/PlatWin.cxx | 7 | 
4 files changed, 30 insertions, 17 deletions
| diff --git a/gtk/PlatGTK.cxx b/gtk/PlatGTK.cxx index cb2e020e4..7ea5fe61a 100644 --- a/gtk/PlatGTK.cxx +++ b/gtk/PlatGTK.cxx @@ -26,16 +26,16 @@  #pragma warning(disable: 4505)  #endif -static GdkFont *PFont(Font &f)  {  -	return reinterpret_cast<GdkFont *>(f.GetID());  +static GdkFont *PFont(Font &f)  { +	return reinterpret_cast<GdkFont *>(f.GetID());  } -static GtkWidget *PWidget(WindowID id) {  -	return reinterpret_cast<GtkWidget *>(id);  +static GtkWidget *PWidget(WindowID id) { +	return reinterpret_cast<GtkWidget *>(id);  } -static GtkWidget *PWidget(Window &w) {  -	return PWidget(w.GetID());  +static GtkWidget *PWidget(Window &w) { +	return PWidget(w.GetID());  }  Point Point::FromLong(long lpoint) { @@ -91,7 +91,7 @@ void Palette::WantFind(ColourPair &cp, bool want) {  void Palette::Allocate(Window &w) {  	if (allocatedPalette) {  		gdk_colormap_free_colors(gtk_widget_get_colormap(PWidget(w)), -		        reinterpret_cast<GdkColor *>(allocatedPalette),  +		        reinterpret_cast<GdkColor *>(allocatedPalette),  			allocatedLen);  		delete [](reinterpret_cast<GdkColor *>(allocatedPalette));  		allocatedPalette = 0; @@ -298,7 +298,7 @@ void SurfaceImpl::Init(SurfaceID sid) {  	Release();  	drawable = drawable_;  	gc = gdk_gc_new(drawable_); -	//gdk_gc_set_line_attributes(gc, 1,  +	//gdk_gc_set_line_attributes(gc, 1,  	//	GDK_LINE_SOLID, GDK_CAP_NOT_LAST, GDK_JOIN_BEVEL);  	createdGC = true;  	inited = true; @@ -310,7 +310,7 @@ void SurfaceImpl::InitPixMap(int width, int height, Surface *surface_) {  		ppixmap = gdk_pixmap_new(static_cast<SurfaceImpl *>(surface_)->drawable, width, height, -1);  	drawable = ppixmap;  	gc = gdk_gc_new(static_cast<SurfaceImpl *>(surface_)->drawable); -	//gdk_gc_set_line_attributes(gc, 1,  +	//gdk_gc_set_line_attributes(gc, 1,  	//	GDK_LINE_SOLID, GDK_CAP_NOT_LAST, GDK_JOIN_BEVEL);  	createdGC = true;  	inited = true; @@ -369,7 +369,7 @@ void SurfaceImpl::RectangleDraw(PRectangle rc, ColourAllocated fore, ColourAlloc  		                   rc.right - rc.left - 2, rc.bottom - rc.top - 2);  		PenColour(fore); -		// The subtraction of 1 off the width and height here shouldn't be needed but  +		// The subtraction of 1 off the width and height here shouldn't be needed but  		// otherwise a different rectangle is drawn than would be done if the fill parameter == 1  		gdk_draw_rectangle(drawable, gc, 0,  		                   rc.left, rc.top, @@ -679,6 +679,13 @@ void Window::SetFont(Font &) {  void Window::SetCursor(Cursor curs) {  	GdkCursor *gdkCurs; + +	// We don't set the cursor to same value numerous times under gtk because +	// it stores the cursor in the window once it's set +	if (curs == cursorLast) +		return; +	cursorLast = curs; +  	switch (curs) {  	case cursorText:  		gdkCurs = gdk_cursor_new(GDK_XTERM); @@ -697,9 +704,10 @@ void Window::SetCursor(Cursor curs) {  		break;  	default:  		gdkCurs = gdk_cursor_new(GDK_ARROW); +		cursorLast = cursorArrow;  		break;  	} -	 +  	gdk_window_set_cursor(PWidget(id)->window, gdkCurs);  	gdk_cursor_destroy(gdkCurs);  } diff --git a/include/Platform.h b/include/Platform.h index 80f5af2e3..b3cfcfe66 100644 --- a/include/Platform.h +++ b/include/Platform.h @@ -310,8 +310,8 @@ class Window {  protected:  	WindowID id;  public: -	Window() : id(0) {} -	Window(const Window &source) : id(source.id) {} +	Window() : id(0), cursorLast(cursorInvalid) {} +	Window(const Window &source) : id(source.id), cursorLast(cursorInvalid) {}  	virtual ~Window();  	Window &operator=(WindowID id_) {  		id = id_; @@ -329,9 +329,11 @@ public:  	void InvalidateAll();  	void InvalidateRectangle(PRectangle rc);  	virtual void SetFont(Font &font); -	enum Cursor { cursorText, cursorArrow, cursorUp, cursorWait, cursorHoriz, cursorVert, cursorReverseArrow }; +	enum Cursor { cursorInvalid, cursorText, cursorArrow, cursorUp, cursorWait, cursorHoriz, cursorVert, cursorReverseArrow };  	void SetCursor(Cursor curs);  	void SetTitle(const char *s); +private: +	Cursor cursorLast;  };  /** diff --git a/src/Editor.h b/src/Editor.h index 374e2b33f..97cb64329 100644 --- a/src/Editor.h +++ b/src/Editor.h @@ -54,6 +54,8 @@ public:  	int lines;  	enum {maxDisplayLines = 400};  	int lineStarts[maxDisplayLines]; + +	LineLayout() : numCharsInLine(0) {}  };  class SelectionText { diff --git a/win32/PlatWin.cxx b/win32/PlatWin.cxx index a5b632379..9befd3f78 100644 --- a/win32/PlatWin.cxx +++ b/win32/PlatWin.cxx @@ -723,9 +723,6 @@ void Window::SetCursor(Cursor curs) {  	case cursorText:  		::SetCursor(::LoadCursor(NULL,IDC_IBEAM));  		break; -	case cursorArrow: -		::SetCursor(::LoadCursor(NULL,IDC_ARROW)); -		break;  	case cursorUp:  		::SetCursor(::LoadCursor(NULL,IDC_UPARROW));  		break; @@ -748,6 +745,10 @@ void Window::SetCursor(Cursor curs) {  			::SetCursor(::LoadCursor(hinstPlatformRes, MAKEINTRESOURCE(IDC_MARGIN)));  		}  		break; +	case cursorArrow: +	case cursorInvalid:	// Should not occur, but just in case. +		::SetCursor(::LoadCursor(NULL,IDC_ARROW)); +		break;  	}  } | 
