Preparation for proper, extensible state tracking and clipping on Windows.
This commit is contained in:
parent
c525234ec9
commit
c6cdabe20d
|
@ -395,6 +395,14 @@ void uiDrawMatrixTransformSize(uiDrawMatrix *m, double *x, double *y)
|
||||||
*y = s.height;
|
*y = s.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void uiDrawTransform(uiDrawContext *c, uiDrawMatrix *m)
|
||||||
|
{
|
||||||
|
CGAffineTransform cm;
|
||||||
|
|
||||||
|
m2c(m, &cm);
|
||||||
|
CGContextConcatCTM(c->c, cm);
|
||||||
|
}
|
||||||
|
|
||||||
// TODO figure out what besides transforms these save/restore on all platforms
|
// TODO figure out what besides transforms these save/restore on all platforms
|
||||||
void uiDrawSave(uiDrawContext *c)
|
void uiDrawSave(uiDrawContext *c)
|
||||||
{
|
{
|
||||||
|
@ -405,11 +413,3 @@ void uiDrawRestore(uiDrawContext *c)
|
||||||
{
|
{
|
||||||
CGContextRestoreGState(c->c);
|
CGContextRestoreGState(c->c);
|
||||||
}
|
}
|
||||||
|
|
||||||
void uiDrawTransform(uiDrawContext *c, uiDrawMatrix *m)
|
|
||||||
{
|
|
||||||
CGAffineTransform cm;
|
|
||||||
|
|
||||||
m2c(m, &cm);
|
|
||||||
CGContextConcatCTM(c->c, cm);
|
|
||||||
}
|
|
||||||
|
|
5
ui.h
5
ui.h
|
@ -423,9 +423,12 @@ _UI_EXTERN int uiDrawMatrixInvert(uiDrawMatrix *m);
|
||||||
_UI_EXTERN void uiDrawMatrixTransformPoint(uiDrawMatrix *m, double *x, double *y);
|
_UI_EXTERN void uiDrawMatrixTransformPoint(uiDrawMatrix *m, double *x, double *y);
|
||||||
_UI_EXTERN void uiDrawMatrixTransformSize(uiDrawMatrix *m, double *x, double *y);
|
_UI_EXTERN void uiDrawMatrixTransformSize(uiDrawMatrix *m, double *x, double *y);
|
||||||
|
|
||||||
|
_UI_EXTERN void uiDrawTransform(uiDrawContext *c, uiDrawMatrix *m);
|
||||||
|
|
||||||
|
// TODO put uiDrawClip here
|
||||||
|
|
||||||
_UI_EXTERN void uiDrawSave(uiDrawContext *c);
|
_UI_EXTERN void uiDrawSave(uiDrawContext *c);
|
||||||
_UI_EXTERN void uiDrawRestore(uiDrawContext *c);
|
_UI_EXTERN void uiDrawRestore(uiDrawContext *c);
|
||||||
_UI_EXTERN void uiDrawTransform(uiDrawContext *c, uiDrawMatrix *m);
|
|
||||||
|
|
||||||
typedef enum uiModifiers uiModifiers;
|
typedef enum uiModifiers uiModifiers;
|
||||||
|
|
||||||
|
|
1
uipriv.h
1
uipriv.h
|
@ -5,6 +5,7 @@
|
||||||
#define uthash_malloc(sz) uiAlloc((sz), "(uthash internal)")
|
#define uthash_malloc(sz) uiAlloc((sz), "(uthash internal)")
|
||||||
#define uthash_free(ptr,sz) uiFree((ptr))
|
#define uthash_free(ptr,sz) uiFree((ptr))
|
||||||
#include "uthash/uthash.h"
|
#include "uthash/uthash.h"
|
||||||
|
#include "uthash/utarray.h"
|
||||||
|
|
||||||
extern uiInitOptions options;
|
extern uiInitOptions options;
|
||||||
|
|
||||||
|
|
16
unix/draw.c
16
unix/draw.c
|
@ -414,6 +414,14 @@ void uiDrawMatrixTransformSize(uiDrawMatrix *m, double *x, double *y)
|
||||||
cairo_matrix_transform_distance(&c, x, y);
|
cairo_matrix_transform_distance(&c, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void uiDrawTransform(uiDrawContext *c, uiDrawMatrix *m)
|
||||||
|
{
|
||||||
|
cairo_matrix_t cm;
|
||||||
|
|
||||||
|
m2c(m, &cm);
|
||||||
|
cairo_transform(c->cr, &cm);
|
||||||
|
}
|
||||||
|
|
||||||
void uiDrawSave(uiDrawContext *c)
|
void uiDrawSave(uiDrawContext *c)
|
||||||
{
|
{
|
||||||
cairo_save(c->cr);
|
cairo_save(c->cr);
|
||||||
|
@ -423,11 +431,3 @@ void uiDrawRestore(uiDrawContext *c)
|
||||||
{
|
{
|
||||||
cairo_restore(c->cr);
|
cairo_restore(c->cr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void uiDrawTransform(uiDrawContext *c, uiDrawMatrix *m)
|
|
||||||
{
|
|
||||||
cairo_matrix_t cm;
|
|
||||||
|
|
||||||
m2c(m, &cm);
|
|
||||||
cairo_transform(c->cr, &cm);
|
|
||||||
}
|
|
||||||
|
|
|
@ -650,6 +650,27 @@ void uiDrawMatrixTransformSize(uiDrawMatrix *m, double *x, double *y)
|
||||||
fallbackTransformSize(m, x, y);
|
fallbackTransformSize(m, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void uiDrawTransform(uiDrawContext *c, uiDrawMatrix *m)
|
||||||
|
{
|
||||||
|
D2D1_MATRIX_3X2_F dm;
|
||||||
|
uiDrawMatrix already;
|
||||||
|
uiDrawMatrix temp;
|
||||||
|
|
||||||
|
ID2D1RenderTarget_GetTransform(c->rt, &dm);
|
||||||
|
d2m(&dm, &already);
|
||||||
|
temp = *m; // don't modify m
|
||||||
|
// you would think we have to do already * m, right?
|
||||||
|
// WRONG! we have to do m * already
|
||||||
|
// why? a few reasons
|
||||||
|
// a) this lovely comment in cairo's source - http://cgit.freedesktop.org/cairo/tree/src/cairo-matrix.c?id=0537479bd1d4c5a3bc0f6f41dec4deb98481f34a#n330
|
||||||
|
// Direct2D uses column vectors and I don't know if this is even documented
|
||||||
|
// b) that's what Core Graphics does
|
||||||
|
// TODO see if Microsoft says to do this
|
||||||
|
uiDrawMatrixMultiply(&temp, &already);
|
||||||
|
m2d(&temp, &dm);
|
||||||
|
ID2D1RenderTarget_SetTransform(c->rt, &dm);
|
||||||
|
}
|
||||||
|
|
||||||
void uiDrawSave(uiDrawContext *c)
|
void uiDrawSave(uiDrawContext *c)
|
||||||
{
|
{
|
||||||
ID2D1DrawingStateBlock *dsb;
|
ID2D1DrawingStateBlock *dsb;
|
||||||
|
@ -675,24 +696,3 @@ void uiDrawRestore(uiDrawContext *c)
|
||||||
ID2D1RenderTarget_RestoreDrawingState(c->rt, dsb);
|
ID2D1RenderTarget_RestoreDrawingState(c->rt, dsb);
|
||||||
ID2D1DrawingStateBlock_Release(dsb);
|
ID2D1DrawingStateBlock_Release(dsb);
|
||||||
}
|
}
|
||||||
|
|
||||||
void uiDrawTransform(uiDrawContext *c, uiDrawMatrix *m)
|
|
||||||
{
|
|
||||||
D2D1_MATRIX_3X2_F dm;
|
|
||||||
uiDrawMatrix already;
|
|
||||||
uiDrawMatrix temp;
|
|
||||||
|
|
||||||
ID2D1RenderTarget_GetTransform(c->rt, &dm);
|
|
||||||
d2m(&dm, &already);
|
|
||||||
temp = *m; // don't modify m
|
|
||||||
// you would think we have to do already * m, right?
|
|
||||||
// WRONG! we have to do m * already
|
|
||||||
// why? a few reasons
|
|
||||||
// a) this lovely comment in cairo's source - http://cgit.freedesktop.org/cairo/tree/src/cairo-matrix.c?id=0537479bd1d4c5a3bc0f6f41dec4deb98481f34a#n330
|
|
||||||
// Direct2D uses column vectors and I don't know if this is even documented
|
|
||||||
// b) that's what Core Graphics does
|
|
||||||
// TODO see if Microsoft says to do this
|
|
||||||
uiDrawMatrixMultiply(&temp, &already);
|
|
||||||
m2d(&temp, &dm);
|
|
||||||
ID2D1RenderTarget_SetTransform(c->rt, &dm);
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue