void Form_DateSet_Draw(LPWindow pWindow) { uint16 i; LPControl lpControl; //Çå³ýÏÔ´æ EraseBuffer(); //½ûÖ¹»æͼ SetRedraw(FALSE); //½ûֹˢÆÁ EnableScreenFlush(FALSE); //ÉèÖÃÊÓͼ SetGdiView(pWindow->nViewPosX, pWindow->nViewPosY, pWindow->nViewSizeX, pWindow->nViewSizeY); EnableGdiView(TRUE); DrawGbText("ÈÕÆÚ", 0, 25); DrawHoriLine(0, 25+16, 240); DrawHoriLine(0, 25+18, 240); //»æÖƿؼþ for(i = 0; i < pWindow->nNbControls; i++) { lpControl = *(pWindow->pLPControls + i); if(lpControl->state & CTRL_VISABLE) { if(lpControl->state & CTRL_FOCUS) { DrawImage(Img_Up, lpControl->x, lpControl->y-13, 12, 12); DrawImage(Img_Down, lpControl->x, lpControl->y+15, 12, 12); //DrawGbText("¡ø", lpControl->x, lpControl->y-14); //DrawGbText("¡ø", lpControl->x, lpControl->y+15); InvertColor(); } lpControl->DrawFunc(lpControl); if(lpControl->state & CTRL_FOCUS) { InvertColor(); } } } DrawGbText("-", 52, 60); DrawGbText("-", 74, 60); //ʹÄÜË¢ÆÁ EnableScreenFlush(TRUE); //Ë¢ÆÁ FlushScreen(); //ʹÄÜ»æͼ SetRedraw(TRUE); }
void SystemDraw::DrawRectOp(int x, int y, int cx, int cy, Color color) { if(IsNull(color)) return; FlushText(); cairo_rectangle(cr, x, y, cx, cy); if(color == InvertColor()) { #if GTK_CHECK_VERSION(2,24,0) && (CAIRO_VERSION_MAJOR > 1 || CAIRO_VERSION_MINOR > 9) SetColor(White()); cairo_set_operator(cr, CAIRO_OPERATOR_DIFFERENCE); cairo_fill(cr); cairo_set_operator(cr, CAIRO_OPERATOR_OVER); #else if(drawable) { GdkGC *gc = gdk_gc_new(drawable); gdk_gc_set_function(gc, GDK_INVERT); Point o = GetOffset(); gdk_draw_drawable(drawable, gc, drawable, x + o.x, y + o.y, x + o.x, y + o.y, cx, cy); gdk_gc_set_function(gc, GDK_COPY); gdk_gc_destroy(gc); } #endif } else { SetColor(color); cairo_fill(cr); } }
NAMESPACE_UPP void SystemDraw::PutRect(const Rect& r, Color color) { LLOG("Ctrl::PutRect " << r << ", color " << color); Ctrl::stat_putrect++; Point p = r.TopLeft(); if(color == InvertColor()) { Ctrl::Put8(Ctrl::INVERTRECT); Ctrl::Put(r); } else { Size sz = r.GetSize(); Point dp = p - pos; if(abs(dp.x) < 256 && abs(dp.y) < 256 && sz.cx < 256 && sz.cy < 256 && 0) { Ctrl::Put8(dp.x < 0 ? dp.y < 0 ? Ctrl::RECTNN : Ctrl::RECTNP : dp.y < 0 ? Ctrl::RECTPN : Ctrl::RECTPP); Ctrl::Put8(abs(dp.x)); Ctrl::Put8(abs(dp.y)); Ctrl::Put8(sz.cx); Ctrl::Put8(sz.cy); } else { Ctrl::Put8(Ctrl::RECT); Ctrl::Put(r); } Ctrl::Put8(color.GetR()); Ctrl::Put8(color.GetG()); Ctrl::Put8(color.GetB()); } pos = p; }
void GLDraw::PutRect(const Rect& r, Color color) { if(color == InvertColor()) { glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR); glColor3f(1.0f, 1.0f, 1.0f); } else SetColor(color); glBegin(GL_TRIANGLE_STRIP); glVertex2i(r.left, r.top); glVertex2i(r.right, r.top); glVertex2i(r.left, r.bottom); glVertex2i(r.right, r.bottom); glEnd(); if(color == InvertColor()) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); }
void CColorListCtrl::CustDraw(NMHDR *pNotifyStruct, LRESULT *result) { LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW) pNotifyStruct; // cast our generic structure to bigger/specialized strc int i = 0; long lRow = 0; long lCol = 0; long lCIndex = 0; long lCelIndex = 0; long lRIndex = 0; switch(lplvcd->nmcd.dwDrawStage) { case CDDS_PREPAINT: *result = CDRF_NOTIFYITEMDRAW|CDRF_NOTIFYSUBITEMDRAW; // request notifications for individual items break; case CDDS_ITEMPREPAINT: *result = CDRF_NOTIFYSUBITEMDRAW; break; case CDDS_ITEMPREPAINT|CDDS_SUBITEM: // drawing subitem lRow = lplvcd->nmcd.dwItemSpec; //dong lCol = lplvcd->iSubItem; // cot lRIndex = findDetails(lRow,ROW); // individual cell,coloumn,row color setting lCIndex = findDetails(lCol,COL); lCelIndex = findDetails(lRow,CELL,lCol); if(lRIndex == -1 && lCIndex == -1 && lCelIndex == -1 ) { if(!bGridMode && !bAltRowMode) lplvcd->clrTextBk = GetBkColor(); } if(lRIndex != -1) lplvcd->clrTextBk = RowColors[lRIndex].cf; if(bMaskMode) // text mask mode lplvcd->clrText = InvertColor(lplvcd->clrTextBk); *result = CDRF_NEWFONT; break; default: *result = CDRF_DODEFAULT; } }
void GLDraw::PutRect(const Rect& rect, Color color) { LTIMING("PutRect"); #if 0 gl_rect.Use(); GLshort vertex[] = { rect.left, rect.top, rect.left, rect.bottom, rect.right, rect.bottom, rect.right, rect.top, }; bool inv = color == InvertColor(); if(inv) { glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR); color = Color(255, 255, 255); } else glDisable(GL_BLEND); GLubyte r = color.GetR(); GLubyte g = color.GetG(); GLubyte b = color.GetB(); glUniform4f(u_color, r / 255.0, g / 255.0, b / 255.0, 1.0); static GLushort indices[] = { 0, 1, 2, 0, 2, 3 }; glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_SHORT, GL_FALSE, 2 * sizeof(GLshort), vertex); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices); if(inv) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); else glEnable(GL_BLEND); #endif #if 1 LTIMING("PutRect"); #ifdef GL_COMB_OPT if(color != InvertColor()) { RectColor& rc = put_rect.Add(); rc.rect = rect; rc.color = color; if(put_rect.GetCount() > 100) FlushPutRect(); return; } #endif gl_rect.Use(); GLshort vertex[] = { rect.left, rect.top, rect.left, rect.bottom, rect.right, rect.bottom, rect.right, rect.top, }; bool inv = color == InvertColor(); if(inv) { glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR); color = Color(255, 255, 255); } else glDisable(GL_BLEND); GLubyte r = color.GetR(); GLubyte g = color.GetG(); GLubyte b = color.GetB(); GLubyte colors[] = { r, g, b, r, g, b, r, g, b, r, g, b, }; static GLushort indices[] = { 0, 1, 2, 0, 2, 3 }; glEnableVertexAttribArray(ATTRIB_COLOR); glVertexAttribPointer(ATTRIB_COLOR, 3, GL_UNSIGNED_BYTE, GL_FALSE, 3 * sizeof(GLubyte), colors); glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_SHORT, GL_FALSE, 2 * sizeof(GLshort), vertex); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices); glDisableVertexAttribArray(ATTRIB_COLOR); if(inv) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); else glEnable(GL_BLEND); #endif }