Looking for people to test text-mode version of the game "Thaumistry"

2018-01-18 Thread AudioGames . net ForumDevelopers room : realnc via Audiogames-reflector


  


Looking for people to test text-mode version of the game "Thaumistry"

(I hope this is the right forum section.)Hello. Back in September, we released the text adventure game "Thaumistry: In Charm's Way." Being a text-based game, we tried to make it accessible. However, there were problems with the JAWS screen reader, due to the development framework used by the game (the Qt toolkit) not cooperating well with JAWS.In order to resolve the issues, we decided to create a pure text-mode version of the game that runs inside a console window. This should effectively make the game fully accessible by every screen reader in existence. That's the theory, at least. We are looking for a few volunteers to play this version of the game and provide feedback.The game is a parser-based text adventure, aka "Interactive Fiction", written by Bob Bates, in the same vein as the Infocom games of the late 1980's.This version of the game requires Microsoft Windows. If anyone is interested, please send an email to rea...@gmail.com

URL: http://forum.audiogames.net/viewtopic.php?pid=348145#p348145





___
Audiogames-reflector mailing list
Audiogames-reflector@sabahattin-gucukoglu.com
https://sabahattin-gucukoglu.com/cgi-bin/mailman/listinfo/audiogames-reflector

Looking for people to test text-mode version of the game "Thaumistry"

2018-01-17 Thread AudioGames . net ForumDevelopers room : realnc via Audiogames-reflector


  


Looking for people to test text-mode version of the game "Thaumistry"

(I hope this is the right forum section.)Hello. Back in September, we released the text adventure game "Thaumistry: In Charm's Way." Being a text-based game, we tried to make it accessible. However, there were problems with the JAWS screen reader, due to the development framework used by the game (the Qt toolkit) not cooperating well with JAWS.In order to resolve the issues, we decided to create a pure text-mode version of the game that runs inside a console window. This should effectively make the game fully accessible by every screen reader in existence. That's the theory, at least. We are looking for a few volunteers to play this version of the game and provide feedback.The game is a parser-based text adventure, aka "Interactive Fiction", written by Bob Bates, in the same vein as the Infocom games of the late 1980's.This version of the game requires Microsoft Windows. If anyone is interested, please send an email to rea...@gmail.com.

URL: http://forum.audiogames.net/viewtopic.php?pid=348145#p348145





___
Audiogames-reflector mailing list
Audiogames-reflector@sabahattin-gucukoglu.com
https://sabahattin-gucukoglu.com/cgi-bin/mailman/listinfo/audiogames-reflector

Re: JAWS unable to read text through IAccessible2 with Qt

2017-11-05 Thread AudioGames . net ForumDevelopers room : realnc via Audiogames-reflector


  


Re: JAWS unable to read text through IAccessible2 with Qt

pitermach wrote:So the other thing you could do is use a library like TOLK to directly speak text with screen readers.I didn't even know this existed. Thanks!I'll do some testing with this before trying anything else and see whether this gives good enough results.

URL: http://forum.audiogames.net/viewtopic.php?pid=336857#p336857





___
Audiogames-reflector mailing list
Audiogames-reflector@sabahattin-gucukoglu.com
https://sabahattin-gucukoglu.com/cgi-bin/mailman/listinfo/audiogames-reflector

Re: JAWS unable to read text through IAccessible2 with Qt

2017-11-03 Thread AudioGames . net ForumDevelopers room : realnc via Audiogames-reflector


  


Re: JAWS unable to read text through IAccessible2 with Qt

It would be nice if this would not turn into a JAWS vs NVDA battle.

URL: http://forum.audiogames.net/viewtopic.php?pid=336515#p336515





___
Audiogames-reflector mailing list
Audiogames-reflector@sabahattin-gucukoglu.com
https://sabahattin-gucukoglu.com/cgi-bin/mailman/listinfo/audiogames-reflector

JAWS unable to read text through IAccessible2 with Qt

2017-11-02 Thread AudioGames . net ForumDevelopers room : realnc via Audiogames-reflector


  


JAWS unable to read text through IAccessible2 with Qt

