WinWorkstation.st
changeset 6486 4bd177a046f1
parent 6376 73ebac4ef970
child 6494 e0f0e0570c4a
equal deleted inserted replaced
6484:5d1889e556a7 6486:4bd177a046f1
 10596     if (__isExternalAddress(aGCId)
 10596     if (__isExternalAddress(aGCId)
 10597      && __isNonNilObject(aString)
 10597      && __isNonNilObject(aString)
 10598      && __bothSmallInteger(index1, index2)
 10598      && __bothSmallInteger(index1, index2)
 10599      && __bothSmallInteger(x, y))
 10599      && __bothSmallInteger(x, y))
 10600     {
 10600     {
 10601 	struct gcData *gcData = _GCDATA(aGCId);
 10601 	struct gcData *gcData;
 10602 	int pX, pY;
 10602 	int pX, pY;
 10603 	HDC hDC = _getDC(gcData);
 10603 	HDC hDC;
 10604 	HFONT hOldFont;
 10604 	HFONT hOldFont;
 10605 
 10605 
       
 10606 	i1 = __intVal(index1) - 1;
       
 10607 	i2 = __intVal(index2) - 1;
       
 10608 	if ((i1 < 0) || (i2 < i1)) {
       
 10609 	    RETURN (self);
       
 10610 	}
       
 10611 
       
 10612 	gcData = _GCDATA(aGCId);
       
 10613 	hDC = _getDC(gcData);
 10606 	pX = __intVal(x);
 10614 	pX = __intVal(x);
 10607 	pY = __intVal(y);
 10615 	pY = __intVal(y);
 10608 	pY -= gcData->fontAscent;
 10616 	pY -= gcData->fontAscent;
 10609 
 10617 
 10610 	if (opaque == true) {
 10618 	if (opaque == true) {
 10630 	GcDataGetPen(hDC, gcData);
 10638 	GcDataGetPen(hDC, gcData);
 10631 #endif
 10639 #endif
 10632 
 10640 
 10633 	cls = __qClass(aString);
 10641 	cls = __qClass(aString);
 10634 
 10642 
 10635 	i1 = __intVal(index1) - 1;
 10643 	cp = __stringVal(aString);
 10636 	i2 = __intVal(index2) - 1;
 10644 	l = i2 - i1 + 1;
 10637 	if (i1 >= 0 && i2 >= i1) {
 10645 	if (l > 32758) {
 10638 	    cp = __stringVal(aString);
 10646 	    /* Windows (as in XP) limits the string size for TextOut* to 32758 */
 10639 	    l = i2 - i1 + 1;
 10647 	    l = 32758;
 10640 	    if (l > 32758) {
 10648 	}
 10641 		/* Windows (as in XP) limits the string size for TextOut* to 32758 */
 10649 
 10642 		l = 32758;
 10650 	if (__isStringLike(aString)) {
 10643 	    }
 10651 	    n = __stringSize(aString);
 10644 
       
 10645 	    if (__isStringLike(aString)) {
       
 10646 		n = __stringSize(aString);
       
 10647 commonOutChars:
 10652 commonOutChars:
 10648 		if (i2 < n) {
 10653 	    if (i2 < n) {
 10649 		    cp += i1;
 10654 		cp += i1;
 10650 		    CPRINTF(("string1: %s pos=%d/%d l=%d hDC=%x\n", cp, pX, pY,l,hDC));
 10655 		CPRINTF(("string1: %s pos=%d/%d l=%d hDC=%x\n", cp, pX, pY,l,hDC));
 10651 		    if (! TextOutA(hDC, pX, pY, (char *)cp, l)) {
 10656 		if (! TextOutA(hDC, pX, pY, (char *)cp, l)) {
 10652 			PRINTF(("WinWorkstation [warning]: TextOutA failed. [%d]\n", __LINE__));
 10657 		    PRINTF(("WinWorkstation [warning]: TextOutA failed. [%d]\n", __LINE__));
 10653 			PRINTF(("WinWorkstation [warning]: lastError=%d x:%d y:%d len:%d\n", GetLastError(), pX, pY, l));
 10658 		    PRINTF(("WinWorkstation [warning]: lastError=%d x:%d y:%d len:%d\n", GetLastError(), pX, pY, l));
 10654 			goto error;
 10659 		    goto error;
 10655 		    }
 10660 		}
       
 10661 	    }
       
 10662 	    goto ret;
       
 10663 	}
       
 10664 
       
 10665 	nInstBytes = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
       
 10666 	cp += nInstBytes;
       
 10667 	n = __byteArraySize(aString) - nInstBytes;
       
 10668 
       
 10669 	if (__isBytes(aString)) {
       
 10670 	    goto commonOutChars;
       
 10671 	}
       
 10672 
       
 10673 	/* Unicode */
       
 10674 	if (__isWords(aString)) {
       
 10675 	    n = n / 2;
       
 10676 	    if (i2 < n) {
       
 10677 		WIDECHAR *w_cp = (WIDECHAR *)cp;
       
 10678 		w_cp += i1;
       
 10679 		if (! TextOutW(hDC, pX, pY, w_cp, l)) {
       
 10680 		    PRINTF(("WinWorkstation [warning]: TextOutW failed. [%d]\n", __LINE__));
       
 10681 		    PRINTF(("WinWorkstation [warning]: lastError=%d x:%d y:%d len:%d\n", GetLastError(), pX, pY, l));
 10656 		}
 10682 		}
 10657 		goto ret;
 10683 		goto ret;
 10658 	    }
       
 10659 
       
 10660 	    nInstBytes = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
       
 10661 	    cp += nInstBytes;
       
 10662 	    n = __byteArraySize(aString) - nInstBytes;
       
 10663 
       
 10664 	    if (__isBytes(aString)) {
       
 10665 		goto commonOutChars;
       
 10666 	    }
       
 10667 
       
 10668 	    /* Unicode */
       
 10669 	    if (__isWords(aString)) {
       
 10670 		n = n / 2;
       
 10671 		if (i2 < n) {
       
 10672 		    WIDECHAR *w_cp = (WIDECHAR *)cp;
       
 10673 		    w_cp += i1;
       
 10674 		    if (! TextOutW(hDC, pX, pY, w_cp, l)) {
       
 10675 			PRINTF(("WinWorkstation [warning]: TextOutW failed. [%d]\n", __LINE__));
       
 10676 			PRINTF(("WinWorkstation [warning]: lastError=%d x:%d y:%d len:%d\n", GetLastError(), pX, pY, l));
       
 10677 		    }
       
 10678 		    goto ret;
       
 10679 		}
       
 10680 	    }
 10684 	    }
 10681 	}
 10685 	}
 10682 ret:;
 10686 ret:;
 10683 #if 0
 10687 #if 0
 10684 	GcDataReleasePen(hDC, gcData);
 10688 	GcDataReleasePen(hDC, gcData);
 19333 ! !
 19337 ! !
 19334 
 19338 
 19335 !WinWorkstation class methodsFor:'documentation'!
 19339 !WinWorkstation class methodsFor:'documentation'!
 19336 
 19340 
 19337 version
 19341 version
 19338     ^ '$Header: /cvs/stx/stx/libview/WinWorkstation.st,v 1.482 2014-04-03 21:21:38 cg Exp $'
 19342     ^ '$Header: /cvs/stx/stx/libview/WinWorkstation.st,v 1.483 2014-05-28 18:06:01 cg Exp $'
 19339 !
 19343 !
 19340 
 19344 
 19341 version_CVS
 19345 version_CVS
 19342     ^ '$Header: /cvs/stx/stx/libview/WinWorkstation.st,v 1.482 2014-04-03 21:21:38 cg Exp $'
 19346     ^ '$Header: /cvs/stx/stx/libview/WinWorkstation.st,v 1.483 2014-05-28 18:06:01 cg Exp $'
 19343 ! !
 19347 ! !
 19344 
 19348 
 19345 
 19349 
 19346 WinWorkstation initialize!
 19350 WinWorkstation initialize!