Change from_argb_hex() (which wasn't being used) to from_rgba_hex().
[libsub.git] / src / vertical_position.cc
index 3984568d756e4b64d2a5cbd7dd84d4b6c54559d9..aca327f36fe18c9aff6e20b0913b864b4f084ec8 100644 (file)
 */
 
 #include "vertical_position.h"
+#include <iostream>
 
 using namespace sub;
 
+float
+VerticalPosition::fraction_from_screen_top () const
+{
+       if (!reference || (!proportional && !line)) {
+               return 0;
+       }
+
+       float const prop = proportional ? proportional.get() : (float (line.get()) / lines.get ());
+
+       switch (reference.get ()) {
+       case TOP_OF_SCREEN:
+               return prop;
+       case VERTICAL_CENTRE_OF_SCREEN:
+               return prop + 0.5;
+       case BOTTOM_OF_SCREEN:
+               return 1 - prop;
+       case TOP_OF_SUBTITLE:
+               return prop;
+       }
+
+       return 0;
+}
+
 bool
 VerticalPosition::operator== (VerticalPosition const & other) const
 {
        if (proportional && reference && other.proportional && other.reference) {
-               return proportional.get() == other.proportional.get() && reference.get() == other.reference.get();
-       } else if (line && other.line) {
-               return line.get() == other.line.get();
+               return proportional == other.proportional && reference == other.reference;
+       } else if (reference && line && lines && other.reference && other.line && other.lines) {
+               return line == other.line && lines == other.lines && reference == other.reference;
+       } else if (reference && line && other.reference && other.line) {
+               return reference == other.reference && line == other.line;
        }
 
        return false;
 }
+
+bool
+VerticalPosition::operator< (VerticalPosition const & other) const
+{
+       return fraction_from_screen_top() < other.fraction_from_screen_top();
+}