Hello.I am trying to make an Interactive Fiction interpreter (you could call it an "engine" if you will) accessible with JAWS. The application uses Qt 5. For the curious, the application in question is QTads (http://qtads.sf.net).Accessibility in Qt is provided though the IAccessible2 interface, wrapped in Qt-specific classes, and I have implemented the required callbacks in a way that allows me to see what the screen reader is calling. When running NVDA, it works fine. NVDA queries the role of the output window, for which I specify QAccessible::EditableText, and it then requests a QAccessible::TextInterface, for which I return a QAccessibleTextInterface object (which translates into an IAccessibleText object). NVDA will then call characterCount() on the returned object (this is the wrapper for nCharacters() in IAccessible2) and then the various text extraction methods, like text(), textAtOffset(), offsetAtPoint() (when moving the mouse over the text), etc. It then speaks the text I return in those methods.JAWS, however, doesn't want to play along. After it queries the object role, it performs a few calls to characterCount(), selection() and attributes(), but calls to text extraction methods never happen. QAccessibleTextInterface::text(), textAtOffset(), etc, are never called and thus the text is never spoken by JAWS. When the window is activated, JAWS speaks this out:"Alt tab, game text, edit read only, insert f1 help, type and text." (Not sure about the "type and text"; it's kind of hard to tell what it says exactly.)("game text" is the text I return when the QAccessible::Name text is requested though the QAccessibleInterface::text() function.)I do not know where to go from here. Is this a Qt issue? Something I'm doing wrong? I can't tell.My implementation looks like this:I have a QWidget subclass, called DispWidget, that paints the text on screen, driven by the game engine's text layout engine. To make DispWidget accessible, I implement an AccessibleDispWidget class that inherits from QAccessibleWidget, QAccessibleTextInterface and QAccessibleEditableTextInterface:class AccessibleDispWidget: public QAccessibleWidget,
public QAccessibleTextInterface,
public QAccessibleEditableTextInterface
{
public:
explicit AccessibleDispWidget(QWidget* w)
: QAccessibleWidget(w, QAccessible::EditableText)
{ /* ... */ }

// ...
// Overrides of the virtuals here -- see below.
// ...
}I then implement or override the appropriate virtuals:// =
// QAccessibleInterface
// =
QString
text(QAccessible::Text txt) const override
{
switch (txt) {
case QAccessible::Name:
return "Game text.";
case QAccessible::Description:
return "";
case QAccessible::Value:
return "";
case QAccessible::Help:
return "Help.";
case QAccessible::Accelerator:
return "";
default:
return QAccessibleWidget::text(txt);
}
}

void*
interface_cast(QAccessible::InterfaceType t) override
{
if (t == QAccessible::TextInterface) {
return static_cast(this);
}
if (t == QAccessible::EditableTextInterface) {
return static_cast(this);
}
return QAccessibleWidget::interface_cast(t);
}

QAccessible::State
state() const override
{
auto s = QAccessibleWidget::state();
s.multiLine = true;
s.readOnly = true;
s.selectableText = false;
s.editable = false;
return s;
}

// =
// QAccessibleTextInterface
// =
// never called
void
addSelection(int startOffset, int endOffset) override;

QString
attributes(int offset, int* startOffset, int* endOffset) const override
{
// Simple implementation for now as to not complicate things;
// all text uses the same attributes.
*startOffset = 0;
*endOffset = characterCount();
return QLatin1String("font-family:\"Open Sans\";font-size:14pt;font-style:normal;font-weight:normal;language:en-US;");
}

int
characterCount() const override
{ return length_of_text; }

// never called
QRect
characterRect(int offset) const override;

// never called
int
cursorPosition() const override;

// never called
int
offsetAtPoint(const QPoint& point) const override;

// never called
void
removeSelection(int selectionIndex) override;

// never called
void
scrollToSubstring(int startIndex, int endIndex) override;

void
selection(int selectionIndex, int* startOffset, int* endOffset) const override
{ *startOffset = *endOffset = 0; }

// never called
int
selectionCount() const override;

// never called
void
setCursorPosition(int position) override;

// never called
void
setSelection(int 

JAWS unable to read text through IAccessible2 with Qt

2017-11-02 Thread AudioGames . net ForumDevelopers room : realnc via Audiogames-reflector


  


JAWS unable to read text through IAccessible2 with Qt

Hello.I am trying to make an Interactive Fiction interpreter (you could call it an "engine" if you will) accessible with JAWS. The application uses Qt 5. For the curious, the application in question is QTads (http://qtads.sf.net).Accessibility in Qt is provided though the IAccessible2 interface, wrapped in Qt-specific classes, and I have implemented the required callbacks in a way that allows me to see what the screen reader is calling. When running NVDA, it works fine. NVDA queries the role of the output window, for which I specify QAccessible::EditableText, and it then requests a QAccessible::TextInterface, for which I return a QAccessibleTextInterface object (which translates into an IAccessibleText object). NVDA will then call characterCount() on the returned object (this is the wrapper for nCharacters() in IAccessible2) and then the various text extraction methods, like text(), textAtOffset(), offsetAtPoint() (when moving the mouse over the text), etc. It then speaks the text I return in those methods.JAWS, however, doesn't want to play along. After it queries the object role, it performs a few calls to characterCount(), selection() and attributes(), but calls to text extraction methods never happen. QAccessibleTextInterface::text(), textAtOffset(), etc, are never called and thus the text is never spoken by JAWS. When the window is activated, JAWS speaks this out:"Alt tab, game text, edit read only, insert f1 help, type and text." (Not sure about the "type and text"; it's kind of hard to tell what it says exactly.)("game text" is the text I return when the QAccessible::Name text is requested though the QAccessibleInterface::text() function.)I do not know where to go from here. Is this a Qt issue? Something I'm doing wrong? I can't tell.My implementation looks like this:I have a QWidget subclass, called DispWidget, that paints the text on screen, driven by the game engine's text layout engine. To make DispWidget accessible, I implement an AccessibleDispWidget class that inherits from QAccessibleWidget, QAccessibleTextInterface and QAccessibleEditableTextInterface:class AccessibleDispWidget: public QAccessibleWidget,
public QAccessibleTextInterface,
public QAccessibleEditableTextInterface
{
explicit AccessibleDispWidget(class QWidget* w)
: QAccessibleWidget(w, QAccessible::EditableText)
{ /* ... */ }

// ...
// Overrides of the virtuals here -- see below.
// ...
}I then implement or override the appropriate virtuals:// =
// QAccessibleInterface
// =
QString
text(QAccessible::Text txt) const override
{
switch (txt) {
case QAccessible::Name:
return "Game text.";
case QAccessible::Description:
return "";
case QAccessible::Value:
return "";
case QAccessible::Help:
return "Help.";
case QAccessible::Accelerator:
return "";
default:
return QAccessibleWidget::text(txt);
}
}

void*
interface_cast(QAccessible::InterfaceType t) override
{
if (t == QAccessible::TextInterface) {
return static_cast(this);
}
if (t == QAccessible::EditableTextInterface) {
return static_cast(this);
}
return QAccessibleWidget::interface_cast(t);
}

QAccessible::State
state() const override
{
auto s = QAccessibleWidget::state();
s.multiLine = true;
s.readOnly = true;
s.selectableText = false;
s.editable = false;
return s;
}

// =
// QAccessibleTextInterface
// =
// never called
void
addSelection(int startOffset, int endOffset) override;

QString
attributes(int offset, int* startOffset, int* endOffset) const override
{
// Simple implementation for now as to not complicate things;
// all text uses the same attributes.
*startOffset = 0;
*endOffset = characterCount();
return QLatin1String("font-family:\"Open Sans\";font-size:14pt;font-style:normal;font-weight:normal;language:en-US;");
}

int
characterCount() const override
{ return length_of_text; }

// never called
QRect
characterRect(int offset) const override;

// never called
int
cursorPosition() const override;

// never called
int
offsetAtPoint(const QPoint& point) const override;

// never called
void
removeSelection(int selectionIndex) override;

// never called
void
scrollToSubstring(int startIndex, int endIndex) override;

void
selection(int selectionIndex, int* startOffset, int* endOffset) const override
{ *startOffset = *endOffset = 0; }

// never called
int
selectionCount() const override;

// never called
void
setCursorPosition(int position) override;

// never called
void
setSelection(int