aboutsummaryrefslogtreecommitdiffhomepage
path: root/gtk/PlatGTK.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/PlatGTK.cxx')
-rw-r--r--gtk/PlatGTK.cxx40
1 files changed, 40 insertions, 0 deletions
diff --git a/gtk/PlatGTK.cxx b/gtk/PlatGTK.cxx
index 34a33f581..7ecd1cbee 100644
--- a/gtk/PlatGTK.cxx
+++ b/gtk/PlatGTK.cxx
@@ -886,6 +886,46 @@ void Menu::Show(Point pt, Window &) {
gtk_item_factory_popup(reinterpret_cast<GtkItemFactory *>(id), pt.x - 4, pt.y, 3, 0);
}
+static double DoublePack(glong a, glong b) {
+ double d;
+ long *lp = reinterpret_cast<glong *>(&d);
+ lp[0] = a;
+ lp[1] = b;
+ return d;
+}
+
+static void DoubleUnpack(double d, glong &a, glong &b) {
+ long *lp = reinterpret_cast<glong *>(&d);
+ a = lp[0];
+ b = lp[1];
+}
+
+static double Now() {
+ GTimeVal curTime;
+ g_get_current_time(&curTime);
+ return DoublePack(curTime.tv_sec, curTime.tv_usec);
+}
+
+ElapsedTime::ElapsedTime() {
+ beginTime = Now();
+}
+
+double ElapsedTime::Duration(bool reset) {
+ double endTime = Now();
+ GTimeVal tvStart;
+ DoubleUnpack(beginTime, tvStart.tv_sec, tvStart.tv_usec);
+ GTimeVal tvEnd;
+ DoubleUnpack(endTime, tvEnd.tv_sec, tvEnd.tv_usec);
+ double result = tvEnd.tv_sec - tvStart.tv_sec;
+ result *= 1000000;
+ result += tvEnd.tv_usec - tvStart.tv_usec;
+ result /= 1000000;
+ if (reset) {
+ beginTime = endTime;
+ }
+ return result;
+}
+
ColourDesired Platform::Chrome() {
return ColourDesired(0xe0, 0xe0, 0xe0);
}