void CSimpleGUIPanel::OnPaint(wxPaintEvent& WXUNUSED(event)) { wxPaintDC myDC(this); if (m_bNewNoticeAlert) { wxRect r = m_NoticesButton->GetRect(); if (m_bNoticesButtonIsRed) { CSkinSimple* pSkinSimple = wxGetApp().GetSkinManager()->GetSimple(); wxPen oldPen = myDC.GetPen(); wxBrush oldBrush = myDC.GetBrush(); int oldMode = myDC.GetBackgroundMode(); wxPen bgPen(pSkinSimple->GetNoticeAlertColor(), 3); myDC.SetBackgroundMode(wxSOLID); myDC.SetPen(bgPen); myDC.SetBrush(*wxTRANSPARENT_BRUSH); #ifdef __WXMAC__ r.Inflate(2, 2); myDC.DrawRoundedRectangle(r.x, r.y, r.width, r.height+1, m_iRedRingRadius); #elif defined(__WXMSW__) r.Inflate(3, 3); myDC.DrawRectangle(r.x, r.y, r.width, r.height); #else r.Inflate(3, 3); myDC.DrawRoundedRectangle(r.x, r.y, r.width, r.height, 6); #endif // Restore Mode, Pen and Brush myDC.SetBackgroundMode(oldMode); myDC.SetPen(oldPen); myDC.SetBrush(oldBrush); } } }
void gray_out_image_on_dc( wxDC& dc, int width, int height ) { // assuming the pixels along the edges are of the background color wxColour bgCol; dc.GetPixel( 0, 0, &bgCol ); wxPen darkPen ( wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW),1, wxSOLID ); wxPen lightPen( wxSystemSettings::GetColour(wxSYS_COLOUR_3DHIGHLIGHT),1, wxSOLID ); wxPen bgPen ( bgCol, 1, wxSOLID ); int* src = create_array( width, height, MASK_BG ); int* dest = create_array( width, height, MASK_BG ); int x, y; for ( y = 0; y != height; ++y ) { for ( x = 0; x != width; ++x ) { wxColour col; dc.GetPixel( x,y, &col ); GET_ELEM(src,x,y) = MAKE_INT_COLOR( col.Red(), col.Green(), col.Blue() ); } } gray_out_pixmap( src, dest, width, height ); for ( y = 0; y != height; ++y ) { for ( x = 0; x != width; ++x ) { int mask = GET_ELEM(dest,x,y); switch (mask) { case MASK_BG : { dc.SetPen( bgPen ); dc.DrawPoint( x,y ); break; } case MASK_DARK : { dc.SetPen( darkPen ); dc.DrawPoint( x,y ); break; } case MASK_LIGHT : { dc.SetPen( lightPen ); dc.DrawPoint( x,y ); break; } default : break; } } } delete [] src; delete [] dest; }
void CSlideShowPanel::OnPaint(wxPaintEvent& WXUNUSED(event)) { wxPaintDC dc(this); #if HIDEDEFAULTSLIDE int numSlides = 0; TaskSelectionData* selData = ((CSimpleTaskPanel*)GetParent())->GetTaskSelectionData(); if (selData) { numSlides = (int)selData->slideShowFileNames.size(); } #if TESTALLDESCRIPTIONS // For testing numSlides = 0; #endif // TESTALLDESCRIPTIONS if (numSlides > 0) #endif // HIDEDEFAULTSLIDE { int w, h, x; wxPen oldPen = dc.GetPen(); wxBrush oldBrush = dc.GetBrush(); int oldMode = dc.GetBackgroundMode(); wxPen bgPen(*wxBLACK, 2*SLIDESHOWBORDER+1); dc.SetBackgroundMode(wxSOLID); dc.SetPen(bgPen); dc.SetBrush(*wxBLACK_BRUSH); GetSize(&w, &h); x = (w - SLIDESHOWWIDTH) / 2; dc.DrawRectangle(x, SLIDESHOWBORDER, SLIDESHOWWIDTH, SLIDESHOWHEIGHT); // Restore Mode, Pen and Brush dc.SetBackgroundMode(oldMode); dc.SetPen(oldPen); dc.SetBrush(oldBrush); if(m_SlideBitmap.Ok()) { dc.DrawBitmap(m_SlideBitmap, (w - m_SlideBitmap.GetWidth())/2, (h - m_SlideBitmap.GetHeight())/2 ); } } if (!m_bHasBeenDrawn) { m_bHasBeenDrawn = true; if (numSlides <= 0) { SetDescriptionText(); } } }
void Menu::display(){ CRect rect(openedUpperLeft.x, openedUpperLeft.y, getBottomRight().x, getBottomRight().y); Graphics::createMemDc(&rect); openButton.display(); CPen pen(0,1,style->getBGColorRGB()); CBrush brush(style->getBGColorRGB()); CPen bgPen(0,1,GlobalSettings::backgroundClr.getRGB()); CBrush bgBrush(GlobalSettings::backgroundClr.getRGB()); CPen lblPen(0,1,style->labelBGColor.getRGB()); CBrush lblBrush(style->labelBGColor.getRGB()); Graphics::drawRectangle(nullptr, openedUpperLeft.x, openedUpperLeft.y, upperLeft.x, getBottomRight().y, &bgBrush, &bgPen, true, true, true); Graphics::drawRectangle(nullptr,this->openButton.getBottomRight().x, this->upperLeft.y, this->getBottomRight().x, this->getBottomRight().y, &brush, &pen, true, true, true); if(!style->labelBGTransparent){ Graphics::drawRectangle(nullptr,openButton.getBottomRight().x, upperLeft.y, getBottomRight().x, upperLeft.y + style->labelHeight, &lblBrush, &lblPen, true, true, true); } Graphics::drawText(nullptr, openButton.getBottomRight().x, upperLeft.y, getBottomRight().x, upperLeft.y + style->labelHeight, font, label, style->labelColor, true); this->navigationButton.display(); Graphics::drawRectangle(nullptr,openButton.getBottomRight().x, navigationButton.getBottomRight().y, getBottomRight().x, navigationButton.getBottomRight().y + style->panelWidthUnderNavButton, &lblBrush, &lblPen, true, true, true); vector<ControlElement*>* list = &elements[menuIndex]; for(size_t i = 0; i < list->size(); i++){ ControlElement* elem = list->at(i); elem->display(); } Graphics::deleteMemDc(); displayedAfterMove = true; }
void CSlideShowPanel::OnPaint(wxPaintEvent& WXUNUSED(event)) { wxPaintDC dc(this); #if HIDEDEFAULTSLIDE int numSlides = 0; TaskSelectionData* selData = ((CSimpleTaskPanel*)GetParent())->GetTaskSelectionData(); if (selData) { numSlides = (int)selData->slideShowFileNames.size(); } #if TESTALLDESCRIPTIONS // For testing numSlides = 0; #endif // TESTALLDESCRIPTIONS if (numSlides > 0) #endif // HIDEDEFAULTSLIDE { int w, h; wxPen oldPen = dc.GetPen(); wxBrush oldBrush = dc.GetBrush(); int oldMode = dc.GetBackgroundMode(); wxPen bgPen(*wxLIGHT_GREY, 3); dc.SetBackgroundMode(wxSOLID); dc.SetPen(bgPen); dc.SetBrush(*wxBLACK_BRUSH); GetSize(&w, &h); dc.DrawRectangle(0, 0, w, h); // Restore Mode, Pen and Brush dc.SetBackgroundMode(oldMode); dc.SetPen(oldPen); dc.SetBrush(oldBrush); if(m_SlideBitmap.Ok()) { dc.DrawBitmap(m_SlideBitmap, (w - m_SlideBitmap.GetWidth())/2, (h - m_SlideBitmap.GetHeight())/2 ); } } }
// Linux does not reliably generate EraseBackground // events here, so use Paint events void CSimplePanelBase::OnPaint(wxPaintEvent& /*event*/) { wxPaintDC dc(this); if (!m_GotBGBitMap) { MakeBGBitMap(); } dc.DrawBitmap(m_TaskPanelBGBitMap, 0, 0); wxPen oldPen= dc.GetPen(); wxBrush oldBrush = dc.GetBrush(); int oldMode = dc.GetBackgroundMode(); wxCoord w, h; wxPen bgPen(*wxLIGHT_GREY, 3); wxBrush bgBrush(*wxLIGHT_GREY, wxTRANSPARENT); dc.SetBackgroundMode(wxSOLID); dc.SetPen(bgPen); dc.SetBrush(bgBrush); dc.GetSize(&w, &h); dc.DrawRoundedRectangle(0, 0, w, h, RECTANGLERADIUS); #ifdef __WXMAC__ // Mac progress bar can be hard to see on a colored // background, so put it on a white background wxRect* progressRect = GetProgressRect(); if (progressRect) { dc.SetPen(*wxBLACK_PEN); dc.SetBrush(*wxWHITE_BRUSH); dc.DrawRoundedRectangle(progressRect->x, progressRect->y, progressRect->width, progressRect->height, 2); } #endif // Restore Mode, Pen and Brush dc.SetBackgroundMode(oldMode); dc.SetPen(oldPen); dc.SetBrush(oldBrush); }
void CSimpleGUIPanel::SetBackgroundBitmap() { wxLogTrace(wxT("Function Start/End"), wxT("CSimpleGUIPanel::SetBackgroundBitmap - Function Start")); CSkinSimple* pSkinSimple = wxGetApp().GetSkinManager()->GetSimple(); wxASSERT(pSkinSimple); wxASSERT(wxDynamicCast(pSkinSimple, CSkinSimple)); wxColour bgColor(*pSkinSimple->GetBackgroundImage()->GetBackgroundColor()); SetBackgroundColour(bgColor); wxRect panelRect = GetRect(); m_bmpBg = wxBitmap(panelRect.width, panelRect.height); wxMemoryDC dc(m_bmpBg); wxBrush bgBrush(bgColor); dc.SetBackground(bgBrush); dc.Clear(); #ifdef __WXMAC__ // Work around an apparent bug in wxMemoryDC::Clear() in wxCarbon 2.9.4 // TODO: remove this when the wxCarbon bug is fixed dc.SetBrush(bgBrush); wxPen bgPen(bgColor); dc.SetPen(bgPen); dc.DrawRectangle(panelRect); #endif int srcX, srcY, destX, destY, h, w; wxBitmap* srcBmp = pSkinSimple->GetBackgroundImage()->GetBitmap(); wxSize srcSize = srcBmp->GetSize(); switch(pSkinSimple->GetBackgroundImage()->GetHorizontalAnchor()) { case BKGD_ANCHOR_HORIZ_LEFT: default: srcX = 0; destX = 0; break; case BKGD_ANCHOR_HORIZ_CENTER: if (panelRect.width < srcSize.GetWidth()) { srcX = (srcSize.GetWidth() - panelRect.width) / 2; destX = 0; } else { srcX = 0; destX = (panelRect.width - srcSize.GetWidth()) / 2; } break; case BKGD_ANCHOR_HORIZ_RIGHT: if (panelRect.width < srcSize.GetWidth()) { srcX = (srcSize.GetWidth() - panelRect.width); destX = 0; } else { srcX = 0; destX = (panelRect.width - srcSize.GetWidth()); } break; } w = wxMin(panelRect.width, srcSize.GetWidth()); switch(pSkinSimple->GetBackgroundImage()->GetVerticalAnchor()) { case BKGD_ANCHOR_VERT_TOP: default: srcY = 0; destY = 0; break; case BKGD_ANCHOR_VERT_CENTER: if (panelRect.height < srcSize.GetHeight()) { srcY = (srcSize.GetHeight() - panelRect.height) / 2; destY = 0; } else { srcY = 0; destY = (panelRect.height - srcSize.GetHeight()) / 2; } break; case BKGD_ANCHOR_VERT_BOTTOM: if (panelRect.height < srcSize.GetHeight()) { srcY = (srcSize.GetHeight() - panelRect.height); destY = 0; } else { srcY = 0; destY = (panelRect.height - srcSize.GetHeight()); } break; } h = wxMin(panelRect.height, srcSize.GetHeight()); wxMemoryDC srcDC(*srcBmp); dc.Blit(destX, destY, w, h, &srcDC, srcX, srcY, wxCOPY); // dc.DrawBitmap(*pSkinSimple->GetBackgroundImage()->GetBitmap(), 0, 0, false); wxLogTrace(wxT("Function Start/End"), wxT("CSimpleGUIPanel::SetBackgroundBitmap - Function End")); }
// Create a background bitmap simulating partial transparency void CSimplePanelBase::MakeBGBitMap() { wxRect r; wxBitmap rawBmp; wxBitmap whiteBmp; wxImage bgImage; wxImage whiteImage; register unsigned char *bgImagePixels; register unsigned char *whitePixels; register int i, j, k; CSimpleGUIPanel* backgroundPanel = (CSimpleGUIPanel*)GetParent(); wxPen bgPen(*wxWHITE, 1, wxTRANSPARENT); wxBrush bgBrush(*wxWHITE); CSkinSimple* pSkinSimple = wxGetApp().GetSkinManager()->GetSimple(); wxASSERT(pSkinSimple); wxASSERT(wxDynamicCast(pSkinSimple, CSkinSimple)); int white_weight = pSkinSimple->GetPanelOpacity(); int image_weight = MAX_OPACITY - white_weight; // Workaround for CSimpleGUIPanel not reliably getting // Paint or EraseBackground events under Linux #if (!(defined(__WXMSW_) || defined(__WXMAC__))) backgroundPanel->SetBackgroundBitmap(); #endif GetPosition(&r.x, &r.y); GetSize(&r.width, &r.height); wxBitmap *bgBmp(backgroundPanel->GetBackgroundBitMap()); wxRect bgRect(0, 0, bgBmp->GetWidth(), bgBmp->GetHeight()); if (bgRect.Contains(r)) { rawBmp = bgBmp->GetSubBitmap(r); } else { fprintf(stderr, "SimpleGUI background image is too small\n"); rawBmp = wxBitmap(r.width, r.height); wxMemoryDC dc(rawBmp); wxPen rawPen(*wxBLACK, 1, wxTRANSPARENT); wxBrush rawBrush(*wxBLACK); dc.SetBackgroundMode(wxSOLID); dc.SetPen(rawPen); dc.SetBrush(rawBrush); dc.DrawRectangle(0, 0, r.width, r.height); } whiteBmp = wxBitmap(r.width, r.height); wxMemoryDC dc(whiteBmp); dc.SetBackgroundMode(wxSOLID); dc.SetPen(bgPen); dc.SetBrush(bgBrush); dc.DrawRoundedRectangle(0, 0, r.width, r.height, RECTANGLERADIUS); bgImage = rawBmp.ConvertToImage(); bgImagePixels = bgImage.GetData(); // RGBRGBRGB... whiteImage = whiteBmp.ConvertToImage(); whitePixels = whiteImage.GetData(); // RGBRGBRGB... for (i=0; i<r.width; ++i) { for (j=0; j<r.height; ++j) { if (*whitePixels) { k = (((unsigned int)*bgImagePixels * image_weight) + ((unsigned int)*whitePixels++ * white_weight)); *bgImagePixels++ = k / MAX_OPACITY; k = (((unsigned int)*bgImagePixels * image_weight) + ((unsigned int)*whitePixels++ * white_weight)); *bgImagePixels++ = k / MAX_OPACITY; k = (((unsigned int)*bgImagePixels * image_weight) + ((unsigned int)*whitePixels++ * white_weight)); *bgImagePixels++ = k / MAX_OPACITY; } else { bgImagePixels += 3; whitePixels += 3; } } } m_TaskPanelBGBitMap = wxBitmap(bgImage); m_GotBGBitMap = true; }