Shade online フォーラム
ログイン
ユーザ名:

パスワード:

IDとパスワードを記憶

パスワード紛失
スレッド表示 | 古いものから 投稿するには登録が必要です 前のスレッド | 次のスレッド | 下へ
投稿者 スレッド
投稿数: 308
投稿日時: 2009-06-25 11:18
Re: Macでのテキスト編集コントロールに付いて
書き込みをしてしまうと、何故か思いつくことが有ります。
今迄、scrollPoint というメンバーがあったので、それで
少し移動できないかとソースに追加して見ましたが、
全然反応しなかったので、諦めていました。
そこで、作ったwindow_interface に実際のフレームサイズより下方向に少し大きめに
canvas_size を set_canvas_size() で設定したらどうかと思い付き
やってみたところ見事にスクロールしました。
それで、丁度いい縦の移動と、フォントの大きさを得る事が出来ました。
ということで、この問題は、一応解決。
残るは、boost のリンク問題です。
これが解決するとMakeHumanをMacに移植できます。
投稿数: 308
投稿日時: 2009-06-23 12:27
Re: Macでのテキスト編集コントロールに付いて
プラグインのMac移植で難儀し続けてます。

全然反応が無いので、自分で、簡単なウインドウを開いて、
文字を描画するプログラムをxcodeのInterface Builder を
使って作り、その結果のソース解析をすることで
フィードバックしようと思ってやってみました。
その結果、どうもこの大きさの場合、テキストは、
mini ?のタイプを選ばなければ、いけないようです。
で、結果単に表示するアプリは、できました。
しかし、そのウインドウの情報は、nibファイルという
定義ファイルに書き込まれ、一切ソースには、反映しませんでした。
nibファイルの中身を見ても皆目検討付かず。
仕方ないので
Mac版は、もう少し小さなフォントで見づらいまま移植することに
しました。
投稿数: 308
投稿日時: 2009-03-22 13:37
Re: Macでのテキスト編集コントロールに付いて
前述のプラグインのコンストラクタの最後に


	NSFont * ofont = [(NSTextField *)object font] ;

	[ object setFont:[NSFont fontWithName: [ofont fontName] size: 8 ] ];


のような、サイズだけ変更する処理を加えたこところ、何とかサイズ変更が出来ました。
しかし、行の縦位置が添付ファイルのように下にずれてしまってます。
何とかする方法は、ないでしょうか?
objective_c++

cocoa
を新規にマスターする気にはならないので。
ついでに、上のソースのもっとスマートな記述があれば、教えてください。

投稿数: 308
投稿日時: 2009-03-17 16:55
Re: Macでのテキスト編集コントロールに付いて
全て、うまくいきました。ビルドだけでなく、MAC上で、動作の確認も出来ました。有難うございました。
ただ、フォントの設定等何の設定もしないと、かなり大きな文字になると同時に行の位置もかなりずれてしまいました。
よろしければ、Shadeのコントロールやダイアログでの数値表示での最小の文字サイズ
(縦ピクセルサイズ14程度)及び行の位置等の設定方法をお教え下さい。
投稿数: 448
管理人
投稿日時: 2009-03-17 15:43
Re: Macでのテキスト編集コントロールに付いて
引用:

この部分は、ターゲット内の生成プラグインタブを選択して
コンテキストメニューの「追加」->「既存のフレームワーク」を選択して現れるFinder風のウインドウ内で AppKit.framework を選択して、追加ボタンを押しましたが、拒絶されます。(何の反応もしない)
何か仕方に問題あるのでしょうか?


すでにプロジェクト内にAppKit.framworkがある場合は、
プロジェクトに対するフレームワークの追加ボタンを押しても反応しません。
プロジェクト内のAppKit.frameworkをターゲットの
「バイナリをライブラリにリンク」にドラッグして入れてください。
投稿数: 448
管理人
投稿日時: 2009-03-17 15:12
Re: Macでのテキスト編集コントロールに付いて
引用:

