1 /*!
2 	@file
3 	@author		George Evmenov
4 	@date		02/2011
5 */
6 #include "BerkeliumDelegate.h"
7 #include "BerkeliumWidget.h"
8 #include "MyGUI_PointerManager.h"
9 #include <berkelium/Cursor.hpp>
10 
11 namespace MyGUI
12 {
13 
BerkeliumDelegate()14 	BerkeliumDelegate::BerkeliumDelegate() :
15 		mWindow(nullptr),
16 		mBuffer(nullptr),
17 		mWidget(nullptr)
18 	{
19 	}
20 
setWindow(Berkelium::Window * _window)21 	void BerkeliumDelegate::setWindow(Berkelium::Window* _window)
22 	{
23 		mWindow = _window;
24 	}
25 
setBuffer(helpers::Buffer * _buffer)26 	void BerkeliumDelegate::setBuffer(helpers::Buffer* _buffer)
27 	{
28 		mBuffer = _buffer;
29 	}
30 
setWidget(MyGUI::BerkeliumWidget * _widget)31 	void BerkeliumDelegate::setWidget(MyGUI::BerkeliumWidget* _widget)
32 	{
33 		mWidget = _widget;
34 	}
35 
onPaint(Berkelium::Window * win,const unsigned char * sourceBuffer,const Berkelium::Rect & sourceBufferRect,size_t numCopyRects,const Berkelium::Rect * copyRects,int dx,int dy,const Berkelium::Rect & scrollRect)36 	void BerkeliumDelegate::onPaint(
37 		Berkelium::Window *win,
38 		const unsigned char *sourceBuffer,
39 		const Berkelium::Rect &sourceBufferRect,
40 		size_t numCopyRects,
41 		const Berkelium::Rect *copyRects,
42 		int dx, int dy,
43 		const Berkelium::Rect &scrollRect)
44 	{
45 		if (mWindow == nullptr || mBuffer == nullptr)
46 			return;
47 
48 		mBuffer->scroll(dx, dy, scrollRect.left(), scrollRect.top(), scrollRect.width(), scrollRect.height());
49 
50 		for (size_t i = 0; i < numCopyRects; i++)
51 		{
52 			const Berkelium::Rect &updateRect = copyRects[i];
53 
54 			mBuffer->update((void*)sourceBuffer, updateRect.left(), updateRect.top(), updateRect.width(), updateRect.height(),
55 				updateRect.left() - sourceBufferRect.left(), updateRect.top() - sourceBufferRect.top(), sourceBufferRect.width());
56 		}
57 	}
58 
onCursorUpdated(Berkelium::Window * win,const Berkelium::Cursor & newCursor)59 	void BerkeliumDelegate::onCursorUpdated(Berkelium::Window *win, const Berkelium::Cursor& newCursor)
60 	{
61 		if (mWidget == nullptr)
62 			return;
63 
64 		std::string cursor = "arrow";
65 #if MYGUI_PLATFORM == MYGUI_PLATFORM_WIN32
66 		static HCURSOR beam_cursor = ::LoadCursor(nullptr, MAKEINTRESOURCE(IDC_IBEAM));
67 		static HCURSOR link_cursor = ::LoadCursor(nullptr, MAKEINTRESOURCE(IDC_HAND));
68 
69 		if (newCursor.GetCursor() == beam_cursor)
70 		{
71 			cursor = "beam";
72 		}
73 		else if (newCursor.GetCursor() == link_cursor)
74 		{
75 			cursor = "link";
76 		}
77 #elif  MYGUI_PLATFORM == MYGUI_PLATFORM_LINUX
78 		// TODO
79 #elif  MYGUI_PLATFORM == MYGUI_PLATFORM_APPLE
80 		// TODO
81 #endif
82 		mWidget->setPointer(cursor);
83 		MyGUI::PointerManager::getInstance().setPointer(cursor);
84 		MyGUI::PointerManager::getInstance().eventChangeMousePointer(cursor);
85 	}
86 
87 } // namespace MyGUI
88