[iphone] torch patch from iss746. Also added ability to change text in OverlayView

git-svn-id: https://zxing.googlecode.com/svn/trunk@1725 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
rpechayr 2011-03-16 08:11:20 +00:00
parent 27445b32cd
commit 10262e8bf1
10 changed files with 139 additions and 11 deletions

View file

@ -6,6 +6,8 @@
<string>English</string> <string>English</string>
<key>CFBundleDisplayName</key> <key>CFBundleDisplayName</key>
<string>${PRODUCT_NAME}</string> <string>${PRODUCT_NAME}</string>
<key>CFBundleDocumentTypes</key>
<array/>
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string> <string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key> <key>CFBundleIconFile</key>
@ -20,13 +22,37 @@
<string>APPL</string> <string>APPL</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>CFBundleURLIconFile</key>
<string>icon@2x</string>
<key>CFBundleURLName</key>
<string>com.rpechayr.zxing</string>
<key>CFBundleURLSchemes</key>
<array>
<string>zxing</string>
</array>
</dict>
</array>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>1.0</string> <string>1.0</string>
<key>LSRequiresIPhoneOS</key> <key>LSRequiresIPhoneOS</key>
<true/> <true/>
<key>NSMainNibFile</key> <key>NSMainNibFile</key>
<string>MainWindow</string> <string>MainWindow</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>still-camera</string>
<string>video-camera</string>
</array>
<key>UIStatusBarHidden</key> <key>UIStatusBarHidden</key>
<false/> <false/>
<key>UTExportedTypeDeclarations</key>
<array/>
<key>UTImportedTypeDeclarations</key>
<array/>
</dict> </dict>
</plist> </plist>

View file

@ -575,6 +575,41 @@
}; };
name = Release; name = Release;
}; };
1F81B3E012F1E42200659778 /* Distribution */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Romain Pechayre";
GCC_C_LANGUAGE_STANDARD = c99;
GCC_VERSION = 4.2;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = (
../../cpp/core/src,
"../ZXingWidget/Classes/**",
);
IPHONEOS_DEPLOYMENT_TARGET = 4.1;
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
PREBINDING = NO;
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "27669F64-E861-4AE5-B39E-E93E68BFC37D";
SDKROOT = iphoneos;
};
name = Distribution;
};
1F81B3E112F1E42200659778 /* Distribution */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
COPY_PHASE_STRIP = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = Barcodes_Prefix.pch;
GCC_VERSION = 4.2;
INFOPLIST_FILE = "Barcodes-Info.plist";
PRODUCT_NAME = Barcodes;
VALIDATE_PRODUCT = YES;
};
name = Distribution;
};
C01FCF4F08A954540054247B /* Debug */ = { C01FCF4F08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
@ -582,7 +617,7 @@
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Romain Pechayre (2CQ4EGKG4S)"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Romain Pechayre (2CQ4EGKG4S)";
GCC_C_LANGUAGE_STANDARD = c99; GCC_C_LANGUAGE_STANDARD = c99;
GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_VERSION = 4.2;
GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
@ -591,8 +626,8 @@
); );
IPHONEOS_DEPLOYMENT_TARGET = 4.1; IPHONEOS_DEPLOYMENT_TARGET = 4.1;
PREBINDING = NO; PREBINDING = NO;
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "A74F7EF8-F2D5-4961-891C-BB2D09877990"; "PROVISIONING_PROFILE[sdk=iphoneos*]" = "613CA1B9-372B-44AF-BDD8-9F204D0C27C9";
SDKROOT = iphoneos4.2; SDKROOT = iphoneos;
}; };
name = Debug; name = Debug;
}; };
@ -602,6 +637,7 @@
ARCHS = "$(ARCHS_STANDARD_32_BIT)"; ARCHS = "$(ARCHS_STANDARD_32_BIT)";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
GCC_C_LANGUAGE_STANDARD = c99; GCC_C_LANGUAGE_STANDARD = c99;
GCC_VERSION = 4.2;
GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
@ -623,6 +659,7 @@
buildConfigurations = ( buildConfigurations = (
1D6058940D05DD3E006BFB54 /* Debug */, 1D6058940D05DD3E006BFB54 /* Debug */,
1D6058950D05DD3E006BFB54 /* Release */, 1D6058950D05DD3E006BFB54 /* Release */,
1F81B3E112F1E42200659778 /* Distribution */,
); );
defaultConfigurationIsVisible = 0; defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release; defaultConfigurationName = Release;
@ -632,6 +669,7 @@
buildConfigurations = ( buildConfigurations = (
C01FCF4F08A954540054247B /* Debug */, C01FCF4F08A954540054247B /* Debug */,
C01FCF5008A954540054247B /* Release */, C01FCF5008A954540054247B /* Release */,
1F81B3E012F1E42200659778 /* Distribution */,
); );
defaultConfigurationIsVisible = 0; defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release; defaultConfigurationName = Release;

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:Barcodes.xcodeproj">
</FileRef>
</Workspace>