この設定は、この定義を行っているファイルにだけ、設定すればいいんですか?
私は、上記のソース部分のみ edit_text_class.h というファイルにして、そのファイルにのみ設定しました。
インクルードしている側のファイルは、そのままです。


すいません、サンプルのsimplewindow.cppで確認していてヘッダーに記述した場合のことを考慮してませんでした。
sourcecode.cpp.objcppは拡張子がcppのファイルに対するファイルタイプの変更です。

edit_text_class.h

#include "windowinterface.h"

struct edit_text_class : window_interface {
	edit_text_class ( window_interface &w, sx::rectangle_class rect );
	~edit_text_class() {}
	virtual int get_shade_version () const { return SHADE_BUILD_NUMBER; }
	virtual bool is_resizable (void *) { return false; }
	void set_text( const char * s );
	const char * get_text();
	private :
	void * object ;
	std::string str ;
};


edit_text_class.mm (Mac専用のソースの場合)
拡張子をmmにするとObjective-C++で扱われる、拡張子がcppの場合は、ファイルタイプをsourcecode.cpp.objcppに変更する


#include <Cocoa/Cocoa.h>
#include "edit_text_class.h"

edit_text_class::edit_text_class ( window_interface &w, sx::rectangle_class rect ) 
: window_interface(w, sx::no_title_bar | sx::single_line_text | sx::text_window ) {
	set_frame_rectangle ( rect ) ;
	object = get_text_object() ;
}

void edit_text_class::set_text( const char * s ) {
	if ([object isKindOfClass:[NSTextField class]]) { ///< sx::single_line_text の場合.
		[(NSTextField *)object setStringValue:[NSString stringWithUTF8String:s]];
	}
	else if ([object isKindOfClass:[NSText class]]) { ///< sx::text_window だけの場合.
		[(NSText *)object setString:[NSString stringWithUTF8String:s]];
	}
}

const char * edit_text_class::get_text() {
	if ([object isKindOfClass:[NSTextField class]]) { ///< sx::single_line_text の場合.
		str = [[(NSTextField *)object stringValue] UTF8String];
	}
	else if ([object isKindOfClass:[NSText class]]) { ///< sx::text_window だけの場合.
		str = [[(NSText *)object string] UTF8String];
	}
	return str.c_str() ;
}
投稿数: 308
投稿日時: 2009-03-17 13:54
Re: Macでのテキスト編集コントロールに付いて
期待して、ビルド実行しましたが、3000個以上のエラーで落ちました。

引用:

画像投稿機さんは書きました:
Shade 7以降のMac OS X版でwindow_interface::get_text_objectは
window_interfaceのコンストラクタでsx::single_line_textが指定されている場合は、「NSTextField *」
指定されていない場合は、「NSText *」のオブジェクトが返されます。

set_text, get_textは以下のようになります。

ビルド時の注意:
Cocoaオブジェクトが混ざるため、Objective-C++でビルドする必要があります。
「NSView was not declared in this scope」などCocoaオブジェクトが未定義とエラーが出る場合は、
Xcodeでビルドするファイルのポップアップメニューから「情報をみる」で情報を表示して、
ファイルタイプを「sourcecode.cpp.objcpp」に変更してください。

この設定は、この定義を行っているファイルにだけ、設定すればいいんですか?
私は、上記のソース部分のみ edit_text_class.h というファイルにして、そのファイルにのみ設定しました。
インクルードしている側のファイルは、そのままです。
引用:

ビルド後に「"_objec_msg_fixup", referenced from:」などのリンクエラーが出る場合は、
「AppKit.framework」をターゲットに追加してください。

この部分は、ターゲット内の生成プラグインタブを選択して
コンテキストメニューの「追加」->「既存のフレームワーク」を選択して現れるFinder風のウインドウ内で AppKit.framework を選択して、追加ボタンを押しましたが、拒絶されます。(何の反応もしない)
何か仕方に問題あるのでしょうか?

