Skip to content

Commit

Permalink
Handle skImageFromPngResource null result
Browse files Browse the repository at this point in the history
  • Loading branch information
alex-osm committed Apr 17, 2024
1 parent c471e0d commit 71610bc
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 48 deletions.
13 changes: 7 additions & 6 deletions Sources/Controllers/Map/Layers/OABaseVectorLinesLayer.mm
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,7 @@ - (void)initLayer

_currentGraphPosition = std::make_shared<OsmAnd::MapMarkersCollection>();
_currentGraphXAxisPositions = std::make_shared<OsmAnd::MapMarkersCollection>();



_xAxisLocationIcon = [OANativeUtilities skImageFromPngResource:@"map_mapillary_location"];

OsmAnd::MapMarkerBuilder locationMarkerBuilder;
Expand Down Expand Up @@ -170,9 +169,10 @@ - (void) setVectorLineProvider:(std::shared_ptr<OsmAnd::VectorLinesCollection> &
canvas.drawCircle(bitmapSize / 2, bitmapSize / 2, (bitmapSize - strokeWidth) / 2, paint);

const auto arrowImage = [OANativeUtilities skImageFromPngResource:@"map_direction_arrow_small"];
canvas.drawImage(arrowImage,
(bitmapSize - arrowImage->width()) / 2.0f,
(bitmapSize - arrowImage->height()) / 2.0f);
if (arrowImage)
canvas.drawImage(arrowImage,
(bitmapSize - arrowImage->width()) / 2.0f,
(bitmapSize - arrowImage->height()) / 2.0f);

canvas.flush();
return bitmap.asImage();
Expand Down Expand Up @@ -259,7 +259,8 @@ - (void) showCurrentStatisticsLocation:(OATrackChartPoints *)trackPoints

for (CLLocation *location in trackPoints.xAxisPoints)
{
xAxisMarkerBuilder.addOnMapSurfaceIcon(_locationIconKey, OsmAnd::SingleSkImage(_xAxisLocationIcon));
if (_xAxisLocationIcon)
xAxisMarkerBuilder.addOnMapSurfaceIcon(_locationIconKey, OsmAnd::SingleSkImage(_xAxisLocationIcon));
const auto& marker = xAxisMarkerBuilder.buildAndAddToCollection(_currentGraphXAxisPositions);
marker->setPosition(OsmAnd::Utilities::convertLatLonTo31(OsmAnd::LatLon(location.coordinate.latitude, location.coordinate.longitude)));
}
Expand Down
78 changes: 40 additions & 38 deletions Sources/Core/OAMapMarkersCollection.mm
Original file line number Diff line number Diff line change
Expand Up @@ -119,44 +119,46 @@
// SpriteMapSymbol with pinIconBitmap as an icon

sk_sp<SkImage> pinIcon([OANativeUtilities skImageFromPngResource:@"icon_star_fill"]);

const std::shared_ptr<OsmAnd::BillboardRasterMapSymbol> pinIconSymbol(new OsmAnd::BillboardRasterMapSymbol(
symbolsGroup));
pinIconSymbol->order = order++;
pinIconSymbol->image = pinIcon;
pinIconSymbol->size = OsmAnd::PointI(pinIcon->width(), pinIcon->height());
pinIconSymbol->contentClass = OsmAnd::RasterMapSymbol::ContentClass::Icon;
pinIconSymbol->content = QString().sprintf(
"markerGroup(%p:%p)->pinIconBitmap:%p",
this,
symbolsGroup.get(),
pinIcon.get());
pinIconSymbol->languageId = OsmAnd::LanguageId::Invariant;

pinIconSymbol->position31 = OsmAnd::Utilities::convertLatLonTo31(OsmAnd::LatLon(50.4486, 30.51348));
//pinIconSymbol->offset = OsmAnd::PointI(0, 0);
pinIconSymbol->isHidden = false;
//pinIconSymbol->modulationColor = OsmAnd::FColorARGB();

/*
std::shared_ptr<const OsmAnd::MapPrimitiviser::TextSymbol> textSymbol(new OsmAnd::MapPrimitiviser::TextSymbol());
const std::shared_ptr<OsmAnd::SymbolRasterizer::RasterizedSpriteSymbol> pinCaptionSymbol(new OsmAnd::SymbolRasterizer::RasterizedSpriteSymbol(symbolsGroup));
pinCaptionSymbol->order = order++;
pinCaptionSymbol->contentClass = OsmAnd::RasterMapSymbol::ContentClass::Caption;
pinCaptionSymbol->content = QString("Test Тест Надпись");
pinCaptionSymbol->languageId = OsmAnd::LanguageId::Invariant;
pinCaptionSymbol->position31 = OsmAnd::Utilities::convertLatLonTo31(OsmAnd::LatLon(50.4486, 30.51348));
//pinCaptionSymbol->offset = OsmAnd::PointI(0, 0);
pinCaptionSymbol->isHidden = false;
//pinCaptionSymbol->modulationColor = OsmAnd::FColorARGB();
*/


symbolsGroup->symbols.push_back(pinIconSymbol);
//symbolsGroup->symbols.push_back(pinCaptionSymbol);
if (pinIcon)
{
const std::shared_ptr<OsmAnd::BillboardRasterMapSymbol> pinIconSymbol(new OsmAnd::BillboardRasterMapSymbol(
symbolsGroup));
pinIconSymbol->order = order++;
pinIconSymbol->image = pinIcon;
pinIconSymbol->size = OsmAnd::PointI(pinIcon->width(), pinIcon->height());
pinIconSymbol->contentClass = OsmAnd::RasterMapSymbol::ContentClass::Icon;
pinIconSymbol->content = QString().sprintf(
"markerGroup(%p:%p)->pinIconBitmap:%p",
this,
symbolsGroup.get(),
pinIcon.get());
pinIconSymbol->languageId = OsmAnd::LanguageId::Invariant;

pinIconSymbol->position31 = OsmAnd::Utilities::convertLatLonTo31(OsmAnd::LatLon(50.4486, 30.51348));
//pinIconSymbol->offset = OsmAnd::PointI(0, 0);
pinIconSymbol->isHidden = false;
//pinIconSymbol->modulationColor = OsmAnd::FColorARGB();

/*
std::shared_ptr<const OsmAnd::MapPrimitiviser::TextSymbol> textSymbol(new OsmAnd::MapPrimitiviser::TextSymbol());
const std::shared_ptr<OsmAnd::SymbolRasterizer::RasterizedSpriteSymbol> pinCaptionSymbol(new OsmAnd::SymbolRasterizer::RasterizedSpriteSymbol(symbolsGroup));
pinCaptionSymbol->order = order++;
pinCaptionSymbol->contentClass = OsmAnd::RasterMapSymbol::ContentClass::Caption;
pinCaptionSymbol->content = QString("Test Тест Надпись");
pinCaptionSymbol->languageId = OsmAnd::LanguageId::Invariant;
pinCaptionSymbol->position31 = OsmAnd::Utilities::convertLatLonTo31(OsmAnd::LatLon(50.4486, 30.51348));
//pinCaptionSymbol->offset = OsmAnd::PointI(0, 0);
pinCaptionSymbol->isHidden = false;
//pinCaptionSymbol->modulationColor = OsmAnd::FColorARGB();
*/


symbolsGroup->symbols.push_back(pinIconSymbol);
//symbolsGroup->symbols.push_back(pinCaptionSymbol);
}
}

