mirror of
https://github.com/bitgapp/eqMac.git
synced 2024-11-22 22:32:17 +03:00
Implemented Fine Volume Controls
This commit is contained in:
parent
2b601a171e
commit
1685b6b95d
@ -17,6 +17,7 @@
|
||||
#import "eqMacStatusItemView.h"
|
||||
#import "API.h"
|
||||
#import "Devices.h"
|
||||
#import "Volume.h"
|
||||
|
||||
@interface AppDelegate : NSObject <NSApplicationDelegate, NSPopoverDelegate>
|
||||
@end
|
||||
|
@ -143,7 +143,7 @@ NSEvent *settingsPopoverTransiencyMonitor;
|
||||
if(![Devices eqMacDriverInstalled]){
|
||||
//Install only the new driver
|
||||
switch([Utilities showAlertWithTitle:@"eqMac2 Requires a Driver"
|
||||
andMessage:@"In order to install the driver, the eqMac will ask for your system password."
|
||||
andMessage:@"In order to install the driver, the app will ask for your system password."
|
||||
andButtons:@[@"Install", @"Quit"]]){
|
||||
case NSAlertFirstButtonReturn:{
|
||||
if(![Utilities runShellScriptWithName:@"install_new"]){
|
||||
@ -164,33 +164,23 @@ NSEvent *settingsPopoverTransiencyMonitor;
|
||||
-(void)changeVolume:(NSNotification*)notification{
|
||||
if([EQHost EQEngineExists]){
|
||||
AudioDeviceID volDevice = [Devices getVolumeControllerDeviceID];
|
||||
if([[notification.userInfo objectForKey:@"key"] intValue] == MUTE){
|
||||
[Devices setDevice:volDevice toMuted:![Devices getIsMutedForDeviceID:volDevice]];
|
||||
NSInteger volumeChangeKey = [[notification.userInfo objectForKey:@"key"] intValue];
|
||||
Float32 newVolume = 0;
|
||||
if(volumeChangeKey == MUTE){
|
||||
BOOL mute = ![Devices getIsMutedForDeviceID:volDevice];
|
||||
[Devices setDevice:volDevice toMuted: mute];
|
||||
if(!mute) newVolume = [Devices getVolumeForDeviceID:volDevice];
|
||||
}else{
|
||||
Float32 volumeChange = 0.0;
|
||||
switch( [[notification.userInfo objectForKey:@"key"] intValue]){
|
||||
case UP:{
|
||||
volumeChange = VOLUME_STEP;
|
||||
break;
|
||||
}
|
||||
case DOWN:{
|
||||
volumeChange = -VOLUME_STEP;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Float32 newVolume = [Devices getVolumeForDeviceID:volDevice] + volumeChange;
|
||||
if(newVolume < 0) newVolume = 0;
|
||||
if(newVolume > 1) newVolume = 1;
|
||||
|
||||
Float32 currentVolume = [Devices getVolumeForDeviceID:volDevice];
|
||||
newVolume = [Volume setVolume:currentVolume
|
||||
inDirection:volumeChangeKey == UP ? kVolumeChangeDirectionUp : kVolumeChangeDirectionDown
|
||||
toNearest:[[notification.userInfo objectForKey:@"SHIFT+ALT"] boolValue] ? kVolumeStepTypeQuarter : kVolumeStepTypeFull];
|
||||
[Devices setVolumeForDevice:volDevice to: newVolume];
|
||||
}
|
||||
|
||||
[Utilities executeBlock:^{
|
||||
if([[Storage get:kStorageShowVolumeHUD] integerValue] == 1){
|
||||
[volumeHUD showHUDforVolume: [Devices getIsMutedForDeviceID:volDevice] ? 0 : [Devices getVolumeForDeviceID:volDevice]];
|
||||
}
|
||||
} after:0.01];
|
||||
if([[Storage get:kStorageShowVolumeHUD] integerValue] == 1){
|
||||
[volumeHUD showHUDforVolume: newVolume];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -8,5 +8,7 @@ extern NSString * const API_URL;
|
||||
extern NSString * const APP_URL;
|
||||
extern NSString * const SUPPORT_URL;
|
||||
extern NSString * const REPO_ISSUES_URL;
|
||||
extern Float32 const VOLUME_STEP;
|
||||
extern Float32 const FULL_VOLUME_STEP;
|
||||
extern Float32 const QUARTER_VOLUME_STEP;
|
||||
|
||||
#endif /* Constants_h */
|
||||
|
@ -8,5 +8,5 @@ NSString * const API_URL = @"https://eqmac-api.bitgapp.com";
|
||||
NSString * const APP_URL = @"https://bitgapp.com/eqmac/";
|
||||
NSString * const SUPPORT_URL = @"https://bitgapp.com/eqmac/#/donate";
|
||||
NSString * const REPO_ISSUES_URL = @"https://github.com/romankisil/eqMac2/blob/master/CONTRIBUTING.md";
|
||||
Float32 const VOLUME_STEP = 0.065;
|
||||
|
||||
Float32 const FULL_VOLUME_STEP = 0.0625;
|
||||
Float32 const QUARTER_VOLUME_STEP = 0.015625;
|
||||
|
@ -184,7 +184,7 @@ typedef enum {
|
||||
}else{
|
||||
Float32 leftVolume = [self getVolumeForDevice:ID andChannel:kChannelLeft];
|
||||
Float32 rightVolume = [self getVolumeForDevice:ID andChannel:kChannelRight];
|
||||
volume = MAX(rightVolume, leftVolume);
|
||||
volume = leftVolume > rightVolume ? leftVolume : rightVolume;
|
||||
}
|
||||
return volume;
|
||||
}
|
||||
@ -367,7 +367,7 @@ typedef enum {
|
||||
[self setVolumeForDevice:ID andChannel:kChannelRight to: rightVolume];
|
||||
}
|
||||
|
||||
[self setDevice:ID toMuted:volume < VOLUME_STEP];
|
||||
[self setDevice:ID toMuted:volume < 0.0625];
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,14 +0,0 @@
|
||||
//
|
||||
// NSBorderedTextField.h
|
||||
// eqMac2
|
||||
//
|
||||
// Created by Romans Kisils on 04/06/2017.
|
||||
// Copyright © 2017 bitgapp. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
@interface NSBorderedTextField : NSTextField
|
||||
-(void)setBorderColor:(NSColor*)color;
|
||||
|
||||
@end
|
@ -1,34 +0,0 @@
|
||||
//
|
||||
// NSBorderedTextField.m
|
||||
// eqMac2
|
||||
//
|
||||
// Created by Romans Kisils on 04/06/2017.
|
||||
// Copyright © 2017 bitgapp. All rights reserved.
|
||||
//
|
||||
|
||||
#import "NSBorderedTextField.h"
|
||||
|
||||
@implementation NSBorderedTextField
|
||||
|
||||
NSColor* borderColor;
|
||||
|
||||
- (void)drawRect:(NSRect)dirtyRect {
|
||||
if(!borderColor) borderColor = [NSColor whiteColor];
|
||||
NSPoint origin = { 0.0,0.0 };
|
||||
NSRect rect;
|
||||
rect.origin = origin;
|
||||
rect.size.width = [self bounds].size.width;
|
||||
rect.size.height = [self bounds].size.height;
|
||||
|
||||
NSBezierPath * path;
|
||||
path = [NSBezierPath bezierPathWithRect:rect];
|
||||
[path setLineWidth:2];
|
||||
[borderColor set];
|
||||
[path stroke];
|
||||
}
|
||||
|
||||
-(void)setBorderColor:(NSColor*)color{
|
||||
borderColor = color;
|
||||
}
|
||||
|
||||
@end
|
24
Source/Common/Volume/Volume.h
Normal file
24
Source/Common/Volume/Volume.h
Normal file
@ -0,0 +1,24 @@
|
||||
//
|
||||
// Volume.h
|
||||
// eqMac2
|
||||
//
|
||||
// Created by Romans Kisils on 29/07/2017.
|
||||
// Copyright © 2017 bitgapp. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "Constants.h"
|
||||
|
||||
@interface Volume : NSObject
|
||||
|
||||
typedef enum {
|
||||
kVolumeStepTypeFull, kVolumeStepTypeQuarter
|
||||
} VOLUME_STEP_TYPES;
|
||||
|
||||
typedef enum {
|
||||
kVolumeChangeDirectionUp, kVolumeChangeDirectionDown
|
||||
} VOLUME_CHANGE_DIRECTION;
|
||||
|
||||
+(Float32)setVolume:(Float32)volume inDirection:(VOLUME_CHANGE_DIRECTION)direction toNearest:(VOLUME_STEP_TYPES)type;
|
||||
|
||||
@end
|
72
Source/Common/Volume/Volume.m
Normal file
72
Source/Common/Volume/Volume.m
Normal file
@ -0,0 +1,72 @@
|
||||
//
|
||||
// Volume.m
|
||||
// eqMac2
|
||||
//
|
||||
// Created by Romans Kisils on 29/07/2017.
|
||||
// Copyright © 2017 bitgapp. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Volume.h"
|
||||
|
||||
|
||||
|
||||
|
||||
@implementation Volume
|
||||
|
||||
+(NSArray*)getFullSteps{
|
||||
NSMutableArray *steps = [[NSMutableArray alloc] init];
|
||||
Float32 step = .0;
|
||||
for(NSInteger i = 0; step <= 1; i++){
|
||||
[steps addObject: [NSNumber numberWithFloat:step]];
|
||||
step += FULL_VOLUME_STEP;
|
||||
}
|
||||
return steps;
|
||||
}
|
||||
|
||||
+(NSArray*)getQuarterSteps{
|
||||
NSMutableArray *steps = [[NSMutableArray alloc] init];
|
||||
Float32 step = .0;
|
||||
for(NSInteger i = 0; step <= 1; i++){
|
||||
[steps addObject: [NSNumber numberWithFloat:step]];
|
||||
step += QUARTER_VOLUME_STEP;
|
||||
}
|
||||
return steps;
|
||||
}
|
||||
|
||||
+(Float32)setVolume:(Float32)volume inDirection:(VOLUME_CHANGE_DIRECTION)direction toNearest:(VOLUME_STEP_TYPES)type{
|
||||
volume = [self roundVolume:volume toNearestStepOfType:type];
|
||||
|
||||
if(volume == 0 && direction == kVolumeChangeDirectionDown) return 0;
|
||||
if(volume == 1 && direction == kVolumeChangeDirectionUp) return 1;
|
||||
|
||||
NSArray *steps = type == kVolumeStepTypeFull ? [self getFullSteps] : [self getQuarterSteps];
|
||||
for(NSInteger i = 0; i < [steps count] - 1; i++){
|
||||
Float32 step = [[steps objectAtIndex:i] floatValue];
|
||||
if(step == volume)
|
||||
return [[steps objectAtIndex:i + (direction == kVolumeChangeDirectionUp ? 1 : -1)] floatValue];
|
||||
}
|
||||
|
||||
Float32 step = type == kVolumeStepTypeFull ? FULL_VOLUME_STEP : QUARTER_VOLUME_STEP;
|
||||
volume += direction == kVolumeChangeDirectionUp ? step : -step;
|
||||
|
||||
if(volume < 0)return 0;
|
||||
if(volume > 1)return 1;
|
||||
|
||||
return volume;
|
||||
}
|
||||
|
||||
+(Float32)roundVolume:(Float32)volume toNearestStepOfType:(VOLUME_STEP_TYPES)type{
|
||||
if(volume < 0)volume = 0;
|
||||
if(volume > 1)volume = 1;
|
||||
NSArray *steps = type == kVolumeStepTypeFull ? [self getFullSteps] : [self getQuarterSteps];
|
||||
for(NSInteger i = 0; i < [steps count] - 1; i++){
|
||||
Float32 lower = [[steps objectAtIndex:i] floatValue];
|
||||
Float32 higher = [[steps objectAtIndex:i+1] floatValue];
|
||||
if(lower <= volume && volume < higher){
|
||||
return ((volume - lower) < (higher - volume)) ? lower : higher;
|
||||
}
|
||||
}
|
||||
return volume;
|
||||
}
|
||||
|
||||
@end
|
@ -13,5 +13,5 @@ typedef enum {
|
||||
UP,
|
||||
MUTE,
|
||||
DOWN
|
||||
} VolumeChange;
|
||||
} VOLUME_CHANGE_KEY;
|
||||
@end
|
||||
|
@ -16,8 +16,16 @@
|
||||
int keyFlags = ([event data1] & 0x0000FFFF);
|
||||
int keyState = (((keyFlags & 0xFF00) >> 8)) == 0xA;
|
||||
|
||||
|
||||
|
||||
if(keyState == 1 && (keyCode == NX_KEYTYPE_SOUND_UP || keyCode == NX_KEYTYPE_SOUND_DOWN || keyCode == NX_KEYTYPE_MUTE)){
|
||||
NSMutableDictionary *userInfo = [[NSMutableDictionary alloc] init];
|
||||
|
||||
//Detect SHIFT+ALT
|
||||
[userInfo setObject:
|
||||
[NSNumber numberWithBool:[event modifierFlags] & NSShiftKeyMask && [event modifierFlags] & NSAlternateKeyMask]
|
||||
forKey:@"SHIFT+ALT"];
|
||||
|
||||
switch(keyCode){
|
||||
case NX_KEYTYPE_SOUND_UP:{
|
||||
[userInfo setObject:[NSNumber numberWithInt:UP] forKey:@"key"];
|
||||
|
@ -93,7 +93,7 @@
|
||||
[_volumeBars setHidden:NO];
|
||||
if (volume == 0) {
|
||||
[_volumeBars setHidden:YES];
|
||||
}else if(volume >= VOLUME_STEP && volume <= 0.25){
|
||||
}else if(volume >= 0.0625 && volume <= 0.25){
|
||||
[_volumeBars setImage: [Utilities isDarkMode] ? [NSImage imageNamed:@"vol1Light.png"] : [NSImage imageNamed:@"vol1Dark.png"]];
|
||||
}else if(volume >0.25 && volume <= 0.5){
|
||||
[_volumeBars setImage: [Utilities isDarkMode] ? [NSImage imageNamed:@"vol2Light.png"] : [NSImage imageNamed:@"vol2Dark.png"]];
|
||||
|
@ -1,13 +0,0 @@
|
||||
//
|
||||
// FlatLevelIndicator.h
|
||||
// eqMac
|
||||
//
|
||||
// Created by Romans Kisils on 01/02/2017.
|
||||
// Copyright © 2017 bitgapp. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
@interface FlatLevelIndicator : NSLevelIndicator
|
||||
|
||||
@end
|
@ -1,35 +0,0 @@
|
||||
//
|
||||
// FlatLevelIndicator.m
|
||||
// eqMac
|
||||
//
|
||||
// Created by Romans Kisils on 01/02/2017.
|
||||
// Copyright © 2017 bitgapp. All rights reserved.
|
||||
//
|
||||
|
||||
#import "FlatLevelIndicator.h"
|
||||
|
||||
CGFloat gap = 2;
|
||||
CGFloat nTicks = 16;
|
||||
|
||||
@implementation FlatLevelIndicator
|
||||
|
||||
- (void)drawRect:(NSRect)dirtyRect {
|
||||
|
||||
CGFloat size = (self.bounds.size.width - ((nTicks+1) * gap)) / nTicks;
|
||||
|
||||
NSRect bgRect = dirtyRect;
|
||||
bgRect.size.width = (nTicks * size) + ((nTicks+1) * gap);
|
||||
bgRect.size.height = size + gap*2;
|
||||
NSColor *fillColor = [NSColor colorWithRed:0 green:0 blue:0 alpha:0.5];
|
||||
[fillColor set];
|
||||
NSRectFill(bgRect);
|
||||
|
||||
for(int i = 0; i < self.intValue; i++){
|
||||
NSRect tick = NSMakeRect( (i*(size+gap)) + gap, gap, size, size);
|
||||
fillColor = [NSColor whiteColor];
|
||||
[fillColor set];
|
||||
NSRectFill(tick);
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
@ -0,0 +1,13 @@
|
||||
//
|
||||
// VolumeLevelIndicatorView.h
|
||||
// eqMac2
|
||||
//
|
||||
// Created by Romans Kisils on 29/07/2017.
|
||||
// Copyright © 2017 bitgapp. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
@interface VolumeLevelIndicatorView : NSView
|
||||
-(void)setVolume:(Float32)vol;
|
||||
@end
|
@ -0,0 +1,52 @@
|
||||
//
|
||||
// VolumeLevelIndicatorView.m
|
||||
// eqMac2
|
||||
//
|
||||
// Created by Romans Kisils on 29/07/2017.
|
||||
// Copyright © 2017 bitgapp. All rights reserved.
|
||||
//
|
||||
|
||||
#import "VolumeLevelIndicatorView.h"
|
||||
|
||||
CGFloat gap = 2;
|
||||
CGFloat nTicks = 16;
|
||||
Float32 volume = 0;
|
||||
|
||||
@implementation VolumeLevelIndicatorView
|
||||
|
||||
-(void)setVolume:(Float32)vol{
|
||||
volume = vol;
|
||||
}
|
||||
|
||||
|
||||
- (void)drawRect:(NSRect)dirtyRect {
|
||||
[super drawRect:dirtyRect];
|
||||
|
||||
NSColor *bgColor = [NSColor colorWithRed:0 green:0 blue:0 alpha:0.5];
|
||||
NSColor *indicatorColor = [NSColor whiteColor];
|
||||
CGFloat size = (self.bounds.size.width - ((nTicks+1) * gap)) / nTicks;
|
||||
|
||||
NSRect bgRect = dirtyRect;
|
||||
bgRect.size.width = (nTicks * size) + ((nTicks+1) * gap);
|
||||
bgRect.size.height = size + gap*2;
|
||||
[bgColor set];
|
||||
NSRectFill(bgRect);
|
||||
|
||||
for(int i = 0; i < 16; i++){
|
||||
NSRect tick = NSMakeRect( (i*(size+gap)) + gap, gap, size, size);
|
||||
[indicatorColor set];
|
||||
NSRectFill(tick);
|
||||
}
|
||||
|
||||
[bgColor set];
|
||||
|
||||
CGFloat width = self.bounds.size.width;
|
||||
CGFloat x = width * volume;
|
||||
width = width - x;
|
||||
NSRect fgRect = CGRectMake(x, 0, width, size + gap*2);
|
||||
|
||||
NSRectFill(fgRect);
|
||||
|
||||
}
|
||||
|
||||
@end
|
@ -7,7 +7,7 @@
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "FlatLevelIndicator.h"
|
||||
#import "VolumeLevelIndicatorView.h"
|
||||
#import "Devices.h"
|
||||
#import "Utilities.h"
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
#import "VolumeWindowController.h"
|
||||
|
||||
@interface VolumeWindowController ()
|
||||
@property (weak) IBOutlet FlatLevelIndicator *volumeIndicator;
|
||||
@property (strong) IBOutlet VolumeLevelIndicatorView *volumeLevelIndicator;
|
||||
|
||||
@end
|
||||
|
||||
@ -22,12 +22,10 @@ CFTimeInterval lastShow;
|
||||
}
|
||||
|
||||
-(void) showHUDforVolume:(Float32)volume{
|
||||
Float32 mapped = [Utilities mapValue:volume withInMin:0 InMax:1 OutMin:0 OutMax:16];
|
||||
int nTicks = floor(mapped);
|
||||
[_volumeIndicator setIntValue: nTicks];
|
||||
|
||||
|
||||
lastShow = CACurrentMediaTime();
|
||||
[_volumeLevelIndicator setVolume:volume];
|
||||
[_volumeLevelIndicator setNeedsDisplay:YES];
|
||||
|
||||
float alpha = 1.0;
|
||||
[self.window setAlphaValue:alpha];
|
||||
|
@ -1,14 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11762" systemVersion="16D32" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="12121" systemVersion="16F73" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11762"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="12121"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="VolumeWindowController">
|
||||
<connections>
|
||||
<outlet property="volumeIndicator" destination="Olq-vK-PEx" id="FcV-nQ-ZIq"/>
|
||||
<outlet property="window" destination="RIS-VR-4cf" id="hK0-by-hc2"/>
|
||||
<outlet property="volumeLevelIndicator" destination="mWQ-OB-9HB" id="6yW-lt-TMz"/>
|
||||
<outlet property="window" destination="RIS-VR-4cf" id="o1l-fc-TGT"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
@ -17,12 +17,16 @@
|
||||
<windowStyleMask key="styleMask" utility="YES" HUD="YES"/>
|
||||
<windowPositionMask key="initialPositionMask" bottomStrut="YES"/>
|
||||
<rect key="contentRect" x="1161" y="350" width="200" height="67"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1680" height="1028"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1418"/>
|
||||
<view key="contentView" wantsLayer="YES" id="IBr-Jy-LtY">
|
||||
<rect key="frame" x="0.0" y="0.0" width="200" height="67"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="twZ-0l-9T5">
|
||||
<customView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="mWQ-OB-9HB" userLabel="TicksView" customClass="VolumeLevelIndicatorView">
|
||||
<rect key="frame" x="18" y="14" width="163" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
</customView>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="twZ-0l-9T5">
|
||||
<rect key="frame" x="55" y="34" width="89" height="24"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="eqMac" id="iKa-HT-Yqk">
|
||||
@ -31,11 +35,6 @@
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<levelIndicator verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Olq-vK-PEx" customClass="FlatLevelIndicator">
|
||||
<rect key="frame" x="19" y="10" width="160" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<levelIndicatorCell key="cell" alignment="left" doubleValue="16" maxValue="16" id="MQ6-SJ-ehb"/>
|
||||
</levelIndicator>
|
||||
</subviews>
|
||||
</view>
|
||||
<connections>
|
||||
|
@ -41,7 +41,6 @@
|
||||
E0B781501EF704660076B3AB /* eqMac2Driver.kext in Resources */ = {isa = PBXBuildFile; fileRef = E0B781341EF704660076B3AB /* eqMac2Driver.kext */; };
|
||||
E0B781511EF704660076B3AB /* EQEngine.mm in Sources */ = {isa = PBXBuildFile; fileRef = E0B781371EF704660076B3AB /* EQEngine.mm */; };
|
||||
E0B781521EF704660076B3AB /* EQHost.mm in Sources */ = {isa = PBXBuildFile; fileRef = E0B7813A1EF704660076B3AB /* EQHost.mm */; };
|
||||
E0B781531EF704660076B3AB /* NSBorderedTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = E0B7813D1EF704660076B3AB /* NSBorderedTextField.m */; };
|
||||
E0B781541EF704660076B3AB /* defaultPresets.plist in Resources */ = {isa = PBXBuildFile; fileRef = E0B7813F1EF704660076B3AB /* defaultPresets.plist */; };
|
||||
E0B781551EF704660076B3AB /* Presets.m in Sources */ = {isa = PBXBuildFile; fileRef = E0B781411EF704660076B3AB /* Presets.m */; };
|
||||
E0B781561EF704660076B3AB /* install_new.sh in Resources */ = {isa = PBXBuildFile; fileRef = E0B781431EF704660076B3AB /* install_new.sh */; };
|
||||
@ -59,7 +58,6 @@
|
||||
E0B781891EF704A20076B3AB /* SettingsViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = E0B781771EF704A20076B3AB /* SettingsViewController.mm */; };
|
||||
E0B7818A1EF704A20076B3AB /* SettingsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E0B781781EF704A20076B3AB /* SettingsViewController.xib */; };
|
||||
E0B7818B1EF704A20076B3AB /* eqMacStatusItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = E0B7817B1EF704A20076B3AB /* eqMacStatusItemView.m */; };
|
||||
E0B7818C1EF704A20076B3AB /* FlatLevelIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = E0B7817F1EF704A20076B3AB /* FlatLevelIndicator.m */; };
|
||||
E0B7818D1EF704A20076B3AB /* VolumeWindowController.mm in Sources */ = {isa = PBXBuildFile; fileRef = E0B781811EF704A20076B3AB /* VolumeWindowController.mm */; };
|
||||
E0B7818E1EF704A20076B3AB /* VolumeWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E0B781821EF704A20076B3AB /* VolumeWindowController.xib */; };
|
||||
E0B781AD1EF704BA0076B3AB /* blueLine.png in Resources */ = {isa = PBXBuildFile; fileRef = E0B781911EF704BA0076B3AB /* blueLine.png */; };
|
||||
@ -80,6 +78,8 @@
|
||||
E0B781CF1EF706670076B3AB /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E0B781CA1EF706670076B3AB /* main.m */; };
|
||||
E0B781D01EF706670076B3AB /* NSAppEventCather.m in Sources */ = {isa = PBXBuildFile; fileRef = E0B781CC1EF706670076B3AB /* NSAppEventCather.m */; };
|
||||
E0B781D31EF706700076B3AB /* Main.xib in Resources */ = {isa = PBXBuildFile; fileRef = E0B781D11EF706700076B3AB /* Main.xib */; };
|
||||
E0CADB0E1F2CC1A500AC53E8 /* VolumeLevelIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = E0CADB0D1F2CC1A500AC53E8 /* VolumeLevelIndicatorView.m */; };
|
||||
E0CADB121F2CD2F400AC53E8 /* Volume.m in Sources */ = {isa = PBXBuildFile; fileRef = E0CADB111F2CD2F400AC53E8 /* Volume.m */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
@ -138,8 +138,6 @@
|
||||
E0B781371EF704660076B3AB /* EQEngine.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = EQEngine.mm; sourceTree = "<group>"; };
|
||||
E0B781391EF704660076B3AB /* EQHost.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EQHost.h; sourceTree = "<group>"; };
|
||||
E0B7813A1EF704660076B3AB /* EQHost.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = EQHost.mm; sourceTree = "<group>"; };
|
||||
E0B7813C1EF704660076B3AB /* NSBorderedTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSBorderedTextField.h; sourceTree = "<group>"; };
|
||||
E0B7813D1EF704660076B3AB /* NSBorderedTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSBorderedTextField.m; sourceTree = "<group>"; };
|
||||
E0B7813F1EF704660076B3AB /* defaultPresets.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = defaultPresets.plist; sourceTree = "<group>"; };
|
||||
E0B781401EF704660076B3AB /* Presets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Presets.h; sourceTree = "<group>"; };
|
||||
E0B781411EF704660076B3AB /* Presets.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Presets.m; sourceTree = "<group>"; };
|
||||
@ -173,8 +171,6 @@
|
||||
E0B781781EF704A20076B3AB /* SettingsViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SettingsViewController.xib; sourceTree = "<group>"; };
|
||||
E0B7817A1EF704A20076B3AB /* eqMacStatusItemView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eqMacStatusItemView.h; sourceTree = "<group>"; };
|
||||
E0B7817B1EF704A20076B3AB /* eqMacStatusItemView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = eqMacStatusItemView.m; sourceTree = "<group>"; };
|
||||
E0B7817E1EF704A20076B3AB /* FlatLevelIndicator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FlatLevelIndicator.h; sourceTree = "<group>"; };
|
||||
E0B7817F1EF704A20076B3AB /* FlatLevelIndicator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FlatLevelIndicator.m; sourceTree = "<group>"; };
|
||||
E0B781801EF704A20076B3AB /* VolumeWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VolumeWindowController.h; sourceTree = "<group>"; };
|
||||
E0B781811EF704A20076B3AB /* VolumeWindowController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = VolumeWindowController.mm; sourceTree = "<group>"; };
|
||||
E0B781821EF704A20076B3AB /* VolumeWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = VolumeWindowController.xib; sourceTree = "<group>"; };
|
||||
@ -198,6 +194,10 @@
|
||||
E0B781CB1EF706670076B3AB /* NSAppEventCatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSAppEventCatcher.h; sourceTree = "<group>"; };
|
||||
E0B781CC1EF706670076B3AB /* NSAppEventCather.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSAppEventCather.m; sourceTree = "<group>"; };
|
||||
E0B781D21EF706700076B3AB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/Main.xib; sourceTree = "<group>"; };
|
||||
E0CADB0C1F2CC1A500AC53E8 /* VolumeLevelIndicatorView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VolumeLevelIndicatorView.h; path = VolumeLevelIndicatorView/VolumeLevelIndicatorView.h; sourceTree = "<group>"; };
|
||||
E0CADB0D1F2CC1A500AC53E8 /* VolumeLevelIndicatorView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VolumeLevelIndicatorView.m; path = VolumeLevelIndicatorView/VolumeLevelIndicatorView.m; sourceTree = "<group>"; };
|
||||
E0CADB101F2CD2F400AC53E8 /* Volume.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Volume.h; path = Volume/Volume.h; sourceTree = "<group>"; };
|
||||
E0CADB111F2CD2F400AC53E8 /* Volume.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Volume.m; path = Volume/Volume.m; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@ -287,13 +287,13 @@
|
||||
E0B781291EF704660076B3AB /* Common */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E0CADB0F1F2CD2D400AC53E8 /* Volume */,
|
||||
E0B7812A1EF704660076B3AB /* API */,
|
||||
E0B7812D1EF704660076B3AB /* Constants */,
|
||||
E0B781301EF704660076B3AB /* Devices */,
|
||||
E0B781331EF704660076B3AB /* Driver */,
|
||||
E0B781351EF704660076B3AB /* EQEngine */,
|
||||
E0B781381EF704660076B3AB /* EQHost */,
|
||||
E0B7813B1EF704660076B3AB /* Overrides */,
|
||||
E0B7813E1EF704660076B3AB /* Presets */,
|
||||
E0B781421EF704660076B3AB /* Scripts */,
|
||||
E0B781471EF704660076B3AB /* Storage */,
|
||||
@ -355,15 +355,6 @@
|
||||
path = EQHost;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E0B7813B1EF704660076B3AB /* Overrides */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E0B7813C1EF704660076B3AB /* NSBorderedTextField.h */,
|
||||
E0B7813D1EF704660076B3AB /* NSBorderedTextField.m */,
|
||||
);
|
||||
path = Overrides;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E0B7813E1EF704660076B3AB /* Presets */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@ -499,7 +490,7 @@
|
||||
E0B7817C1EF704A20076B3AB /* Volume */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E0B7817D1EF704A20076B3AB /* FlatLevelIndicator */,
|
||||
E0CADB0B1F2CC17A00AC53E8 /* VolumeLevelIndicatorView */,
|
||||
E0B781801EF704A20076B3AB /* VolumeWindowController.h */,
|
||||
E0B781811EF704A20076B3AB /* VolumeWindowController.mm */,
|
||||
E0B781821EF704A20076B3AB /* VolumeWindowController.xib */,
|
||||
@ -507,15 +498,6 @@
|
||||
path = Volume;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E0B7817D1EF704A20076B3AB /* FlatLevelIndicator */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E0B7817E1EF704A20076B3AB /* FlatLevelIndicator.h */,
|
||||
E0B7817F1EF704A20076B3AB /* FlatLevelIndicator.m */,
|
||||
);
|
||||
path = FlatLevelIndicator;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E0B7818F1EF704BA0076B3AB /* Assets */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@ -570,6 +552,24 @@
|
||||
path = Icons;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E0CADB0B1F2CC17A00AC53E8 /* VolumeLevelIndicatorView */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E0CADB0C1F2CC1A500AC53E8 /* VolumeLevelIndicatorView.h */,
|
||||
E0CADB0D1F2CC1A500AC53E8 /* VolumeLevelIndicatorView.m */,
|
||||
);
|
||||
name = VolumeLevelIndicatorView;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E0CADB0F1F2CD2D400AC53E8 /* Volume */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E0CADB101F2CD2F400AC53E8 /* Volume.h */,
|
||||
E0CADB111F2CD2F400AC53E8 /* Volume.m */,
|
||||
);
|
||||
name = Volume;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
@ -734,17 +734,17 @@
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
E0B781861EF704A20076B3AB /* eqViewController.mm in Sources */,
|
||||
E0CADB0E1F2CC1A500AC53E8 /* VolumeLevelIndicatorView.m in Sources */,
|
||||
E0B7818B1EF704A20076B3AB /* eqMacStatusItemView.m in Sources */,
|
||||
E0B7818C1EF704A20076B3AB /* FlatLevelIndicator.m in Sources */,
|
||||
E0B781551EF704660076B3AB /* Presets.m in Sources */,
|
||||
E0B781841EF704A20076B3AB /* CARingBuffer.cpp in Sources */,
|
||||
E0CADB121F2CD2F400AC53E8 /* Volume.m in Sources */,
|
||||
E0B781891EF704A20076B3AB /* SettingsViewController.mm in Sources */,
|
||||
E0B781881EF704A20076B3AB /* SliderGraphView.m in Sources */,
|
||||
E0B7814E1EF704660076B3AB /* Constants.m in Sources */,
|
||||
E0B7814F1EF704660076B3AB /* Devices.mm in Sources */,
|
||||
E0B781521EF704660076B3AB /* EQHost.mm in Sources */,
|
||||
E0B781CF1EF706670076B3AB /* main.m in Sources */,
|
||||
E0B781531EF704660076B3AB /* NSBorderedTextField.m in Sources */,
|
||||
E0B7818D1EF704A20076B3AB /* VolumeWindowController.mm in Sources */,
|
||||
E0B7815B1EF704660076B3AB /* Utilities.m in Sources */,
|
||||
E0B7814D1EF704660076B3AB /* API.m in Sources */,
|
||||
|
Loading…
Reference in New Issue
Block a user