この状態で、ビルドすると、コンパイル時に3000個以上のエラーで終了します。
内容は、
NSMappTable.h 等の NS.....h の中で
valiable or field ...... decleared void
initializer expression list treated ....
expected unqualified-id before ... token
等のエラーメッセージが、かなりのソース行に対して出ます。
プロジェクトの各種設定に足りないのがあるのでしょうか?
投稿数: 448
管理人
投稿日時: 2009-03-16 21:04
Re: Macでのテキスト編集コントロールに付いて
引用:
処で、ヘッダは、大丈夫でしょうか?
cocoa になった以上、carbon/carbon.h では、
まずいような気が・・・。


そうですね、COCOAなのでCocoa/Cocoa.hに変更する必要があります。
投稿数: 308
投稿日時: 2009-03-16 19:21
Re: Macでのテキスト編集コントロールに付いて
回答有難うございます。
早速使わせて貰います。
というか、SDKに書かれていた内容ではないということですね。
説明文が、妙に矛盾していたのは、そういう理由でしたか。
処で、ヘッダは、大丈夫でしょうか?
cocoa になった以上、carbon/carbon.h では、
まずいような気が・・・。
投稿数: 448
管理人
投稿日時: 2009-03-16 18:01
Re: Macでのテキスト編集コントロールに付いて
Shade 7以降のMac OS X版でwindow_interface::get_text_objectは
window_interfaceのコンストラクタでsx::single_line_textが指定されている場合は、「NSTextField *」
指定されていない場合は、「NSText *」のオブジェクトが返されます。

set_text, get_textは以下のようになります。

struct edit_text_class : window_interface {
	edit_text_class ( window_interface &w, sx::rectangle_class rect ) \
		: window_interface(w, sx::no_title_bar | sx::single_line_text | sx::text_window ) {
		set_frame_rectangle ( rect ) ;
		object = (NSView *)get_text_object() ;
	}
	~edit_text_class() {}
	virtual int get_shade_version () const { return SHADE_BUILD_NUMBER; }
	virtual bool is_resizable (void *) { return false; }

	void set_text( const char * s ) {
		if ([object isKindOfClass:[NSTextField class]]) { ///< sx::single_line_text の場合.
			[(NSTextField *)object setStringValue:[NSString stringWithUTF8String:s]];
		}
		else if ([object isKindOfClass:[NSText class]]) { ///< sx::text_window だけの場合.
			[(NSText *)object setString:[NSString stringWithUTF8String:s]];
		}
	}
	const char * get_text() {
		if ([object isKindOfClass:[NSTextField class]]) { ///< sx::single_line_text の場合.
			str = [(NSTextField *)object stringValue];
		}
		else if ([object isKindOfClass:[NSText class]]) { ///< sx::text_window だけの場合.
			str = [(NSText *)object string];
		}
		return str.c_str() ;
	}
	private :
	NSView * object ;
	std::string str ;
};


ビルド時の注意:
Cocoaオブジェクトが混ざるため、Objective-C++でビルドする必要があります。
「NSView was not declared in this scope」などCocoaオブジェクトが未定義とエラーが出る場合は、
Xcodeでビルドするファイルのポップアップメニューから「情報をみる」で情報を表示して、
ファイルタイプを「sourcecode.cpp.objcpp」に変更してください。

ビルド後に「"_objec_msg_fixup", referenced from:」などのリンクエラーが出る場合は、
「AppKit.framework」をターゲットに追加してください。
投稿数: 448
管理人
投稿日時: 2009-03-16 17:14
Re: Macでのテキスト編集コントロールに付いて
現在調査中です。
しばらくお待ちください。
投稿数: 308
投稿日時: 2009-03-16 12:25
Re: Macでのテキスト編集コントロールに付いて
一応エラーなくコンパイルできるコードが出来ました。
しかし、実行時にShadeが落ちます。最初の set_text() のところで落ちているようです。
プラグインのPalette SXULスキーマ定義に editable-text の中途半端な実装があるうえ、Windows と Mac 両方での実装をマスターする気もないので、どなたか助言があれば、よろしく願います。