View file

@ -26,12 +26,14 @@
id<CancelDelegate> delegate; id<CancelDelegate> delegate;
BOOL oneDMode; BOOL oneDMode;
CGRect cropRect; CGRect cropRect;
NSString *displayedMessage;
} }
@property (nonatomic, retain) NSMutableArray* points; @property (nonatomic, retain) NSMutableArray* points;
@property (nonatomic, assign) id<CancelDelegate> delegate; @property (nonatomic, assign) id<CancelDelegate> delegate;
@property (nonatomic, assign) BOOL oneDMode; @property (nonatomic, assign) BOOL oneDMode;
@property (nonatomic, assign) CGRect cropRect; @property (nonatomic, assign) CGRect cropRect;
@property (nonatomic, copy) NSString *displayedMessage;
- (id)initWithFrame:(CGRect)theFrame cancelEnabled:(BOOL)isCancelEnabled oneDMode:(BOOL)isOneDModeEnabled; - (id)initWithFrame:(CGRect)theFrame cancelEnabled:(BOOL)isCancelEnabled oneDMode:(BOOL)isOneDModeEnabled;

View file

@ -31,6 +31,7 @@ static const CGFloat kPadding = 10;
@synthesize cancelButton; @synthesize cancelButton;
@synthesize cropRect; @synthesize cropRect;
@synthesize instructionsLabel; @synthesize instructionsLabel;
@synthesize displayedMessage;
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////
- (id) initWithFrame:(CGRect)theFrame cancelEnabled:(BOOL)isCancelEnabled oneDMode:(BOOL)isOneDModeEnabled { - (id) initWithFrame:(CGRect)theFrame cancelEnabled:(BOOL)isCancelEnabled oneDMode:(BOOL)isOneDModeEnabled {
@ -63,7 +64,6 @@ static const CGFloat kPadding = 10;
[self addSubview:cancelButton]; [self addSubview:cancelButton];
[self addSubview:imageView]; [self addSubview:imageView];
} }
} }
return self; return self;
} }
@ -80,6 +80,7 @@ static const CGFloat kPadding = 10;
[imageView release]; [imageView release];
[_points release]; [_points release];
[instructionsLabel release]; [instructionsLabel release];
[displayedMessage release];
[super dealloc]; [super dealloc];
} }
@ -124,9 +125,14 @@ static const CGFloat kPadding = 10;
return point; return point;
} }
#define kTextMargin 10
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////
- (void)drawRect:(CGRect)rect { - (void)drawRect:(CGRect)rect {
[super drawRect:rect]; [super drawRect:rect];
if (displayedMessage == nil) {
self.displayedMessage = @"Place a barcode inside the viewfinder rectangle to scan it.";
}
CGContextRef c = UIGraphicsGetCurrentContext(); CGContextRef c = UIGraphicsGetCurrentContext();
if (nil != _points) { if (nil != _points) {
@ -149,13 +155,11 @@ static const CGFloat kPadding = 10;
CGContextShowTextAtPoint(c, 74.0, 285.0, text, 49); CGContextShowTextAtPoint(c, 74.0, 285.0, text, 49);
} }
else { else {
char *text = "Place a barcode inside the"; UIFont *font = [UIFont systemFontOfSize:18];
char *text2 = "viewfinder rectangle to scan it."; CGSize constraint = CGSizeMake(rect.size.width - 2 * kTextMargin, cropRect.origin.y);
CGContextSelectFont(c, "Helvetica", 18, kCGEncodingMacRoman); CGSize displaySize = [displayedMessage sizeWithFont:font constrainedToSize:constraint];
CGContextScaleCTM(c, -1.0, 1.0); CGRect displayRect = CGRectMake((rect.size.width - displaySize.width) / 2 , cropRect.origin.y - displaySize.height, displaySize.width, displaySize.height);
CGContextRotateCTM(c, M_PI); [self.displayedMessage drawInRect:displayRect withFont:font lineBreakMode:UILineBreakModeWordWrap alignment:UITextAlignmentCenter];
CGContextShowTextAtPoint(c, 48.0, -45.0, text, 26);
CGContextShowTextAtPoint(c, 33.0, -70.0, text2, 32);
} }
CGContextRestoreGState(c); CGContextRestoreGState(c);
int offset = rect.size.width / 2; int offset = rect.size.width / 2;

View file

@ -63,6 +63,9 @@
- (id)initWithDelegate:(id<ZXingDelegate>)delegate showCancel:(BOOL)shouldShowCancel OneDMode:(BOOL)shouldUseoOneDMode; - (id)initWithDelegate:(id<ZXingDelegate>)delegate showCancel:(BOOL)shouldShowCancel OneDMode:(BOOL)shouldUseoOneDMode;
- (BOOL)fixedFocus; - (BOOL)fixedFocus;
- (void)setTorch:(BOOL)status;
- (BOOL)torchIsOn;
@end @end
@protocol ZXingDelegate @protocol ZXingDelegate

View file

@ -284,6 +284,9 @@
} }
*/ */
#pragma mark -
#pragma mark AVFoundation
- (void)initCapture { - (void)initCapture {
#if HAS_AVFF #if HAS_AVFF
AVCaptureDeviceInput *captureInput = AVCaptureDeviceInput *captureInput =
@ -470,4 +473,39 @@ didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
#endif #endif
} }
#pragma mark - Torch
- (void)setTorch:(BOOL)status {
Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice");
if (captureDeviceClass != nil) {
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
[device lockForConfiguration:nil];
if ( [device hasTorch] ) {
if ( status ) {
[device setTorchMode:AVCaptureTorchModeOn];
} else {
[device setTorchMode:AVCaptureTorchModeOn];
}
}
[device unlockForConfiguration];
}
}
- (BOOL)torchIsOn {
Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice");
if (captureDeviceClass != nil) {
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if ( [device hasTorch] ) {
return [device torchMode] == AVCaptureTorchModeOn;
}
[device unlockForConfiguration];
}
return NO;
}
@end @end

