<html>
<head>
<base href="https://bugs.freedesktop.org/" />
</head>
<body>
<p>
<div>
<b><a class="bz_bug_link
bz_status_ASSIGNED "
title="ASSIGNED --- - size specific design selection support in OS/2 table version 5"
href="https://bugs.freedesktop.org/show_bug.cgi?id=71287#c8">Comment # 8</a>
on <a class="bz_bug_link
bz_status_ASSIGNED "
title="ASSIGNED --- - size specific design selection support in OS/2 table version 5"
href="https://bugs.freedesktop.org/show_bug.cgi?id=71287">bug 71287</a>
from <span class="vcard"><a class="email" href="mailto:freedesktop@behdad.org" title="Behdad Esfahbod <freedesktop@behdad.org>"> <span class="fn">Behdad Esfahbod</span></a>
</span></b>
<pre>+ lower_size = os2->usLowerOpticalPointSize / 20;
+ upper_size = os2->usUpperOpticalPointSize / 20;
Float division instead?
+ if (os2)
+ {
+ r = FcRangeCreateDouble (lower_size, upper_size);
+ if (!FcPatternAddRange (pat, FC_SIZE, r))
If the range is not available (either old os2 or that the range is
all-inclusive), then, NOT set size? That would preserve most
backward-compatibility.
+ if (FcRangeIsInRange (r1, r2))
+ ret = 0.0;
+ else
+ ret = fabs (r1->u.d.end - r2->u.d.end);
This sounds wrong. If not in-range, then we want min((r1.end - r2.start),
abs(r1.start - r2.end)). No?
+FcRange *
+FcRangeEvaluate (FcOp op, const FcRange *left, const FcRange *right)
+{
+ FcRange *ret = NULL;
+ FcRange cl = FcRangeCanonicalize (left), cr = FcRangeCanonicalize (right);
+
+ switch ((int) op) {
+ case FcOpOr:
+ ret = FcRangeCreateDouble (FC_MIN (cl.u.d.begin, cr.u.d.begin),
+ FC_MAX (cl.u.d.end, cr.u.d.end));
+ break;
+ case FcOpAnd:
+ ret = FcRangeCreateDouble (FC_MAX (cl.u.d.begin, cr.u.d.begin),
+ FC_MIN (cl.u.d.end, cr.u.d.end));
+ break;
+ case FcOpPlus:
+ ret = FcRangeCreateDouble (cl.u.d.begin + cr.u.d.begin,
+ cl.u.d.end + cr.u.d.end);
+ break;
+ case FcOpMinus:
+ ret = FcRangeCreateDouble (cl.u.d.begin - cr.u.d.begin,
+ cl.u.d.end - cr.u.d.end);
+ break;
+ case FcOpTimes:
+ ret = FcRangeCreateDouble (cl.u.d.begin * cr.u.d.begin,
+ cl.u.d.end * cr.u.d.end);
+ break;
+ case FcOpDivide:
+ ret = FcRangeCreateDouble (cl.u.d.begin / cr.u.d.begin,
+ cl.u.d.end / cr.u.d.end);
+ break;
These don't make much sense. I suppose we can initially not implement any of
these, and add as we need them.
I haven't done any testing or a full close review. It's a bit unsettling how
much boilerplate changes we need for this. But, again, thanks for working on
this.</pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are on the CC list for the bug.</li>
</ul>
</body>
</html>