blob: bbf63bf404f6d0a245ac703344c6e90147704e82 [file] [log] [blame]
/*
* Copyright (C) 2003 Apple Computer, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#import <Foundation/Foundation.h>
#import "KWQDateTime.h"
#import <time.h>
#import "WebCoreGraphicsBridge.h"
static CFTimeZoneRef systemTimeZone()
{
static CFTimeZoneRef zone = CFTimeZoneCopySystem();
return zone;
}
QTime::QTime(int hours, int minutes)
{
CFGregorianDate date;
date.year = 2001;
date.month = 1;
date.day = 1;
date.hour = hours;
date.minute = minutes;
date.second = 0;
timeInSeconds = CFGregorianDateGetAbsoluteTime(date, systemTimeZone());
}
int QTime::msec() const
{
CFAbsoluteTime seconds = CFAbsoluteTimeGetGregorianDate(timeInSeconds, systemTimeZone()).second;
return (int)(seconds * 1000) % 1000;
}
QTime QTime::addMSecs(int msecs) const
{
QTime newTime(*this);
newTime.timeInSeconds += ((double)msecs)/1000.0;
return newTime;
}
int QTime::elapsed() const
{
CFTimeInterval elapsed = CFAbsoluteTimeGetCurrent() - timeInSeconds;
return (int)(elapsed * 1000);
}
int QTime::restart()
{
CFAbsoluteTime currentTime = CFAbsoluteTimeGetCurrent();
CFTimeInterval elapsed = currentTime - timeInSeconds;
timeInSeconds = currentTime;
return (int)(elapsed * 1000);
}
QDate::QDate(int y, int m, int d)
: year(y), month(m), day(d)
{
}
QDateTime::QDateTime(const QDate &d, const QTime &t)
{
CFGregorianDate dateWithTime = CFAbsoluteTimeGetGregorianDate(t.timeInSeconds, systemTimeZone());
dateWithTime.year = d.year;
dateWithTime.month = d.month;
dateWithTime.day = d.day;
dateInSeconds = CFGregorianDateGetAbsoluteTime(dateWithTime, systemTimeZone());
}
int QDateTime::secsTo(const QDateTime &b) const
{
return (int)(b.dateInSeconds - dateInSeconds);
}
bool KWQUIEventTime::uiEventPending() const
{
return false;
/*
unsigned int mask = NSAnyEventMask &
~(NSFlagsChangedMask | NSAppKitDefinedMask | NSSystemDefinedMask | NSApplicationDefinedMask | NSPeriodicMask | NSCursorUpdateMask);
return [[NSApplication sharedApplication] nextEventMatchingMask:mask untilDate:nil
inMode:NSEventTrackingRunLoopMode dequeue:NO] != nil;
*/
}
#ifdef _KWQ_IOSTREAM_
std::ostream &operator<<(std::ostream &o, const QDate &date)
{
return o <<
"QDate: [yy/mm/dd: " <<
date.year <<
'/' <<
date.month <<
'/' <<
date.day <<
']';
}
std::ostream &operator<<(std::ostream &o, const QTime &time)
{
CFGregorianDate g = CFAbsoluteTimeGetGregorianDate(time.timeInSeconds, systemTimeZone());
return o <<
"QTime: [hh:mm:ss:ms = " <<
(int)g.hour <<
':' <<
(int)g.minute <<
':' <<
(int)g.second <<
':' <<
time.msec() <<
']';
}
std::ostream &operator<<(std::ostream &o, const QDateTime &dateTime)
{
CFGregorianDate g = CFAbsoluteTimeGetGregorianDate(dateTime.dateInSeconds, systemTimeZone());
return o <<
"QDateTime: [yy/mm/dd hh:mm:ss:ms = " <<
(int)g.year <<
'/' <<
(int)g.month <<
'/' <<
(int)g.day <<
' ' <<
(int)g.hour <<
':' <<
(int)g.minute <<
':' <<
(int)g.second <<
':' <<
((int)(g.second * 1000) % 1000) <<
']';
}
#endif // _KWQ_IOSTREAM_