View file

@ -35,6 +35,7 @@
- (NSString *)stringForDisplay { - (NSString *)stringForDisplay {
NSMutableString *result = [NSMutableString stringWithString:self.name]; NSMutableString *result = [NSMutableString stringWithString:self.name];
if (self.jobTitle) [result appendFormat:@"\n%@",self.jobTitle];
if (self.organization) [result appendFormat:@"\n%@",self.organization]; if (self.organization) [result appendFormat:@"\n%@",self.organization];
if (self.phoneNumbers) { if (self.phoneNumbers) {
for (NSString *number in self.phoneNumbers) { for (NSString *number in self.phoneNumbers) {

View file

@ -1181,6 +1181,7 @@
); );
PRESERVE_DEAD_CODE_INITS_AND_TERMS = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = NO;
PRODUCT_NAME = ZXingWidget; PRODUCT_NAME = ZXingWidget;
SDKROOT = iphoneos;
SEPARATE_STRIP = NO; SEPARATE_STRIP = NO;
SKIP_INSTALL = YES; SKIP_INSTALL = YES;
}; };
@ -1198,6 +1199,7 @@
HEADER_SEARCH_PATHS = ../../cpp/core/src; HEADER_SEARCH_PATHS = ../../cpp/core/src;
INSTALL_PATH = /usr/local/lib; INSTALL_PATH = /usr/local/lib;
PRODUCT_NAME = ZXingWidget; PRODUCT_NAME = ZXingWidget;
SDKROOT = iphoneos;
}; };
name = Release; name = Release;
}; };

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:ZXingWidget.xcodeproj">
</FileRef>
</Workspace>