#include <Carbon/Carbon.h>
#include "windowinterface.h"

struct edit_text_class : window_interface {
	edit_text_class ( window_interface &w, sx::rectangle_class rect ) \
		: window_interface(w, sx::no_title_bar | sx::single_line_text | sx::text_window ) {
		set_frame_rectangle ( rect ) ;
		object = (TXNObject *)get_text_object() ;
	}
	~edit_text_class() {}
	virtual int get_shade_version () const { return SHADE_BUILD_NUMBER; }
	virtual bool is_resizable (void *) { return false; }

	void set_text( const char * s ) {
		TXNSelectAll( *object ) ;
		TXNOffset st, ed ;
		TXNGetSelection( *object, &st, &ed ) ;
		TXNSetData( *object, kTXNTextData , s, get_size(s), st, ed ) ;
	}
	const char * get_text() {
		Handle h ;
		TXNDataType type;
		TXNOffset st, ed ;
		TXNGetIndexedRunInfoFromRange(*object, 0, 0, TXNDataSize(*object), &st, &ed, &type, 0, NULL);
		TXNGetData( *object, st, ed, &h ) ;
		str = (const char *)*h ;
		return str.c_str() ;
	}
	private :
	ByteCount get_size( const char * s ) {
		ByteCount ans = 0 ;
		while( *s ) {
			++ ans ;
			++ s ;
		}
		return ans ;
	}
	TXNObject * object ;
	std::string str ;
};
投稿数: 308
投稿日時: 2009-03-13 16:39
Macでのテキスト編集コントロールに付いて
今現在、windowinterface 内の get_text_object()
を使って、簡単なテキスト編集コントロールを作ろうとしてます。
windows ベースでは、webから見つけ出した、資料等で
適当に作った結果、何とか動くものはできました。
しかし、Macの方は、分かり易いのはなくて困ってます。
当分、
単にテキストウインドウを開いて、
そこにテキストを描画する
set_text( const char * s )
その中のテキストをそっくり取得する
const char * get_text()
テキストのバック及び、典型的ディフォルトのテキスト設定をする簡単なエントリー
set_...()
位があればいいのですが、
インクルードファイルも含め、分かりません。
Macに詳しい方よろしければお教えください。
xcodeをインストールして、機種依存でないプラグインが出来る程度には、環境は作ってあります。
設定は、MultiLingualTextEngene にしてます。

MacTextEditor.h
をインクルードすると無いと言われてこれ以上進みません。


スレッド表示 | 古いものから 投稿するには登録が必要です 前のスレッド | 次のスレッド | トップ

最近の投稿

フォーラム スレッド 返信 閲覧 最終投稿
Free Talk DNAの2重らせんの水素結合部位の作成 0 11752 2016-08-01 21:37 Benthos
Free Talk パート内の名前を一括返還 2 14260 2016-03-07 12:21 画像投稿機
Dev Forum イームズシェルチェアーの作成 2 14176 2015-11-25 14:44 CR7
Free Talk MOVファイルについて 17 35276 2014-12-29 17:14 momokuma
Dev Forum 2種類の液体アニメーションを作る方法 0 14255 2014-11-13 10:42 mejapan
Free Talk 面取りについて 0 13371 2014-11-08 15:18 MoonChild
Free Talk 丸太を結ぶ縄の作成について 1 19575 2014-09-18 22:33 kenslab
Free Talk パーティクルフィジックスのメタパーティクルについて 0 13832 2014-09-03 20:40 penta
Free Talk データの保存に関して 2 13659 2014-08-18 01:24 sierra
Free Talk Shade 3D ver14での、ポリゴンメッシュへの変換以上終了 1 14098 2014-04-23 12:04 MASA_