outData.reset(new OsmAnd::IMapKeyedSymbolsProvider::Data(tmpStr.get(), symbolsGroup));
Expand Down
3 changes: 3 additions & 0 deletions Sources/Core/OAMapillaryTilesProvider.mm
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,9 @@
const std::shared_ptr<const OsmAnd::MvtReader::Tile>& geometryTile,
SkCanvas& canvas)
{
if (!_image)
return;

int dzoom = req.zoom - getZoomForRequest(req);
double mult = (int) pow(2.0, dzoom);
const auto tileSize31 = (1u << (OsmAnd::ZoomLevel::MaxZoomLevel - req.zoom));
Expand Down
2 changes: 2 additions & 0 deletions Sources/Core/OAOsmNotesMapLayerProvider.mm
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,8 @@
const auto iconClosed = [OANativeUtilities getScaledSkImage:[OANativeUtilities skImageFromPngResource:@"map_osm_note_resolved"]
scaleFactor:_symbolsScaleFactor];
QList<std::shared_ptr<OsmAnd::MapSymbolsGroup>> mapSymbolsGroups;
if (!iconOpen || !iconClosed)
return mapSymbolsGroups;

for (const auto note : _notesCache)
{
Expand Down
15 changes: 11 additions & 4 deletions Sources/Helpers/OANativeUtilities.mm
Original file line number Diff line number Diff line change
Expand Up @@ -58,13 +58,20 @@ @implementation OANativeUtilities

+ (sk_sp<SkImage>) skImageFromPngResource:(NSString *)resourceName
{
NSString *resourcePath = nil;
if ([UIScreen mainScreen].scale > 2.0f)
resourceName = [resourceName stringByAppendingString:@"@3x"];
resourcePath = [[NSBundle mainBundle] pathForResource:[resourceName stringByAppendingString:@"@3x"] ofType:@"png"];
else if ([UIScreen mainScreen].scale > 1.0f)
resourceName = [resourceName stringByAppendingString:@"@2x"];
resourcePath = [[NSBundle mainBundle] pathForResource:[resourceName stringByAppendingString:@"@2x"] ofType:@"png"];
else
resourcePath = [[NSBundle mainBundle] pathForResource:resourceName ofType:@"png"];

if (resourcePath == nil)
resourcePath = [[NSBundle mainBundle] pathForResource:[resourceName stringByAppendingString:@"@2x"] ofType:@"png"];

if (resourcePath == nil)
resourcePath = [[NSBundle mainBundle] pathForResource:[resourceName stringByAppendingString:@"@3x"] ofType:@"png"];

const auto resourcePath = [[NSBundle mainBundle] pathForResource:resourceName
ofType:@"png"];
if (resourcePath == nil)
return nullptr;

Expand Down

0 comments on commit 71610bc

Please sign in to comment.