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