Exemplo n.º 1
0
void
docWrapModifyCB( Widget w, XtPointer client_data, 
 		XtPointer call_data)
{
	char *cb, *ptr;
	char buf[2];
	int length;
	Boolean res;
	Dimension doc_edge, char_width;
	Position x, y;
	XmRenderTable rtbl;
	XmString s;
	XmTextPosition pos;
	XmTextVerifyCallbackStruct *acs;
	
	acs = (XmTextVerifyCallbackStruct *) call_data;
	cb = "docModifyCB";
	
	if (XmCR_MODIFYING_TEXT_VALUE != acs->reason)
		return;
		
	length = acs->text->length;
	ptr = acs->text->ptr;
	
	if (0 == length)
		return;
	
	pos = acs->startPos;
	res = XmTextPosToXY(w, pos, &x, &y);
	
	if (False == res) {
		fprintf(stderr, 
		    "Could not grab character position coordinates, ignoring.\n");
		return;
	}
	
	XtVaGetValues(w, 
	    XmNwidth, &doc_edge, 
	    XmNrenderTable, &rtbl,
	    NULL);
	
	if (1 == length) {
		buf[0] = *(acs->text->ptr); buf[1] = '\0';
		s = XmStringCreateLocalized(buf);
		char_width = XmStringWidth(rtbl, s);
		if  (doc_edge <= x + 2*char_width) {
			XtRealloc(acs->text->ptr, ++length);
			(acs->text->ptr)[1] = (acs->text->ptr)[0];
			(acs->text->ptr)[0] = '\n';
			acs->text->length = length;
		}
		XmStringFree(s);
		return;
	}
	
	batch_wrap(w, cb, acs->text->ptr, &length, pos);
	acs->text->length = length;
}
Exemplo n.º 2
0
bool wxTextCtrl::PositionToXY(long pos, long *x, long *y) const
{
    Position xx, yy;
    XmTextPosToXY((Widget) m_mainWidget, pos, &xx, &yy);
    if ( x )
        *x = xx;
    if ( y )
        *y = yy;

    return true;
}
Exemplo n.º 3
0
void RXmTextPosToXY(message_t message)
{
  Widget w;
  XmTextPosition pos;
  Boolean result;
  Position x,y;
  message_t reply=prepare_reply(message);

  toolkit_read_value(message,&w,XtRWidget);
  toolkit_read_value(message,&pos,XtRInt);
  result=XmTextPosToXY(w,pos,&x,&y);

  message_write_boolean(reply,result,boolean_tag);
  message_write_int(reply,x,int_tag);
  message_write_int(reply,y,int_tag);
  message_send(client_socket,reply);
  message_free(reply);
  must_confirm=False;
}