mirror of
https://github.com/gnustep/libs-back.git
synced 2025-06-01 17:52:33 +00:00
Convert floats from user space to drawing space and visa versa.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/back/trunk@25553 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
a9e8d647b2
commit
1a8804adbb
3 changed files with 49 additions and 10 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2007-11-05 Fred Kiefer <FredKiefer@gmx.de>
|
||||||
|
|
||||||
|
* Source/cairo/CairoGState.m (-DPSsetflat:, -DPSsetlinewidth:,
|
||||||
|
-DPSsetmiterlimit, -DPScurrentflat:, -DPScurrentlinewidth:,
|
||||||
|
-DPScurrentmiterlimit:, -DPSsetdash:::): Convert floats from user
|
||||||
|
space to drawing space and visa versa.
|
||||||
|
* Source/cairo/CairoGState.m (-DPSsetdash:::): Adjust dash values slightly.
|
||||||
|
* Source/cairo/CairoFontEnumerator.m: Change NSLog to NSDebugLog.
|
||||||
|
|
||||||
2007-10-31 Fred Kiefer <FredKiefer@gmx.de>
|
2007-10-31 Fred Kiefer <FredKiefer@gmx.de>
|
||||||
|
|
||||||
* Source/x11/XGServerWindow.m (-_setupRootWindow): Use
|
* Source/x11/XGServerWindow.m (-_setupRootWindow): Use
|
||||||
|
|
|
@ -57,7 +57,7 @@ NSMutableDictionary * __allFonts;
|
||||||
face = [__allFonts objectForKey: name];
|
face = [__allFonts objectForKey: name];
|
||||||
if (!face)
|
if (!face)
|
||||||
{
|
{
|
||||||
NSLog (@"Font not found %@", name);
|
NSDebugLog(@"Font not found %@", name);
|
||||||
}
|
}
|
||||||
return face;
|
return face;
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,6 +72,32 @@
|
||||||
NSZoneFree(NSDefaultMallocZone(), _base); \
|
NSZoneFree(NSDefaultMallocZone(), _base); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static float floatFromUserSpace(NSAffineTransform *ctm, float f)
|
||||||
|
{
|
||||||
|
NSSize s = {f, f};
|
||||||
|
|
||||||
|
if (ctm)
|
||||||
|
{
|
||||||
|
s = [ctm transformSize: s];
|
||||||
|
f = (((s.width > 0.0) ? s.width : -s.width) +
|
||||||
|
((s.height > 0.0) ? s.height : -s.height)) / 2;
|
||||||
|
}
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
|
||||||
|
static float floatToUserSpace(NSAffineTransform *ctm, float f)
|
||||||
|
{
|
||||||
|
NSAffineTransform *ictm;
|
||||||
|
|
||||||
|
ictm = [ctm copyWithZone: GSObjCZone(ctm)];
|
||||||
|
[ictm invert];
|
||||||
|
f = floatFromUserSpace(ictm, f);
|
||||||
|
RELEASE(ictm);
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@implementation CairoGState
|
@implementation CairoGState
|
||||||
|
|
||||||
+ (void) initialize
|
+ (void) initialize
|
||||||
|
@ -330,6 +356,7 @@
|
||||||
{
|
{
|
||||||
if (_ct)
|
if (_ct)
|
||||||
{
|
{
|
||||||
|
size = floatFromUserSpace(ctm, size);
|
||||||
cairo_set_font_size(_ct, size);
|
cairo_set_font_size(_ct, size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -424,7 +451,8 @@
|
||||||
{
|
{
|
||||||
if (_ct)
|
if (_ct)
|
||||||
{
|
{
|
||||||
*flatness = cairo_get_tolerance(_ct);
|
*flatness = (float)cairo_get_tolerance(_ct);
|
||||||
|
*flatness = floatToUserSpace(ctm, *flatness);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -488,7 +516,8 @@
|
||||||
{
|
{
|
||||||
if (_ct)
|
if (_ct)
|
||||||
{
|
{
|
||||||
*width = cairo_get_line_width(_ct);
|
*width = (float)cairo_get_line_width(_ct);
|
||||||
|
*width = floatToUserSpace(ctm, *width);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -496,7 +525,8 @@
|
||||||
{
|
{
|
||||||
if (_ct)
|
if (_ct)
|
||||||
{
|
{
|
||||||
*limit = cairo_get_miter_limit(_ct);
|
*limit = (float)cairo_get_miter_limit(_ct);
|
||||||
|
*limit = floatToUserSpace(ctm, *limit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -510,16 +540,16 @@
|
||||||
if (_ct)
|
if (_ct)
|
||||||
{
|
{
|
||||||
GS_BEGINITEMBUF(dpat, size, double);
|
GS_BEGINITEMBUF(dpat, size, double);
|
||||||
double doffset = foffset;
|
double doffset = (double)floatFromUserSpace(ctm, foffset);
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
i = size;
|
i = size;
|
||||||
while (i)
|
while (i)
|
||||||
{
|
{
|
||||||
i--;
|
i--;
|
||||||
dpat[i] = pat[i];
|
// FIXME: When using the correct values, some dashes look wrong
|
||||||
|
dpat[i] = (double)floatFromUserSpace(ctm, pat[i]) * 1.4;
|
||||||
}
|
}
|
||||||
// FIXME: There may be a difference in concept as some dashes look wrong
|
|
||||||
cairo_set_dash(_ct, dpat, size, doffset);
|
cairo_set_dash(_ct, dpat, size, doffset);
|
||||||
GS_ENDITEMBUF();
|
GS_ENDITEMBUF();
|
||||||
}
|
}
|
||||||
|
@ -530,7 +560,7 @@
|
||||||
[super DPSsetflat: flatness];
|
[super DPSsetflat: flatness];
|
||||||
if (_ct)
|
if (_ct)
|
||||||
{
|
{
|
||||||
cairo_set_tolerance(_ct, flatness);
|
cairo_set_tolerance(_ct, floatFromUserSpace(ctm, flatness));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -554,7 +584,7 @@
|
||||||
{
|
{
|
||||||
if (_ct)
|
if (_ct)
|
||||||
{
|
{
|
||||||
cairo_set_line_width(_ct, width);
|
cairo_set_line_width(_ct, floatFromUserSpace(ctm, width));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -562,7 +592,7 @@
|
||||||
{
|
{
|
||||||
if (_ct)
|
if (_ct)
|
||||||
{
|
{
|
||||||
cairo_set_miter_limit(_ct, limit);
|
cairo_set_miter_limit(_ct, floatFromUserSpace(ctm, limit));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue