def _getPointFromOffset(self, offset): # Returns physical coordinates. rects=self._storyFieldsAndRects[1] if not rects or offset>=len(rects): raise LookupError x,y=rects[offset][:2] x,y=windowUtils.logicalToPhysicalPoint(self.obj.windowHandle,x,y) return textInfos.Point(x, y)
def _getPointFromOffset(self,offset): consoleScreenBufferInfo=self.consoleScreenBufferInfo characterX,characterY=self._consoleCoordFromOffset(offset) screenLeft,screenTop,screenWidth,screenHeight=self.obj.location lineLength=(consoleScreenBufferInfo.srWindow.Right+1)-consoleScreenBufferInfo.srWindow.Left numLines=(consoleScreenBufferInfo.srWindow.Bottom+1)-consoleScreenBufferInfo.srWindow.Top characterWidth=screenWidth/lineLength characterHeight=screenHeight/numLines relativeX=(characterX-consoleScreenBufferInfo.srWindow.Left)*characterWidth relativeY=(characterY-consoleScreenBufferInfo.srWindow.Top)*characterHeight x=relativeX+screenLeft y=relativeY+screenTop return textInfos.Point(x,y)
def moveTo(self,x,y,new=False,unit=textInfos.UNIT_LINE): obj=api.getDesktopObject().objectFromPoint(x,y) prevObj=None while obj and obj.beTransparentToMouse: prevObj=obj obj=obj.parent if not obj or (obj.presentationType!=obj.presType_content and obj.role!=controlTypes.ROLE_PARAGRAPH): obj=prevObj if not obj: return hasNewObj=False if obj!=self._obj: self._obj=obj hasNewObj=True if self.updateReview: api.setNavigatorObject(obj) else: obj=self._obj pos=None if obj.treeInterceptor: try: pos=obj.treeInterceptor.makeTextInfo(obj) except LookupError: pos=None if pos: obj=obj.treeInterceptor.rootNVDAObject if hasNewObj and self._obj and obj.treeInterceptor is self._obj.treeInterceptor: hasNewObj=False if not pos: try: pos=obj.makeTextInfo(textInfos.Point(x,y)) except (NotImplementedError,LookupError): pass if pos: pos.expand(unit) if pos and self.updateReview: api.setReviewPosition(pos) speechCanceled=False if hasNewObj: speech.cancelSpeech() speechCanceled=True speech.speakObject(obj) if pos and (new or not self._pos or pos.__class__!=self._pos.__class__ or pos.compareEndPoints(self._pos,"startToStart")!=0 or pos.compareEndPoints(self._pos,"endToEnd")!=0): self._pos=pos if not speechCanceled: speech.cancelSpeech() speech.speakTextInfo(pos,reason=controlTypes.REASON_CARET)
def _getPointFromOffset(self,offset): formatFieldStart, formatFieldEnd = self._getUnitOffsets(self.UNIT_FORMATFIELD, offset) # The format field starts at the first character. for field in reversed(self._getFieldsInRange(formatFieldStart, formatFieldStart+1)): if not (isinstance(field, textInfos.FieldCommand) and field.command == "formatChange"): # This is no format field. continue attrs = field.field indexInParent = attrs.get("_indexInParent") if indexInParent is None: continue try: obj = self._getNVDAObjectFromOffset(offset).getChild(indexInParent) except IndexError: obj = None if not obj: continue if not obj.location: # Older versions of Adobe Reader have per word objects, but they don't expose a location break return textInfos.Point(*obj.location.center) return super(AdobeAcrobat_TextInfo, self)._getPointFromOffset(offset)
def _get_pointAtStart(self): try: return textInfos.Point( *self._getBoundingRectFromOffset(self._startOffset).topLeft) except NotImplementedError: return self._getPointFromOffset(self._startOffset)
def _getPointFromOffset(self, offset): # Purposely do not catch LookupError or NotImplementedError raised by _getBoundingRectFromOffset. rect = self._getBoundingRectFromOffset(offset) # For backwards compatibility, keep using textInfos.Point instead of locationHelper.Point return textInfos.Point(*rect.center)
def _getPointFromOffset(self, offset): text, rects = self._textAndRects if not text or not rects or offset >= len(rects): raise LookupError x, y = rects[offset][:2] return textInfos.Point(x, y)