Authored by Obrand69

Fixed tiles region notification refactoring. Using delegate instead of notification.

Removed CoreLocation as was previously added by mistake.
/*
* RMFoundation.h
* MapView
*
* Created by David Bainbridge on 10/28/08.
*
*/
#define RMLatLong CLLocationCoordinate2D
typedef struct {
double x, y;
} RMXYPoint;
typedef struct {
double width, height;
} RMXYSize;
typedef struct {
RMXYPoint origin;
RMXYSize size;
} RMXYRect;
typedef struct {
CLLocationCoordinate2D northWest;
CLLocationCoordinate2D southEast;
} RMLatLongBounds;
RMXYPoint RMScaleXYPointAboutPoint(RMXYPoint point, float factor, RMXYPoint pivot);
RMXYRect RMScaleXYRectAboutPoint (RMXYRect rect, float factor, RMXYPoint pivot);
RMXYPoint RMTranslateXYPointBy (RMXYPoint point, RMXYSize delta);
RMXYRect RMTranslateXYRectBy (RMXYRect rect, RMXYSize delta);
RMXYPoint RMXYMakePoint (double x, double y);
RMXYRect RMXYMakeRect (double x, double y, double width, double height);
/*
* RMFoundation.h
* MapView
*
* Created by David Bainbridge on 10/28/08.
*
*/
#define RMLatLong CLLocationCoordinate2D
typedef struct {
double x, y;
} RMXYPoint;
typedef struct {
double width, height;
} RMXYSize;
typedef struct {
RMXYPoint origin;
RMXYSize size;
} RMXYRect;
RMXYPoint RMScaleXYPointAboutPoint(RMXYPoint point, float factor, RMXYPoint pivot);
RMXYRect RMScaleXYRectAboutPoint (RMXYRect rect, float factor, RMXYPoint pivot);
RMXYPoint RMTranslateXYPointBy (RMXYPoint point, RMXYSize delta);
RMXYRect RMTranslateXYRectBy (RMXYRect rect, RMXYSize delta);
RMXYPoint RMXYMakePoint (double x, double y);
RMXYRect RMXYMakeRect (double x, double y, double width, double height);
... ...
... ... @@ -13,6 +13,12 @@
#import <TargetConditionals.h>
#if TARGET_OS_IPHONE
#import <CoreLocation/CoreLocation.h>
typedef struct {
CLLocationCoordinate2D northWest;
CLLocationCoordinate2D southEast;
} RMLatLongBounds;
#else
/* From CoreLocation by Apple inc. Copyright 2008 Apple Computer, Inc. All rights reserved. */
... ...
... ... @@ -605,13 +605,13 @@ static BOOL _performExpensiveOperations = YES;
{
if(delegateHasRegionUpdate)
{
RMLatLongBounds locationBounds = [self getCoordinateBounds:newLoadedBounds];
RMLatLongBounds locationBounds = [self getCoordinateBounds:region];
NSLog(@"===> AFTER CONVERSION - BOUNDS: NW Lat: %lf NW Lon:%lf SW Lat:%lf SW Lon:%lf",
locationBounds.northWest.latitude,locationBounds.northWest.longitude,
locationBounds.southEast.latitude, locationBounds.southEast.longitude);
[tilesUpdateDelegate regionUpdate(locationBounds.northWest.latitude,locationBounds.northWest.longitude,
locationBounds.southEast.latitude, locationBounds.southEast.longitude);
[tilesUpdateDelegate regionUpdate:locationBounds.northWest.latitude NWLon:locationBounds.northWest.longitude
SELat:locationBounds.southEast.latitude SELon:locationBounds.southEast.longitude];
}
}
- (void) printDebuggingInformation
... ...
<<<<<<< .mine
//
// TimeImageSet.m
// Images
... ... @@ -34,7 +33,7 @@ NSString* const RMResumeExpensiveOperations = @"RMResumeExpensiveOperations";
{
if (![self initWithContent: nil])
return nil;
return self;
}
... ... @@ -49,7 +48,7 @@ NSString* const RMResumeExpensiveOperations = @"RMResumeExpensiveOperations";
loadedTiles.origin.tile = RMTileDummy();
suppressLoading = NO;
return self;
}
... ... @@ -61,28 +60,27 @@ NSString* const RMResumeExpensiveOperations = @"RMResumeExpensiveOperations";
-(void) clearLoadedBounds
{
loadedBounds = CGRectMake(0, 0, 0, 0);
// loadedTiles.origin.tile = RMTileDummy();
// loadedTiles.origin.tile = RMTileDummy();
}
-(BOOL) screenIsLoaded
{
// RMTileRect targetRect = [content tileBounds];
// RMTileRect targetRect = [content tileBounds];
BOOL contained = CGRectContainsRect(loadedBounds, [content screenBounds]);
int targetZoom = (int)([[content mercatorToTileProjection] calculateNormalisedZoomFromScale:[content scale]]);
if (contained == NO)
{
// NSLog(@"reassembling because its not contained");
// NSLog(@"reassembling because its not contained");
}
if (targetZoom != loadedZoom)
{
// NSLog(@"reassembling because target zoom = %f, loaded zoom = %d", targetZoom, loadedZoom);
// NSLog(@"reassembling because target zoom = %f, loaded zoom = %d", targetZoom, loadedZoom);
}
return contained && targetZoom == loadedZoom;
}
-(void) updateLoadedImages
{
if (suppressLoading)
... ... @@ -94,30 +92,30 @@ NSString* const RMResumeExpensiveOperations = @"RMResumeExpensiveOperations";
if ([self screenIsLoaded])
return;
// NSLog(@"assemble count = %d", [[content imagesOnScreen] count]);
// NSLog(@"assemble count = %d", [[content imagesOnScreen] count]);
RMTileRect newTileRect = [content tileBounds];
RMTileImageSet *images = [content imagesOnScreen];
CGRect newLoadedBounds = [images addTiles:newTileRect ToDisplayIn:[content screenBounds]];
[content tilesUpdatedRegions:newLoadedBounds];
if (!RMTileIsDummy(loadedTiles.origin.tile))
[images removeTiles:loadedTiles];
// NSLog(@"-> count = %d", [images count]);
// NSLog(@"-> count = %d", [images count]);
loadedBounds = newLoadedBounds;
loadedZoom = newTileRect.origin.tile.zoom;
loadedTiles = newTileRect;
[content tilesUpdatedRegion:newLoadedBounds];
}
- (void)moveBy: (CGSize) delta
{
// NSLog(@"loadedBounds %f %f %f %f -> ", loadedBounds.origin.x, loadedBounds.origin.y, loadedBounds.size.width, loadedBounds.size.height);
// NSLog(@"loadedBounds %f %f %f %f -> ", loadedBounds.origin.x, loadedBounds.origin.y, loadedBounds.size.width, loadedBounds.size.height);
loadedBounds = RMTranslateCGRectBy(loadedBounds, delta);
// NSLog(@" -> %f %f %f %f", loadedBounds.origin.x, loadedBounds.origin.y, loadedBounds.size.width, loadedBounds.size.height);
// NSLog(@" -> %f %f %f %f", loadedBounds.origin.x, loadedBounds.origin.y, loadedBounds.size.width, loadedBounds.size.height);
[self updateLoadedImages];
}
... ... @@ -135,7 +133,7 @@ NSString* const RMResumeExpensiveOperations = @"RMResumeExpensiveOperations";
- (void) setSuppressLoading: (BOOL) suppress
{
suppressLoading = suppress;
if (suppress == NO)
[self updateLoadedImages];
}
... ... @@ -152,184 +150,3 @@ NSString* const RMResumeExpensiveOperations = @"RMResumeExpensiveOperations";
//}
@end
=======
//
// TimeImageSet.m
// Images
//
// Created by Joseph Gentle on 29/08/08.
// Copyright 2008 __MyCompanyName__. All rights reserved.
//
#import "RMTileLoader.h"
#import "RMTileImage.h"
#import "RMTileSource.h"
#import "RMPixel.h"
#import "RMMercatorToScreenProjection.h"
#import "RMFractalTileProjection.h"
#import "RMTileImageSet.h"
#import "RMTileCache.h"
NSString * const RMMapNewTilesBoundsNotification = @"NewTilesBounds";
NSString* const RMMapImageRemovedFromScreenNotification = @"RMMapImageRemovedFromScreen";
NSString* const RMMapImageAddedToScreenNotification = @"RMMapImageAddedToScreen";
NSString* const RMSuspendExpensiveOperations = @"RMSuspendExpensiveOperations";
NSString* const RMResumeExpensiveOperations = @"RMResumeExpensiveOperations";
@implementation RMTileLoader
@synthesize loadedBounds, loadedZoom;
-(id) init
{
if (![self initWithContent: nil])
return nil;
return self;
}
-(id) initWithContent: (RMMapContents *)_contents
{
if (![super init])
return nil;
content = _contents;
[self clearLoadedBounds];
loadedTiles.origin.tile = RMTileDummy();
suppressLoading = NO;
return self;
}
-(void) dealloc
{
[super dealloc];
}
-(void) clearLoadedBounds
{
loadedBounds = CGRectMake(0, 0, 0, 0);
// loadedTiles.origin.tile = RMTileDummy();
}
-(BOOL) screenIsLoaded
{
// RMTileRect targetRect = [content tileBounds];
BOOL contained = CGRectContainsRect(loadedBounds, [content screenBounds]);
int targetZoom = (int)([[content mercatorToTileProjection] calculateNormalisedZoomFromScale:[content scale]]);
if (contained == NO)
{
// NSLog(@"reassembling because its not contained");
}
if (targetZoom != loadedZoom)
{
// NSLog(@"reassembling because target zoom = %f, loaded zoom = %d", targetZoom, loadedZoom);
}
return contained && targetZoom == loadedZoom;
}
-(void) announceNewBounds
{
//NSLog(@"===> TILES LOADED. X:%lf Y:%lf WIDTH:%lf HEIGHT:%lf",newLoadedBounds.origin.x, newLoadedBounds.origin.y, newLoadedBounds.size.width, newLoadedBounds.size.height);
CLLocationCoordinate2DBounds locationBounds = [content getCoordinateBounds:loadedBounds];
//NSLog(@"===> AFTER CONVERSION - BOUNDS: NW Lat: %lf NW Lon:%lf SW Lat:%lf SW Lon:%lf",
// locationBounds.northWest.latitude,locationBounds.northWest.longitude,
// locationBounds.southEast.latitude, locationBounds.southEast.longitude);
CLLocation *NWLocation = [[CLLocation alloc] initWithLatitude:locationBounds.northWest.latitude longitude:locationBounds.northWest.longitude];
CLLocation *SELocation = [[CLLocation alloc] initWithLatitude:locationBounds.southEast.latitude longitude:locationBounds.southEast.longitude];
NSArray *keys = [NSArray arrayWithObjects:@"NWBounds", @"SEBounds", nil];
NSArray *objects = [NSArray arrayWithObjects:NWLocation, SELocation, nil];
NSDictionary *tilesBounds = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
[NWLocation release];
[SELocation release];
// Send notification
[[NSNotificationCenter defaultCenter] postNotificationName:RMMapNewTilesBoundsNotification
object:self
userInfo:tilesBounds];
}
-(void) updateLoadedImages
{
if (suppressLoading)
return;
if ([content mercatorToTileProjection] == nil || [content mercatorToScreenProjection] == nil)
return;
if ([self screenIsLoaded])
return;
// NSLog(@"assemble count = %d", [[content imagesOnScreen] count]);
RMTileRect newTileRect = [content tileBounds];
RMTileImageSet *images = [content imagesOnScreen];
CGRect newLoadedBounds = [images addTiles:newTileRect ToDisplayIn:[content screenBounds]];
if (!RMTileIsDummy(loadedTiles.origin.tile))
[images removeTiles:loadedTiles];
// NSLog(@"-> count = %d", [images count]);
loadedBounds = newLoadedBounds;
loadedZoom = newTileRect.origin.tile.zoom;
loadedTiles = newTileRect;
[self announceNewBounds];
}
- (void)moveBy: (CGSize) delta
{
// NSLog(@"loadedBounds %f %f %f %f -> ", loadedBounds.origin.x, loadedBounds.origin.y, loadedBounds.size.width, loadedBounds.size.height);
loadedBounds = RMTranslateCGRectBy(loadedBounds, delta);
// NSLog(@" -> %f %f %f %f", loadedBounds.origin.x, loadedBounds.origin.y, loadedBounds.size.width, loadedBounds.size.height);
[self updateLoadedImages];
}
- (void)zoomByFactor: (float) zoomFactor near:(CGPoint) center
{
loadedBounds = RMScaleCGRectAboutPoint(loadedBounds, zoomFactor, center);
[self updateLoadedImages];
}
- (BOOL) suppressLoading
{
return suppressLoading;
}
- (void) setSuppressLoading: (BOOL) suppress
{
suppressLoading = suppress;
if (suppress == NO)
[self updateLoadedImages];
}
- (void)reload
{
[self clearLoadedBounds];
[self updateLoadedImages];
}
//-(BOOL) containsRect: (CGRect)bounds
//{
// return CGRectContainsRect(loadedBounds, bounds);
//}
@end
>>>>>>> .r98
... ...
... ... @@ -7,7 +7,6 @@
objects = {
/* Begin PBXBuildFile section */
0913410D0EC816EE0017BB92 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B83E65630E80E81C001663B6 /* CoreLocation.framework */; };
126693040EB76C0B00E002D5 /* RMConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 126692A00EB75C0A00E002D5 /* RMConfiguration.m */; };
1296F56B0EB8849A00FF25E0 /* RMMarkerStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 1296F55F0EB8743500FF25E0 /* RMMarkerStyle.h */; };
1296F56C0EB8849B00FF25E0 /* RMMarkerStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 1296F5600EB8743500FF25E0 /* RMMarkerStyle.m */; };
... ... @@ -138,6 +137,7 @@
/* Begin PBXFileReference section */
090C948B0EC23FCD003AEE25 /* RMMarkerManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RMMarkerManager.h; sourceTree = "<group>"; };
090C948C0EC23FCD003AEE25 /* RMMarkerManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RMMarkerManager.m; sourceTree = "<group>"; };
096B8E350EC93E16004B5B6D /* RMTilesUpdateDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RMTilesUpdateDelegate.h; sourceTree = "<group>"; };
1266929F0EB75C0A00E002D5 /* RMConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RMConfiguration.h; sourceTree = "<group>"; };
126692A00EB75C0A00E002D5 /* RMConfiguration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RMConfiguration.m; sourceTree = "<group>"; };
1296F55F0EB8743500FF25E0 /* RMMarkerStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RMMarkerStyle.h; sourceTree = "<group>"; };
... ... @@ -256,7 +256,6 @@
B83E66C30E80F053001663B6 /* QuartzCore.framework in Frameworks */,
B8C9787B0E8BE130007D16AD /* libMapView.a in Frameworks */,
B8474BC30EB401AF006A0BC1 /* libsqlite3.dylib in Frameworks */,
0913410D0EC816EE0017BB92 /* CoreLocation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
... ... @@ -524,6 +523,7 @@
B8C9740D0E8A196E007D16AD /* Map */ = {
isa = PBXGroup;
children = (
096B8E350EC93E16004B5B6D /* RMTilesUpdateDelegate.h */,
B8C9740E0E8A198F007D16AD /* README.txt */,
B8C974690E8A1A50007D16AD /* RMMapView.h */,
B8C9746A0E8A1A50007D16AD /* RMMapView.m */,
... ...