From ad953f8d4278aa2518208828b08e4868c245507d Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Wed, 13 Nov 2013 02:37:38 -0800 Subject: [PATCH 1/8] Add PathBuilder C bindings --- azure-c.cpp | 29 +++++++++++++++++++++++++++++ azure-c.h | 1 + 2 files changed, 30 insertions(+) diff --git a/azure-c.cpp b/azure-c.cpp index a6edb15..a484b2a 100644 --- a/azure-c.cpp +++ b/azure-c.cpp @@ -456,3 +456,32 @@ extern "C" AzGLContext AzSkiaGetCurrentGLContext() { return SkNativeSharedGLContext::GetCurrent(); } + +// FIXME: Needs to take a FillRule +extern "C" AzPathBuilderRef +AzCreatePathBuilder(AzDrawTargetRef aDrawTarget) { + gfx::DrawTarget *gfxDrawTarget = static_cast(aDrawTarget); + RefPtr gfxPathBuilder = gfxDrawTarget->CreatePathBuilder(); + gfxPathBuilder->AddRef(); + return gfxPathBuilder; +} + +extern "C" void +AzReleasePathBuilder(AzPathBuilderRef aPathBuilder) { + gfx::PathBuilder *gfxPathBuilder = static_cast(aPathBuilder); + gfxPathBuilder->Release(); +} + +extern "C" void +AzPathBuilderMoveTo(AzPathBuilderRef aPathBuilder, const AzPoint *aPoint) { + gfx::PathBuilder *gfxPathBuilder = static_cast(aPathBuilder); + const gfx::Point *gfxPoint = reinterpret_cast(aPoint); + gfxPathBuilder->MoveTo(*gfxPoint); +} + +extern "C" void +AzPathBuilderLineTo(AzPathBuilderRef aPathBuilder, const AzPoint *aPoint) { + gfx::PathBuilder *gfxPathBuilder = static_cast(aPathBuilder); + const gfx::Point *gfxPoint = reinterpret_cast(aPoint); + gfxPathBuilder->LineTo(*gfxPoint); +} diff --git a/azure-c.h b/azure-c.h index a134562..08328dc 100644 --- a/azure-c.h +++ b/azure-c.h @@ -296,6 +296,7 @@ typedef void* AzSourceSurfaceRef; typedef void* AzDrawSurfaceOptionsRef; typedef void* AzDataSourceSurfaceRef; typedef void* AzGLContextMetadataRef; +typedef void* AzPathBuilderRef; typedef GrGLSharedContext AzGLContext; typedef GrGLNativeContext* AzGLNativeContextRef; From ff8852f16f40a5ff4e94f896e612c8703db2b566 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Wed, 13 Nov 2013 02:58:14 -0800 Subject: [PATCH 2/8] Add PathBuilder Rust bindings --- azure.rs | 10 ++++++++++ azure_hl.rs | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/azure.rs b/azure.rs index c59f389..2b035ca 100644 --- a/azure.rs +++ b/azure.rs @@ -284,6 +284,8 @@ pub type AzGLContextMetadataRef = *c_void; pub type AzGLNativeContextRef = *c_void; +pub type AzPathBuilderRef = *c_void; + #[link_args="-lazure"] extern { @@ -364,4 +366,12 @@ pub fn AzDestroyFontOptions(aOptions: *AzFontOptions); pub fn AzSkiaGetCurrentGLContext() -> AzGLContext; +pub fn AzCreatePathBuilder(aDrawTarget: AzDrawTargetRef) -> AzPathBuilderRef; + +pub fn AzReleasePathBuilder(aPathBuilder: AzPathBuilderRef); + +pub fn AzPathBuilderMoveTo(aPathBuilder: AzPathBuilderRef, aPoint: *AzPoint); + +pub fn AzPathBuilderLineTo(aPathBuilder: AzPathBuilderRef, aPoint: *AzPoint); + } diff --git a/azure_hl.rs b/azure_hl.rs index 97842a0..c7eb492 100644 --- a/azure_hl.rs +++ b/azure_hl.rs @@ -27,6 +27,7 @@ use azure::{AzSourceSurfaceGetDataSurface, AzSourceSurfaceGetFormat}; use azure::{AzSourceSurfaceGetSize, AzCreateSkiaDrawTargetForFBO, AzSkiaGetCurrentGLContext}; use azure::{AzSkiaSharedGLContextMakeCurrent, AzSkiaSharedGLContextStealSurface}; use azure::{AzSkiaSharedGLContextFlush, AzSkiaGrGLSharedSurfaceRef}; +use azure::{AzCreatePathBuilder, AzPathBuilderRef, AzPathBuilderMoveTo, AzPathBuilderLineTo, AzReleasePathBuilder}; use extra::arc::Arc; use geom::matrix2d::Matrix2D; @@ -539,6 +540,15 @@ impl DrawTarget { renderingOptions); } } + + #[fixed_stack_segment] + pub fn create_path_builder(&self) -> PathBuilder { + unsafe { + PathBuilder { + azure_path_builder: AzCreatePathBuilder(self.azure_draw_target) + } + } + } } // Ugly workaround for the lack of explicit self. @@ -655,6 +665,37 @@ impl SourceSurfaceMethods for DataSourceSurface { } } +struct PathBuilder { + priv azure_path_builder: AzPathBuilderRef +} + +impl PathBuilder { + #[fixed_stack_segment] + pub fn move_to(&self, point: Point2D) { + unsafe { + let az_point = point.as_azure_point(); + AzPathBuilderMoveTo(self.azure_path_builder, &az_point); + } + } + + #[fixed_stack_segment] + pub fn line_to(&self, point: Point2D) { + unsafe { + let az_point = point.as_azure_point(); + AzPathBuilderLineTo(self.azure_path_builder, &az_point); + } + } +} + +impl Drop for PathBuilder { + #[fixed_stack_segment] + fn drop(&mut self) { + unsafe { + AzReleasePathBuilder(self.azure_path_builder); + } + } +} + #[fixed_stack_segment] pub fn current_gl_context() -> AzGLContext { unsafe { From 1380e16fb351af346b17ce8ad5e6bb5ed5c188a9 Mon Sep 17 00:00:00 2001 From: Sangeun Kim Date: Wed, 13 Nov 2013 20:05:00 +0900 Subject: [PATCH 3/8] Add Fill C bindings --- azure-c.cpp | 16 ++++++++++++++++ azure-c.h | 1 + 2 files changed, 17 insertions(+) diff --git a/azure-c.cpp b/azure-c.cpp index a484b2a..9480b17 100644 --- a/azure-c.cpp +++ b/azure-c.cpp @@ -282,6 +282,16 @@ AzDrawTargetClearRect(AzDrawTargetRef aDrawTarget, AzRect *aRect) { gfxDrawTarget->ClearRect(*gfxRect); } +extern "C" void +AzDrawTargetFill(AzDrawTargetRef aDrawTarget, AzPathRef aPath, + AzPatternRef aPattern, AzDrawOptions *aDrawOptions) { + gfx::DrawTarget *gfxDrawTarget = static_cast(aDrawTarget); + gfx::Path *gfxPath = static_cast(aPath); + gfx::Pattern *gfxPattern = static_cast(aPattern); + gfx::DrawOptions *gfxDrawOptions = reinterpret_cast(aDrawOptions); + gfxDrawTarget->Fill(gfxPath, *gfxPattern, *gfxDrawOptions); +} + extern "C" void AzDrawTargetFillRect(AzDrawTargetRef aDrawTarget, AzRect *aRect, AzPatternRef aPattern) { @@ -485,3 +495,9 @@ AzPathBuilderLineTo(AzPathBuilderRef aPathBuilder, const AzPoint *aPoint) { const gfx::Point *gfxPoint = reinterpret_cast(aPoint); gfxPathBuilder->LineTo(*gfxPoint); } + +extern "C" void +AzReleasePath(AzPathRef aPath) { + gfx::Path *gfxPath = static_cast(aPath); + gfxPath->Release(); +} diff --git a/azure-c.h b/azure-c.h index 08328dc..35400bf 100644 --- a/azure-c.h +++ b/azure-c.h @@ -297,6 +297,7 @@ typedef void* AzDrawSurfaceOptionsRef; typedef void* AzDataSourceSurfaceRef; typedef void* AzGLContextMetadataRef; typedef void* AzPathBuilderRef; +typedef void* AzPathRef; typedef GrGLSharedContext AzGLContext; typedef GrGLNativeContext* AzGLNativeContextRef; From 4c2d0ef588e1d72f8f7ac3a21884cc1efa5a9cbc Mon Sep 17 00:00:00 2001 From: Sangeun Kim Date: Wed, 13 Nov 2013 20:16:57 +0900 Subject: [PATCH 4/8] Add Fill Rust bindings --- .azure.rs.swp | Bin 0 -> 24576 bytes azure.rs | 5 +++++ azure_hl.rs | 24 ++++++++++++++++++++++++ 3 files changed, 29 insertions(+) create mode 100644 .azure.rs.swp diff --git a/.azure.rs.swp b/.azure.rs.swp new file mode 100644 index 0000000000000000000000000000000000000000..fa57393cd91438e6dced6886958048f46b4495a5 GIT binary patch literal 24576 zcmeI4dyFJS9miW9cRn~cK@&-MG#u*Qd3Sredv~mhko3;X4g<3@OV8}x9w%vgXL@&= zotYkHdiHJ?kB5MNhzTl?=pR0ipu9C2jCd*-jS>|+OhkxAP~;(~K@(BJ%WqXzbyxRP z&&~z#57V1`Zg#4F^{Zd~s=BIvRkb&}ZC7qmJ#*`bf}iz@a>2z{>93DIr#!ktQQBs` zzPxDH$)jFBC9AdMp7C8pTs^Zk>@Nq`A9sFcp&jW;(^2ii3bu7BpygSka!^RK;nVK1BnOT0uPu~ zMR^DG{)oimIREGI|Gmd4N(<}+JHT4720V4FqWl^B8axcX0j>w112vEWCxFM-Dat+I z8c+Zyfai`;lplg0fE$4g&ITudzr9OQ{t6C)?|~b@A~*-E1Bc$JC|?5yKoJzcX+Q<9 zq5{7G-vrkJ3!DSigX6%HZ&#Gt!6o1$;4E-FcxD3A8e2u0$&H0feXQQFanMRPhkV(AovWp4%9#joCw|rUcd&- zFTt(g3UE32DA)=m<))=tjZWRrRwnG4YqjvaVsz|=dzL~a0$rtoHf3n}T(*!&b5%ou zs)%5rSjcdxm;y@;v)Qy8^YKM$no*h_pUTZ-@?6)jtVGCVb!`uqky-_rK5Wt&u5H$A zvpwllt$4%W*SwM0l_?m-bZ=)+$=$g^I#ZC65MW-^FFDZ2llT78c$tkWf#=^{g*J@OIyQVm0q>9sppiF6@keVs_J#t7WFX%^* zNoPuBLn{}3!#*r)elA$tmGM=M_7t4<%{#M~T&}}8FVxer5%6sw|W4xG88@Vz@ zhZOgiv>FrPEL>Jv9YHp%S=yll=|WMT)cgS>rj8R%!!5bXz23HhR?h9p7*umg%jre$ z*9k3XaA|Xj`AX;KwC-$D--y{JwN!U5sh7lD*>tWum(*KguJmp_S7y}|>lWj<0_K(_ zi@2{$CXd+Zf)!Dk)`?Ohl}(}TG1l~K^JpgOb*6%6>{TINT6!dnF@+R2t^03h&kB_~ ztvRz|^{$iG6^eQWv(41Gxm1bUBz^INj>E;I-Noy<=qFrC+B>Kex&;@Kb_ObhUciN< zuA)L-qjR|!&%`w{9V@hzakH|B>43S6ts;cPt`)?%mO9^?zfwhAoDij>E0-p(5I0on zXD&$JQ7$QUwJ#|&p`oQxnS4gq%E7Wm+5)o7yfkTR@C@mkj@f#+_d0`u~ zm9eo+NZPR1tks--0}ZEP;DWi;s+eud@H$R=<3*4d+@zWv*TLIkS0KBr&RY$uWx7^X zon2PxJ@i?-QAMh{X%OOr>YQD(HmiG_j#@Drsx#}FHa;4b3WFD1w>dUASa(*i!Z)`% zt@**psr=yZ)@_4ZN#49&u^Me;U)ri7ajTk}Q%$wvG?!IpPIVV772@hXv#mB9SFPG@ zw`I?Eh%x(YcL4%+o2V({Q!P22R>e|NBzz(7zlyYWXZB*N;;ODgl_AQjw|&i?QR-A@ zwq{op691Dp``>`X|NMOZtBCb)0@I)jNbG+!_!46KF9I7ZfaAft!M%v@zYDGeSAa>7 z2d^Qve-+#h?gN*ACO93O243Q2(_l9FC-Feyfy4ue2NDk?9!NZpcp&jW;(@oo0|)3? z&s;;*R&=XoAsm`A-Gu>@{5yt3@~K;M8`-7-6(nin9lKVwTKHpMtL%8xRS$s=9C_Ipu zE<7DD3ufIyo{CXfFk5H_y6-*4cZG;3O`+DHZG^lbgM0^+EVtY;8|^v7mpvVWvV1{m z^rVTTJ5E7g4i4C$wS-Rj676CQG5cAu7f@g-s4xgLf+(m4iBx)}OLXol#L) z)Gn&r+r;W_21K|B&4R{gv0-grH20s7?!S}%Dz-K`RSYR4xU^CbR zHiETa4R{)N2Oa@G1wR2l244W52bY3HuovtBGhjOy0q+6iQpNMQWAGR7EVv)s2W|$} zffcYH>;u!F40eJu0J)o>fWPBT!tcS)!2{rD;3n`DZ~!a-9ZZ2DI2D`%Ucz04C%{j^ z?clRuAD9In0|xjI*aQ^t9PTeX3!VYDfm^|~paU)fd%=ZZC)fdw2QTAJ!ym!p;1A$# za2L21*kBrzfDX<88^9~L=kPLk2s{YB1ilECKnF~K3^)y_;C1xL*TAEI^v_2?zd!zE z2W=(g)SMQEc5H(+(C0&&g@V}X5}`RDP7NLUTiJXGL$6h3V@8i+J$W`ktRm;>%tHHN z$@d|hZJAXYQ&q`zn(ZD|1S2czkNK)oaSdE036e2j9Z*#K)V)ES?aOZV(#Te?KMw_& zNb+WO`-G^JYF01x23EE;oUJW4u^gG3qgPl0Q-t)umO`ga)7#h{$2w$W*l?LeJQ>p< z{WZo6L95J;kTa-kQ1%o%Sts)bT?Mg{bB(ICU$lqxMXw%0{i(7@k)$88jumWx2Oj8t z>>D#@TeWJ)3DQElHAE~ZVWqNY$qElWk(N8^`#x>97m9OpZEuA|=V#^{@+5CH=E-8T zjrlv2g}tcWqKHiDEYqZoH#~3GZMv2a)sf}uZoBF&ZP^29#Y5Id>P(y>tFe$St?$rI z-+HaqTrmB$NK97~^hGT27E__V<|X;%8Y9Dkdh!|?BSX=Y;VzlsE}5Y&nITa|>O5xN zrJ>i9tiD1PlLX)110zFLat4HuQe@D(kMrF9h;8U$E@ewws)Tzj}o`a*~5 zM^pUrmLtx`3(r=fF|F?@3>Si;yUXE;Vo`n#NXw%r|9f1GWTolkeZlPp+aLSavnC6R;kI9 zRz@ufhOVV^xDkRoTJYpC&;Ne^_lWU-2kr!SfUCh( zUp=}ee~FKOCEnfdH<&#fInwfUyEe29gncLPa#%k*MJ%@PGO*4hRY{gx{V2qo&6a(> zb$l0)-dQ%deDj<^)P%gl_Y=kPpo?m?txRV&fzK1q}14GFlLC_$#-P0$u z2_(D3NEc#rYOU}cPyJ|-9%`^XAf(4wi6=VlxLPgD-@XXj8;CwYb$e85wd%ky@u=nS zO^qqri(yH~yP5?h*KB!BPU8SrkZDw@3;Fjr=Y`^Anj@3~O+v%d=fd}%c9YJxn%zW( zDrG(Oe`zKCo1Hhy#u!hea3I$@Y)8Z>o2Yf#IM@qbxbER5ezc97Y8wuvfiilV!c>4|o!VEper;s*sq zhI`MJ;4##AlM%bcP0SE3bdy)bn}-l2@Z-8}V-9CB3d&x^v;i~LrZ>+YWPdy2a@HmL zXqix-mS~zZ7cF+k+E+`jrVlf8w#5%?`{_D-swU^XJY&S`60=LLW!C&jyB|Mz@0oX2 z(0#TbzCn`W$l`Cjm`nHPB2rW+U=?o(NVNB-RW#9i$=`@7vWv0G4?UrmltEj^Uxo%F zN2HJPGiBBp$XlDudnXpb*^6Z0*eIO-vNbNTE*|ME!0Cj>qH5bpAJ`so*i_IAk%Cb<8A5H+}jPaMo*R3ZhF;vRQ, pattern: &ColorPattern) { unsafe { @@ -665,6 +676,19 @@ impl SourceSurfaceMethods for DataSourceSurface { } } +struct Path { + priv azure_path: AzPathRef +} + +impl Drop for Path { + #[fixed_stack_segment] + fn drop(&mut self){ + unsafe { + AzReleasePath(self.azure_path); + } + } +} + struct PathBuilder { priv azure_path_builder: AzPathBuilderRef } From 76a614bb8b0baf3b0778cea4f4dc9016accfd5d7 Mon Sep 17 00:00:00 2001 From: Sangeun Kim Date: Thu, 14 Nov 2013 13:59:59 +0900 Subject: [PATCH 5/8] Add PathBuilder Finish Function bindings --- .azure.rs.swp | Bin 24576 -> 0 bytes azure-c.cpp | 8 ++++++++ azure.rs | 2 ++ azure_hl.rs | 12 +++++++++++- 4 files changed, 21 insertions(+), 1 deletion(-) delete mode 100644 .azure.rs.swp diff --git a/.azure.rs.swp b/.azure.rs.swp deleted file mode 100644 index fa57393cd91438e6dced6886958048f46b4495a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24576 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 } +extern "C" AzPathRef +AzPathBuilderFinish(AzPathBuilderRef aPathBuilder) { + gfx::PathBuilder *gfxPathBuilder = static_cast(aPathBuilder); + RefPtr gfxPath = gfxPathBuilder->Finish(); + gfxPath->AddRef(); + return gfxPath; +} + extern "C" void AzReleasePath(AzPathRef aPath) { gfx::Path *gfxPath = static_cast(aPath); diff --git a/azure.rs b/azure.rs index 80797a9..065ebbb 100644 --- a/azure.rs +++ b/azure.rs @@ -378,5 +378,7 @@ pub fn AzPathBuilderMoveTo(aPathBuilder: AzPathBuilderRef, aPoint: *AzPoint); pub fn AzPathBuilderLineTo(aPathBuilder: AzPathBuilderRef, aPoint: *AzPoint); +pub fn AzPathBuilderFinish(aPathBuilder: AzPathBuilderRef) -> AzPathRef; + pub fn AzReleasePath(aPath: AzPathRef); } diff --git a/azure_hl.rs b/azure_hl.rs index 489e106..4647829 100644 --- a/azure_hl.rs +++ b/azure_hl.rs @@ -27,7 +27,7 @@ use azure::{AzSourceSurfaceGetDataSurface, AzSourceSurfaceGetFormat}; use azure::{AzSourceSurfaceGetSize, AzCreateSkiaDrawTargetForFBO, AzSkiaGetCurrentGLContext}; use azure::{AzSkiaSharedGLContextMakeCurrent, AzSkiaSharedGLContextStealSurface}; use azure::{AzSkiaSharedGLContextFlush, AzSkiaGrGLSharedSurfaceRef}; -use azure::{AzCreatePathBuilder, AzPathBuilderRef, AzPathBuilderMoveTo, AzPathBuilderLineTo, AzReleasePathBuilder}; +use azure::{AzCreatePathBuilder, AzPathBuilderRef, AzPathBuilderMoveTo, AzPathBuilderLineTo, AzPathBuilderFinish, AzReleasePathBuilder}; use azure::{AzDrawTargetFill, AzPathRef, AzReleasePath}; use extra::arc::Arc; @@ -709,6 +709,16 @@ impl PathBuilder { AzPathBuilderLineTo(self.azure_path_builder, &az_point); } } + + #[fixed_stack_segment] + pub fn finish(&self) -> Path{ + unsafe { + let az_path = AzPathBuilderFinish(self.azure_path_builder); + Path { + azure_path : az_path + } + } + } } impl Drop for PathBuilder { From 8b78cc2968a734aaf0087fc10d182c5987bed937 Mon Sep 17 00:00:00 2001 From: HyunJune Kim Date: Thu, 14 Nov 2013 16:12:08 +0900 Subject: [PATCH 6/8] Add PushClip and PopClip Function C bindings --- azure-c.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/azure-c.cpp b/azure-c.cpp index 6d83ab8..e2e85c3 100644 --- a/azure-c.cpp +++ b/azure-c.cpp @@ -292,6 +292,19 @@ AzDrawTargetFill(AzDrawTargetRef aDrawTarget, AzPathRef aPath, gfxDrawTarget->Fill(gfxPath, *gfxPattern, *gfxDrawOptions); } +extern "C" void +AzDrawTargetPushClip(AzDrawTargetRef aDrawTarget, const AzPathRef *aPath) { + gfx::DrawTarget *gfxDrawTarget = static_cast(aDrawTarget); + const gfx::Path *gfxPath = reinterpret_cast(aPath); + gfxDrawTarget->PushClip(gfxPath); +} + +extern "C" void +AzDrawTargetPopClip(AzDrawTargetRef aDrawTarget) { + gfx::DrawTarget *gfxDrawTarget = static_cast(aDrawTarget); + gfxDrawTarget->PopClip(); +} + extern "C" void AzDrawTargetFillRect(AzDrawTargetRef aDrawTarget, AzRect *aRect, AzPatternRef aPattern) { From 9b3e806aacf0792a458e7386280ae6240b1f802b Mon Sep 17 00:00:00 2001 From: HyunJune Kim Date: Thu, 14 Nov 2013 16:13:03 +0900 Subject: [PATCH 7/8] Add PushClip and PopClip Function rust bindings --- azure.rs | 5 +++++ azure_hl.rs | 20 +++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/azure.rs b/azure.rs index 065ebbb..29be455 100644 --- a/azure.rs +++ b/azure.rs @@ -338,6 +338,10 @@ pub fn AzDrawTargetStrokeLine(aDrawTarget: AzDrawTargetRef, aStart: *AzPoint, aE pub fn AzDrawTargetFill(aDrawTarget: AzDrawTargetRef, aPath: AzPathRef, aPattern: AzPatternRef, aOptions: *AzDrawOptions); +pub fn AzDrawTargetPushClip(aDrawTarget: AzDrawTargetRef, aPath: AzPathRef); + +pub fn AzDrawTargetPopClip(aDrawTarget: AzDrawTargetRef); + pub fn AzDrawTargetFillGlyphs(aDrawTarget: AzDrawTargetRef, aFont: AzScaledFontRef, aGlyphBuffer: *AzGlyphBuffer, aPattern: AzPatternRef, aOptions: *AzDrawOptions, aRenderingOptions: AzGlyphRenderingOptionsRef); pub fn AzDrawTargetDrawSurface(aDrawTarget: AzDrawTargetRef, aSurface: AzSourceSurfaceRef, aDest: *AzRect, aSource: *AzRect, aSurfOptions: AzDrawSurfaceOptionsRef, aOptions: *AzDrawOptions); @@ -381,4 +385,5 @@ pub fn AzPathBuilderLineTo(aPathBuilder: AzPathBuilderRef, aPoint: *AzPoint); pub fn AzPathBuilderFinish(aPathBuilder: AzPathBuilderRef) -> AzPathRef; pub fn AzReleasePath(aPath: AzPathRef); + } diff --git a/azure_hl.rs b/azure_hl.rs index 4647829..79d7168 100644 --- a/azure_hl.rs +++ b/azure_hl.rs @@ -28,7 +28,7 @@ use azure::{AzSourceSurfaceGetSize, AzCreateSkiaDrawTargetForFBO, AzSkiaGetCurre use azure::{AzSkiaSharedGLContextMakeCurrent, AzSkiaSharedGLContextStealSurface}; use azure::{AzSkiaSharedGLContextFlush, AzSkiaGrGLSharedSurfaceRef}; use azure::{AzCreatePathBuilder, AzPathBuilderRef, AzPathBuilderMoveTo, AzPathBuilderLineTo, AzPathBuilderFinish, AzReleasePathBuilder}; -use azure::{AzDrawTargetFill, AzPathRef, AzReleasePath}; +use azure::{AzDrawTargetFill, AzPathRef, AzReleasePath, AzDrawTargetPushClip, AzDrawTargetPopClip}; use extra::arc::Arc; use geom::matrix2d::Matrix2D; @@ -560,6 +560,24 @@ impl DrawTarget { } } } + + #[fixed_stack_segment] + pub fn push_clip(&self, path: &Path) { + + unsafe { + AzDrawTargetPushClip(self.azure_draw_target,path.azure_path); + } + } + + #[fixed_stack_segment] + pub fn pop_clip(&self) { + + unsafe { + AzDrawTargetPopClip(self.azure_draw_target); + } + + } + } // Ugly workaround for the lack of explicit self. From 1398b66c72304c705edba9e70e2db851587d55e6 Mon Sep 17 00:00:00 2001 From: HyunJune Kim Date: Fri, 15 Nov 2013 09:29:57 +0900 Subject: [PATCH 8/8] Delete new Lines --- azure_hl.rs | 3 --- 1 file changed, 3 deletions(-) diff --git a/azure_hl.rs b/azure_hl.rs index 79d7168..b1d6d22 100644 --- a/azure_hl.rs +++ b/azure_hl.rs @@ -563,7 +563,6 @@ impl DrawTarget { #[fixed_stack_segment] pub fn push_clip(&self, path: &Path) { - unsafe { AzDrawTargetPushClip(self.azure_draw_target,path.azure_path); } @@ -571,13 +570,11 @@ impl DrawTarget { #[fixed_stack_segment] pub fn pop_clip(&self) { - unsafe { AzDrawTargetPopClip(self.azure_draw_target); } } - } // Ugly workaround for the lack of explicit self.