ActivityIndicator.mm 1.43 KB
#include "ActivityIndicator.h"
#include "OrientationSupport.h"

@interface ActivityIndicator : UIActivityIndicatorView
{
    UIView* _parent;
}
@end
static ActivityIndicator* _activityIndicator = nil;


@implementation ActivityIndicator
- (void)show:(UIView*)parent
{
    _parent = parent;
    [parent addSubview: self];
    [self startAnimating];
}

- (void)layoutSubviews
{
    self.center = CGPointMake([_parent bounds].size.width / 2, [_parent bounds].size.height / 2);
}

@end

void ShowActivityIndicator(UIView* parent, int style)
{
    if (_activityIndicator != nil)
        return;

    if (style >= 0)
    {
        _activityIndicator = [[ActivityIndicator alloc] initWithActivityIndicatorStyle: (UIActivityIndicatorViewStyle)style];
        _activityIndicator.contentScaleFactor = [UIScreen mainScreen].scale;
    }

    if (_activityIndicator != nil)
        [_activityIndicator show: parent];
}

void ShowActivityIndicator(UIView* parent)
{
    ShowActivityIndicator(parent, UnityGetShowActivityIndicatorOnLoading());
}

void HideActivityIndicator()
{
    if (_activityIndicator)
    {
        [_activityIndicator stopAnimating];
        [_activityIndicator removeFromSuperview];
        _activityIndicator = nil;
    }
}

extern "C" void UnityStartActivityIndicator()
{
    // AppleTV does not support activity indicators
    ShowActivityIndicator(UnityGetGLView());
}

extern "C" void UnityStopActivityIndicator()
{
    HideActivityIndicator();
}