FcPattern.st
branchjv
changeset 7154 f2d585b5f20e
parent 7151 51e71e95c952
child 8420 76e39223f5ab
equal deleted inserted replaced
7151:51e71e95c952 7154:f2d585b5f20e
     9 	category:'Graphics-Support-FontConfig'
     9 	category:'Graphics-Support-FontConfig'
    10 !
    10 !
    11 
    11 
    12 !FcPattern primitiveDefinitions!
    12 !FcPattern primitiveDefinitions!
    13 %{
    13 %{
       
    14 #ifdef HAVE_FONTCONFIG
    14 /*
    15 /*
    15  * includes, defines, structure definitions
    16  * includes, defines, structure definitions
    16  * and typedefs come here.
    17  * and typedefs come here.
    17  */
    18  */
    18 #undef FcPattern
    19 #undef FcPattern
    22 
    23 
    23 #include <stdlib.h>
    24 #include <stdlib.h>
    24 #include <fontconfig/fontconfig.h>
    25 #include <fontconfig/fontconfig.h>
    25 
    26 
    26 #define FC_PATTERN_VAL(x) ((FcPattern*)__externalAddressVal(x))
    27 #define FC_PATTERN_VAL(x) ((FcPattern*)__externalAddressVal(x))
       
    28 #endif
    27 %}
    29 %}
    28 ! !
    30 ! !
    29 
    31 
    30 !FcPattern class methodsFor:'documentation'!
    32 !FcPattern class methodsFor:'documentation'!
    31 
    33 
   200      is added after existing values, otherwise it is added before them."
   202      is added after existing values, otherwise it is added before them."
   201 
   203 
   202     | error |
   204     | error |
   203 
   205 
   204 %{ /* STACK: 64000 */
   206 %{ /* STACK: 64000 */
       
   207 #ifdef HAVE_FONTCONFIG
   205     FcValue v;
   208     FcValue v;
   206     FcBool b;
   209     FcBool b;
   207 
   210 
   208     if ( ! __externalAddressVal ( self ) ) {
   211     if ( ! __externalAddressVal ( self ) ) {
   209 	error = @symbol(Released);
   212 	error = @symbol(Released);
   242     }
   245     }
   243     b = FcPatternAdd( FC_PATTERN_VAL(self), __stringVal(attribute), v, append == true ? FcTrue : FcFalse );
   246     b = FcPatternAdd( FC_PATTERN_VAL(self), __stringVal(attribute), v, append == true ? FcTrue : FcFalse );
   244     RETURN ( b == FcTrue ? true : false );
   247     RETURN ( b == FcTrue ? true : false );
   245 
   248 
   246     err:;
   249     err:;
       
   250 #endif
   247 %}.
   251 %}.
   248     self primitiveFailed: error
   252     self primitiveFailed: error
   249 
   253 
   250     "Created: / 20-12-2013 / 21:50:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   254     "Created: / 20-12-2013 / 21:50:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   251 !
   255 !
   280      with 'index' starting at one."
   284      with 'index' starting at one."
   281 
   285 
   282     | error |
   286     | error |
   283 
   287 
   284 %{ /* STACK: 64000 */
   288 %{ /* STACK: 64000 */
       
   289 #ifdef HAVE_FONTCONFIG
   285     FcValue v;
   290     FcValue v;
   286     FcResult r;
   291     FcResult r;
   287 
   292 
   288     if ( ! __externalAddressVal ( self ) ) {
   293     if ( ! __externalAddressVal ( self ) ) {
   289 	error = @symbol(Released);
   294 	error = @symbol(Released);
   314     } else {
   319     } else {
   315 	error = @symbol(UnssuportedTypeValue);
   320 	error = @symbol(UnssuportedTypeValue);
   316 	goto err;
   321 	goto err;
   317     }
   322     }
   318     err:;
   323     err:;
       
   324 #endif
   319 %}.
   325 %}.
   320     self primitiveFailed: error
   326     self primitiveFailed: error
   321 
   327 
   322 !
   328 !
   323 
   329 
   339 !
   345 !
   340 
   346 
   341 removeKey: attribute
   347 removeKey: attribute
   342     | error |
   348     | error |
   343 %{ /* STACK: 64000 */
   349 %{ /* STACK: 64000 */
       
   350 #ifdef HAVE_FONTCONFIG
   344     if ( ! __externalAddressVal ( self ) ) {
   351     if ( ! __externalAddressVal ( self ) ) {
   345 	error = @symbol(Released);
   352 	error = @symbol(Released);
   346 	goto err;
   353 	goto err;
   347     }
   354     }
   348     if ( ! __isStringLike ( attribute ) ) {
   355     if ( ! __isStringLike ( attribute ) ) {
   350 	goto err;
   357 	goto err;
   351     }
   358     }
   352     FcPatternDel( FC_PATTERN_VAL(self), __stringVal ( attribute ) );
   359     FcPatternDel( FC_PATTERN_VAL(self), __stringVal ( attribute ) );
   353     RETURN ( self );
   360     RETURN ( self );
   354     err:;
   361     err:;
       
   362 #endif
   355 %}.
   363 %}.
   356     self primitiveFailed: error
   364     self primitiveFailed: error
   357 
   365 
   358 ! !
   366 ! !
   359 
   367 
   360 !FcPattern methodsFor:'comparing'!
   368 !FcPattern methodsFor:'comparing'!
   361 
   369 
   362 = another
   370 = another
   363     self class == another class ifFalse:[ ^ false ].
   371     self class == another class ifFalse:[ ^ false ].
   364 %{ /* STACK: 64000 */
   372 %{ /* STACK: 64000 */
       
   373 #ifdef HAVE_FONTCONFIG
   365     FcPattern* pa = FC_PATTERN_VAL(self);
   374     FcPattern* pa = FC_PATTERN_VAL(self);
   366     FcPattern* pb = FC_PATTERN_VAL(another);
   375     FcPattern* pb = FC_PATTERN_VAL(another);
   367     if (pa != NULL && pb != NULL) {
   376     if (pa != NULL && pb != NULL) {
   368     	RETURN ( FcPatternEqual(pa, pb) == FcTrue ? true : false );
   377     	RETURN ( FcPatternEqual(pa, pb) == FcTrue ? true : false );
   369     }
   378     }
       
   379 #endif
   370 %}.
   380 %}.
   371     ^ false
   381     ^ false
   372 
   382 
   373     "Created: / 17-02-2016 / 11:01:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   383     "Created: / 17-02-2016 / 11:01:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   374 !
   384 !
   375 
   385 
   376 hash
   386 hash
   377 
   387 
   378 %{ /* STACK: 64000 */
   388 %{ /* STACK: 64000 */
       
   389 #ifdef HAVE_FONTCONFIG
   379     unsigned int h = 0;
   390     unsigned int h = 0;
   380     if (__externalAddressVal(self) != NULL) {
   391     if (__externalAddressVal(self) != NULL) {
   381         h = FcPatternHash(FC_PATTERN_VAL(self));
   392         h = FcPatternHash(FC_PATTERN_VAL(self));
   382         h &= 0x7FFFFFFFU;
   393         h &= 0x7FFFFFFFU;
   383     }
   394     }
   384     RETURN ( __MKSMALLINT( h ) );	
   395     RETURN ( __MKSMALLINT( h ) );	
       
   396 #endif
   385 %}.    
   397 %}.    
   386     ^self primitiveFailed
   398     ^self primitiveFailed
   387 
   399 
   388     "Created: / 17-02-2016 / 10:59:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   400     "Created: / 17-02-2016 / 10:59:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   389 ! !
   401 ! !
   390 
   402 
   391 !FcPattern methodsFor:'conversion'!
   403 !FcPattern methodsFor:'conversion'!
   392 
   404 
   393 asString
   405 asString
   394 %{ /* STACK: 64000 */
   406 %{ /* STACK: 64000 */
       
   407 #ifdef HAVE_FONTCONFIG
   395     char *_s;
   408     char *_s;
   396     OBJ s;
   409     OBJ s;
   397     if (__externalAddressVal(self) != NULL) {
   410     if (__externalAddressVal(self) != NULL) {
   398     	_s = (char*)FcNameUnparse(FC_PATTERN_VAL(self));
   411     	_s = (char*)FcNameUnparse(FC_PATTERN_VAL(self));
   399     	s = __MKSTRING(_s);
   412     	s = __MKSTRING(_s);
   400     	free(_s);
   413     	free(_s);
   401     	RETURN ( s );
   414     	RETURN ( s );
   402     }   
   415     }   
       
   416 #endif
   403 %}.
   417 %}.
   404     self primitiveFailed
   418     self primitiveFailed
   405 
   419 
   406     "Created: / 17-02-2016 / 10:55:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   420     "Created: / 17-02-2016 / 10:55:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   407 ! !
   421 ! !
   408 
   422 
   409 !FcPattern methodsFor:'copying'!
   423 !FcPattern methodsFor:'copying'!
   410 
   424 
   411 postCopy
   425 postCopy
   412 %{ /* STACK: 64000 */
   426 %{ /* STACK: 64000 */
       
   427 #ifdef HAVE_FONTCONFIG
   413     __externalAddressVal(self) = (void*)FcPatternDuplicate(FC_PATTERN_VAL(self));	
   428     __externalAddressVal(self) = (void*)FcPatternDuplicate(FC_PATTERN_VAL(self));	
       
   429 #endif
   414 %}.
   430 %}.
   415     self registerForFinalization
   431     self registerForFinalization
   416 
   432 
   417     "Created: / 17-02-2016 / 10:58:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   433     "Created: / 17-02-2016 / 10:58:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   434 ! !
       
   435 
       
   436 !FcPattern methodsFor:'error handling'!
       
   437 
       
   438 primitiveFailed
       
   439     <resource: #skipInDebuggersWalkBack>
       
   440 
       
   441     (ConfigurableFeatures hasFontConfig) ifFalse:[ 
       
   442         super primitiveFailed: 'FontConfig support not compiled in. Recompile with -DHAVE_FONTCONFIG'.        
       
   443     ].
       
   444     ^ super primitiveFailed
       
   445 
       
   446     "Created: / 22-02-2016 / 08:12:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   447 !
       
   448 
       
   449 primitiveFailed: message
       
   450     <resource: #skipInDebuggersWalkBack>
       
   451 
       
   452     (ConfigurableFeatures hasFontConfig) ifFalse:[ 
       
   453         super primitiveFailed: 'FontConfig support not compiled in. Recompile with -DHAVE_FONTCONFIG'.        
       
   454     ].
       
   455     ^ super primitiveFailed: message
       
   456 
       
   457     "Created: / 22-02-2016 / 08:13:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   418 ! !
   458 ! !
   419 
   459 
   420 !FcPattern methodsFor:'finalization'!
   460 !FcPattern methodsFor:'finalization'!
   421 
   461 
   422 destroy
   462 destroy
   423     %{ /* STACK: 64000 */
   463     %{ /* STACK: 64000 */
       
   464 #ifdef HAVE_FONTCONFIG
   424     FcPatternDestroy((FcPattern*)__externalAddressVal(self));
   465     FcPatternDestroy((FcPattern*)__externalAddressVal(self));
   425     __externalAddressVal(self) = NULL;
   466     __externalAddressVal(self) = NULL;
   426     RETURN ( self );
   467     RETURN ( self );
   427     %}.
   468     #endif
       
   469 %}.
   428     self primitiveFailed.
   470     self primitiveFailed.
   429 !
   471 !
   430 
   472 
   431 finalize
   473 finalize
   432     self destroy
   474     self destroy
   436 
   478 
   437 !FcPattern methodsFor:'initialization & release'!
   479 !FcPattern methodsFor:'initialization & release'!
   438 
   480 
   439 initialize    
   481 initialize    
   440 %{ /* STACK: 64000 */
   482 %{ /* STACK: 64000 */
       
   483 #ifdef HAVE_FONTCONFIG
   441     __externalAddressVal(self) = (void*)FcPatternCreate();
   484     __externalAddressVal(self) = (void*)FcPatternCreate();
   442     __SSEND0(self, @symbol(registerForFinalization), 4);
   485     __SSEND0(self, @symbol(registerForFinalization), 4);
   443     RETURN ( self );
   486     RETURN ( self );
   444     err:;
   487     err:;
   445 
   488 
       
   489 #endif
   446 %}.
   490 %}.
   447     self primitiveFailed.
   491     self primitiveFailed.
   448 
   492 
   449     "Created: / 16-02-2016 / 19:04:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   493     "Created: / 16-02-2016 / 19:04:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   450 
   494 
   451 !
   495 !
   452 
   496 
   453 initializeFromString: aString
   497 initializeFromString: aString
   454     | error |
   498     | error |
   455 %{ /* STACK: 64000 */
   499 %{ /* STACK: 64000 */
       
   500 #ifdef HAVE_FONTCONFIG
   456     if ( ! __isStringLike ( aString ) ) {
   501     if ( ! __isStringLike ( aString ) ) {
   457 	error = @symbol(BadArg1);
   502 	error = @symbol(BadArg1);
   458 	goto err;
   503 	goto err;
   459     }
   504     }
   460     __externalAddressVal(self) = (void*)FcNameParse(__stringVal(aString));
   505     __externalAddressVal(self) = (void*)FcNameParse(__stringVal(aString));
   461     __SSEND0(self, @symbol(registerForFinalization), 4);
   506     __SSEND0(self, @symbol(registerForFinalization), 4);
   462     RETURN ( self );
   507     RETURN ( self );
   463     err:;
   508     err:;
       
   509 #endif
   464 %}.
   510 %}.
   465     self primitiveFailed.
   511     self primitiveFailed.
   466 
   512 
   467 !
   513 !
   468 
   514