void TaskMapButtonRenderer::DrawButton(Canvas &canvas, const PixelRect &rc, gcc_unused bool enabled, gcc_unused bool focused, bool pressed) const { if (task == nullptr) { canvas.ClearWhite(); return; } const PixelSize new_size(rc.right - rc.left, rc.bottom - rc.top); if (!IsBufferValid(new_size)) { if (!buffer.IsDefined()) { #ifdef ENABLE_OPENGL buffer.Create(new_size); #else buffer.Create(canvas, new_size); #endif } else buffer.Grow(new_size); size = new_size; #ifdef ENABLE_OPENGL buffer.Begin(canvas); #endif const PixelRect buffer_rc(0, 0, new_size.cx, new_size.cy); DrawTask(buffer, buffer_rc, look, *task); #ifdef ENABLE_OPENGL buffer.Commit(canvas); #endif } else { #ifdef ENABLE_OPENGL buffer.CopyTo(canvas); #endif } #ifndef ENABLE_OPENGL canvas.Copy(buffer); #endif if (pressed) { #ifdef ENABLE_OPENGL const ScopeAlphaBlend alpha_blend; canvas.DrawFilledRectangle(rc, COLOR_YELLOW.WithAlpha(80)); #else canvas.InvertRectangle(rc); #endif } }
//modifies the Buffer, by removing the Header PacketHeader ExtractHeader( char *buffer,unsigned int size ) { XNetInfo xInfo; memset(&xInfo,0,sizeof(xInfo)); if(size >= sizeof(XNetInfo)) { memcpy(&xInfo,buffer,sizeof(XNetInfo)); if(IsBufferValid((char*)&xInfo)) { //Now remove the header memmove(buffer,buffer + sizeof(XNetInfo),size - sizeof(XNetInfo)); return xInfo; } } xInfo.m_darknet_xId = -1; return xInfo; }