/***************************************************** ** ** PdfPainter --- setBrush ** ******************************************************/ void PdfPainter::setBrush( const wxBrush &b ) { // TODO howto scale width und height if ( b.GetStyle() == wxSTIPPLE ) { wxImage image; wxBitmap *bitmap = b.GetStipple(); if ( bitmap && bitmap->IsOk()) { image = bitmap->ConvertToImage(); double width = image.GetWidth() / 3; double height = image.GetHeight() / 3; // setup a hash value for the image wxString s = createImageHash( &image ); pdf->AddPattern( s, image, width, height ); drawmode = wxPDF_STYLE_FILL; pdf->SetFillPattern( s ); pdf->SetDrawPattern( s ); } } else if ( b.GetStyle() != wxTRANSPARENT && b.GetColour().IsOk() ) setBrushColor( b.GetColour() ); else { drawmode = wxPDF_STYLE_DRAW; } }
void wxGenericBrush::Set( const wxBrush &brush ) { wxCHECK_RET(Ok() && brush.Ok(), wxT("Invalid generic brush")); SetColour(brush.GetColour()); M_GBRUSHDATA->m_style = brush.GetStyle(); wxBitmap* stipple = brush.GetStipple(); if (stipple && stipple->Ok()) M_GBRUSHDATA->m_stipple = *stipple; }
void ocpnDC::SetBackground( const wxBrush &brush ) { if( dc ) dc->SetBackground( brush ); else { #ifdef ocpnUSE_GL glcanvas->SetBackgroundColour( brush.GetColour() ); #endif } }
//--------------------------------------------------------------------------- void wxPagedWindow::DrawPaperBar( twTabInfo& tab, int x, int y, wxBrush& brush, wxPen& pen, wxDC& dc ) { wxPoint poly[4]; // draw organizer-style paper outlet poly[0].x = x - mTabTrianGap; poly[0].y = y; poly[1].x = x + mTabTrianGap; poly[1].y = y + tab.mDims.y-1; poly[2].x = x + tab.mDims.x - mTabTrianGap; poly[2].y = y + tab.mDims.y-1; poly[3].x = x + tab.mDims.x + mTabTrianGap; poly[3].y = y; dc.SetPen( pen ); dc.SetBrush( brush ); dc.DrawPolygon( 4, poly ); long w,h; // set select default font of the window into it's device context //dc.SetFont( GetLabelingFont() ); dc.SetTextBackground( brush.GetColour() ); dc.GetTextExtent(tab.mText, &w, &h ); if ( tab.HasImg() ) { wxMemoryDC tmpDc; tmpDc.SelectObject( tab.GetImg() ); dc.Blit( x + mTitleHorizGap, y + ( tab.mDims.y - tab.ImgHeight() ) / 2, tab.ImgWidth(), tab.ImgHeight(), &tmpDc, 0, 0, wxCOPY ); } if ( tab.HasText() ) { int tx = x + mTitleHorizGap + tab.ImgWidth() + tab.ImageToTxtGap(mImageTextGap); dc.DrawText( tab.GetText(), tx, y + ( tab.mDims.y - h ) / 2 ); } } // wxPagedWindow::DrawPaperBar()
void StateEvaluationTreePanel::drawIndicatorAtArea(wxDC &DC, IndicatorStyle const &Style, wxCoord X, wxCoord Y, wxCoord W, wxCoord H) { auto const Kind = Style.GetKind(); auto const FG = Style.GetForeground(); wxPen const PrevPen = DC.GetPen(); wxBrush const PrevBrush = DC.GetBrush(); switch (Kind) { case IndicatorStyle::EKind::Plain: DC.SetPen(wxPen{FG, Settings.PenWidth}); DC.DrawLine(X, Y+H, X+W, Y+H); break; case IndicatorStyle::EKind::Box: DC.SetPen(wxPen{FG, Settings.PenWidth}); DC.DrawRectangle(X, Y, W, H); break; case IndicatorStyle::EKind::StraightBox: // Many DCs don't support alpha at all, so manually calculate an alpha // against the background colour. auto const BG = PrevBrush.GetColour(); double const Alpha = (double)Style.GetAlpha() / 255; double const OutlineAlpha = (double)Style.GetOutlineAlpha() / 255; DC.SetPen(wxPen{ wxColour(wxColour::AlphaBlend(FG.Red(), BG.Red(), OutlineAlpha), wxColour::AlphaBlend(FG.Green(), BG.Green(), OutlineAlpha), wxColour::AlphaBlend(FG.Blue(), BG.Blue(), OutlineAlpha)), Settings.PenWidth}); DC.SetBrush(wxBrush{ wxColour(wxColour::AlphaBlend(FG.Red(), BG.Red(), Alpha), wxColour::AlphaBlend(FG.Green(), BG.Green(), Alpha), wxColour::AlphaBlend(FG.Blue(), BG.Blue(), Alpha))}); DC.DrawRectangle(X, Y, W, H); break; } DC.SetPen(PrevPen); DC.SetBrush(PrevBrush); }
static void LINKAGEMODE wxImageFloodFill(wxImage *image, wxCoord x, wxCoord y, const wxBrush & fillBrush, const wxColour& testColour, int style) { /* A diamond flood-fill using a circular queue system. Each pixel surrounding the current pixel is added to the queue if it meets the criteria, then is retrieved in its turn. Code originally based on http://www.drawit.co.nz/Developers.htm, with explicit permission to use this for wxWidgets granted by Andrew Empson (no copyright claimed) */ int width = image->GetWidth(); int height = image->GetHeight(); //Draw using a pen made from the current brush colour //Potentially allows us to use patterned flood fills in future code wxColour fillColour = fillBrush.GetColour(); unsigned char r = fillColour.Red(); unsigned char g = fillColour.Green(); unsigned char b = fillColour.Blue(); //initial test : if (style == wxFLOOD_SURFACE) { //if wxFLOOD_SURFACE, if fill colour is same as required, we don't do anything if ( image->GetRed(x,y) != r || image->GetGreen(x,y) != g || image->GetBlue (x,y) != b ) { //prepare memory for queue //queue save, start, read size_t *qs, *qst, *qr; //queue size (physical) long qSz= height * width * 2; qst = new size_t [qSz]; //temporary x and y locations int xt, yt; for (int i=0; i < qSz; i++) qst[i] = 0; // start queue qs=qr=qst; *qs=xt=x; qs++; *qs=yt=y; qs++; image->SetRGB(xt,yt,r,g,b); //Main queue loop while(qr!=qs) { //Add new members to queue //Above current pixel if(MatchPixel(image,xt,yt-1,width,height,testColour)) { *qs=xt; qs++; *qs=yt-1; qs++; image->SetRGB(xt,yt-1,r,g,b); //Loop back to beginning of queue if(qs>=(qst+qSz)) qs=qst; } //Below current pixel if(MatchPixel(image,xt,yt+1,width,height,testColour)) { *qs=xt; qs++; *qs=yt+1; qs++; image->SetRGB(xt,yt+1,r,g,b); if(qs>=(qst+qSz)) qs=qst; } //Left of current pixel if(MatchPixel(image,xt-1,yt,width,height,testColour)) { *qs=xt-1; qs++; *qs=yt; qs++; image->SetRGB(xt-1,yt,r,g,b); if(qs>=(qst+qSz)) qs=qst; } //Right of current pixel if(MatchPixel(image,xt+1,yt,width,height,testColour)) { *qs=xt+1; qs++; *qs=yt; qs++; image->SetRGB(xt+1,yt,r,g,b); if(qs>=(qst+qSz)) qs=qst; } //Retrieve current queue member qr+=2; //Loop back to the beginning if(qr>=(qst+qSz)) qr=qst; xt=*qr; yt=*(qr+1); //Go Back to beginning of loop } delete[] qst; } } else { //style is wxFLOOD_BORDER // fill up to testColor border - if already testColour don't do anything if ( image->GetRed(x,y) != testColour.Red() || image->GetGreen(x,y) != testColour.Green() || image->GetBlue(x,y) != testColour.Blue() ) { //prepare memory for queue //queue save, start, read size_t *qs, *qst, *qr; //queue size (physical) long qSz= height * width * 2; qst = new size_t [qSz]; //temporary x and y locations int xt, yt; for (int i=0; i < qSz; i++) qst[i] = 0; // start queue qs=qr=qst; *qs=xt=x; qs++; *qs=yt=y; qs++; image->SetRGB(xt,yt,r,g,b); //Main queue loop while (qr!=qs) { //Add new members to queue //Above current pixel if(!MatchBoundaryPixel(image,xt,yt-1,width,height,fillColour,testColour)) { *qs=xt; qs++; *qs=yt-1; qs++; image->SetRGB(xt,yt-1,r,g,b); //Loop back to beginning of queue if(qs>=(qst+qSz)) qs=qst; } //Below current pixel if(!MatchBoundaryPixel(image,xt,yt+1,width,height,fillColour,testColour)) { *qs=xt; qs++; *qs=yt+1; qs++; image->SetRGB(xt,yt+1,r,g,b); if(qs>=(qst+qSz)) qs=qst; } //Left of current pixel if(!MatchBoundaryPixel(image,xt-1,yt,width,height,fillColour,testColour)) { *qs=xt-1; qs++; *qs=yt; qs++; image->SetRGB(xt-1,yt,r,g,b); if(qs>=(qst+qSz)) qs=qst; } //Right of current pixel if(!MatchBoundaryPixel(image,xt+1,yt,width,height,fillColour,testColour)) { *qs=xt+1; qs++; *qs=yt; qs++; image->SetRGB(xt+1,yt,r,g,b); if(qs>=(qst+qSz)) qs=qst; } //Retrieve current queue member qr+=2; //Loop back to the beginning if(qr>=(qst+qSz)) qr=qst; xt=*qr; yt=*(qr+1); //Go Back to beginning of loop } delete[] qst; } } //all done, }
wxString xsBrushPropIO::ToString(wxBrush value) { return wxString::Format(wxT("%s %d"), xsColourPropIO::ToString(value.GetColour()).c_str(), value.GetStyle()); }
void ocpnDC::SetBackground( const wxBrush &brush ) { if( dc ) dc->SetBackground( brush ); else glcanvas->SetBackgroundColour( brush.GetColour() ); }
virtual void SetBrush(const wxBrush& brush) override { wxBrush newbrush = brush; newbrush.SetColour(PivotColour(brush.GetColour())); wxMirrorDC::SetBrush(newbrush); }
static void SetColor(unsigned char color[4], const wxBrush &brush) { const wxColour &c = brush.GetColour(); color[0] = c.Red(), color[1] = c.Green(), color[2] = c.Blue(), color[3] = 255; }