+ if (M_BRUSHDATA && M_BRUSHDATA->m_hBrush == 0L)
+ {
+ SIZEL vSize = {0, 0};
+ DEVOPENSTRUC vDop = {0L, "DISPLAY", NULL, 0L, 0L, 0L, 0L, 0L, 0L};
+ HDC hDC = ::DevOpenDC( vHabmain
+ ,OD_MEMORY
+ ,"*"
+ ,5L
+ ,(PDEVOPENDATA)&vDop
+ ,NULLHANDLE
+ );
+ M_BRUSHDATA->m_hBrush = (WXHPEN)::GpiCreatePS( vHabmain
+ ,hDC
+ ,&vSize
+ ,PU_PELS | GPIT_MICRO | GPIA_ASSOC
+ );
+ }
+ if (M_BRUSHDATA)
+ {
+ //
+ // Set the color table to RGB mode
+ //
+ if (!::GpiCreateLogColorTable( (HPS)M_BRUSHDATA->m_hBrush
+ ,0L
+ ,LCOLF_RGB
+ ,0L
+ ,0L
+ ,NULL
+ ))
+ {
+ vError = ::WinGetLastError(vHabmain);
+ sError = wxPMErrorToStr(vError);
+ wxLogError(_T("Unable to set current color table to RGB mode. Error: %s\n"), sError.c_str());
+ return false;
+ }
+
+ if (M_BRUSHDATA->m_nStyle==wxTRANSPARENT)
+ {
+ return true;
+ }
+ COLORREF vPmColour = 0L;
+
+ vPmColour = M_BRUSHDATA->m_vColour.GetPixel() ;
+
+ M_BRUSHDATA->m_vBundle.usSet = LCID_DEFAULT;
+ switch (M_BRUSHDATA->m_nStyle)
+ {
+ case wxTRANSPARENT:
+ M_BRUSHDATA->m_hBrush = NULL; // Must always select a suitable background brush
+ break; // - could choose white always for a quick solution
+
+ case wxBDIAGONAL_HATCH:
+ M_BRUSHDATA->m_vBundle.usSymbol = PATSYM_DIAG3;
+ break;
+
+ case wxCROSSDIAG_HATCH:
+ M_BRUSHDATA->m_vBundle.usSymbol = PATSYM_DIAGHATCH;
+ break;
+
+ case wxFDIAGONAL_HATCH:
+ M_BRUSHDATA->m_vBundle.usSymbol = PATSYM_DIAG1;
+ break;
+
+ case wxCROSS_HATCH:
+ M_BRUSHDATA->m_vBundle.usSymbol = PATSYM_HATCH;
+ break;
+
+ case wxHORIZONTAL_HATCH:
+ M_BRUSHDATA->m_vBundle.usSymbol = PATSYM_HORIZ;
+ break;
+
+ case wxVERTICAL_HATCH:
+ M_BRUSHDATA->m_vBundle.usSymbol = PATSYM_VERT;
+ break;
+
+ case wxSTIPPLE:
+ if (M_BRUSHDATA->m_vStipple.Ok())
+ {
+ ::GpiSetBitmapId( M_BRUSHDATA->m_hBrush
+ ,(USHORT)M_BRUSHDATA->m_vStipple.GetHBITMAP()
+ ,(USHORT)M_BRUSHDATA->m_vStipple.GetId()
+ );
+ ::GpiSetPatternSet( M_BRUSHDATA->m_hBrush
+ ,(USHORT)M_BRUSHDATA->m_vStipple.GetId()
+ );
+ }
+ else
+ M_BRUSHDATA->m_vBundle.usSymbol = PATSYM_SOLID;
+ break ;
+
+ case wxSOLID:
+ default:
+ M_BRUSHDATA->m_vBundle.usSymbol = PATSYM_SOLID;
+ break;
+ }
+#ifdef WXDEBUG_CREATE
+ if (M_BRUSHDATA->m_hBrush==NULL) wxError("Cannot create brush","Internal error") ;
+#endif
+ M_BRUSHDATA->m_vBundle.lColor = vPmColour;
+ M_BRUSHDATA->m_vBundle.lBackColor = RGB_WHITE;
+ M_BRUSHDATA->m_vBundle.usMixMode = FM_OVERPAINT;
+ M_BRUSHDATA->m_vBundle.usBackMixMode = BM_OVERPAINT;
+
+ bOk = (bool)::GpiSetAttrs( M_BRUSHDATA->m_hBrush
+ ,PRIM_AREA
+ ,ABB_COLOR | ABB_BACK_COLOR | ABB_MIX_MODE | ABB_BACK_MIX_MODE |
+ ABB_SET | ABB_SYMBOL | ABB_REF_POINT
+ ,ABB_SET | ABB_SYMBOL | ABB_REF_POINT
+ ,&M_BRUSHDATA->m_vBundle
+ );
+ if (!bOk)
+ {
+ vError = ::WinGetLastError(vHabmain);
+ sError = wxPMErrorToStr(vError);
+ wxLogError(_T("Can't set Gpi attributes for an AREABUNDLE. Error: %s\n"), sError.c_str());
+ }
+ return bOk;
+ }
+ return false;
+} // end of wxBrush::RealizeResource
+
+WXHANDLE wxBrush::GetResourceHandle() const
+{
+ if (!M_BRUSHDATA)
+ return 0;
+ return (WXHANDLE)M_BRUSHDATA->m_hBrush;
+} // end of wxBrush::GetResourceHandle