mirror of
https://github.com/godotengine/godot.git
synced 2024-11-10 14:12:51 +00:00
fixes to new window management API
-needs testing on Linux -needs testing on Windows -NEED SOMEONE TO IMPLEMENT IT ON OSX!! PLEASE HELP!
This commit is contained in:
parent
e9f94ce8d2
commit
23e13ce3c2
@ -176,17 +176,17 @@ bool _OS::is_video_mode_fullscreen(int p_screen) const {
|
||||
|
||||
}
|
||||
|
||||
#ifdef NEW_WM_API
|
||||
|
||||
int _OS::get_screen_count() const {
|
||||
return OS::get_singleton()->get_screen_count();
|
||||
}
|
||||
|
||||
int _OS::get_screen() const {
|
||||
return OS::get_singleton()->get_screen();
|
||||
int _OS::get_current_screen() const {
|
||||
return OS::get_singleton()->get_current_screen();
|
||||
}
|
||||
|
||||
void _OS::set_screen(int p_screen) {
|
||||
OS::get_singleton()->set_screen(p_screen);
|
||||
void _OS::set_current_screen(int p_screen) {
|
||||
OS::get_singleton()->set_current_screen(p_screen);
|
||||
}
|
||||
|
||||
Point2 _OS::get_screen_position(int p_screen) const {
|
||||
@ -213,38 +213,38 @@ void _OS::set_window_size(const Size2& p_size) {
|
||||
OS::get_singleton()->set_window_size(p_size);
|
||||
}
|
||||
|
||||
void _OS::set_fullscreen(bool p_enabled) {
|
||||
OS::get_singleton()->set_fullscreen(p_enabled);
|
||||
void _OS::set_window_fullscreen(bool p_enabled) {
|
||||
OS::get_singleton()->set_window_fullscreen(p_enabled);
|
||||
}
|
||||
|
||||
bool _OS::is_fullscreen() const {
|
||||
return OS::get_singleton()->is_fullscreen();
|
||||
bool _OS::is_window_fullscreen() const {
|
||||
return OS::get_singleton()->is_window_fullscreen();
|
||||
}
|
||||
|
||||
void _OS::set_resizable(bool p_enabled) {
|
||||
OS::get_singleton()->set_resizable(p_enabled);
|
||||
void _OS::set_window_resizable(bool p_enabled) {
|
||||
OS::get_singleton()->set_window_resizable(p_enabled);
|
||||
}
|
||||
|
||||
bool _OS::is_resizable() const {
|
||||
return OS::get_singleton()->is_resizable();
|
||||
bool _OS::is_window_resizable() const {
|
||||
return OS::get_singleton()->is_window_resizable();
|
||||
}
|
||||
|
||||
void _OS::set_minimized(bool p_enabled) {
|
||||
OS::get_singleton()->set_minimized(p_enabled);
|
||||
void _OS::set_window_minimized(bool p_enabled) {
|
||||
OS::get_singleton()->set_window_minimized(p_enabled);
|
||||
}
|
||||
|
||||
bool _OS::is_minimized() const {
|
||||
return OS::get_singleton()->is_minimized();
|
||||
bool _OS::is_window_minimized() const {
|
||||
return OS::get_singleton()->is_window_minimized();
|
||||
}
|
||||
|
||||
void _OS::set_maximized(bool p_enabled) {
|
||||
OS::get_singleton()->set_maximized(p_enabled);
|
||||
void _OS::set_window_maximized(bool p_enabled) {
|
||||
OS::get_singleton()->set_window_maximized(p_enabled);
|
||||
}
|
||||
|
||||
bool _OS::is_maximized() const {
|
||||
return OS::get_singleton()->is_maximized();
|
||||
bool _OS::is_window_maximized() const {
|
||||
return OS::get_singleton()->is_window_maximized();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void _OS::set_use_file_access_save_and_swap(bool p_enable) {
|
||||
|
||||
@ -706,25 +706,25 @@ void _OS::_bind_methods() {
|
||||
ObjectTypeDB::bind_method(_MD("is_video_mode_resizable","screen"),&_OS::is_video_mode_resizable,DEFVAL(0));
|
||||
ObjectTypeDB::bind_method(_MD("get_fullscreen_mode_list","screen"),&_OS::get_fullscreen_mode_list,DEFVAL(0));
|
||||
|
||||
#ifdef NEW_WM_API
|
||||
|
||||
ObjectTypeDB::bind_method(_MD("get_screen_count"),&_OS::get_screen_count);
|
||||
ObjectTypeDB::bind_method(_MD("get_screen"),&_OS::get_screen);
|
||||
ObjectTypeDB::bind_method(_MD("set_screen"),&_OS::set_screen);
|
||||
ObjectTypeDB::bind_method(_MD("get_current_screen"),&_OS::get_current_screen);
|
||||
ObjectTypeDB::bind_method(_MD("set_current_screen"),&_OS::set_current_screen);
|
||||
ObjectTypeDB::bind_method(_MD("get_screen_position"),&_OS::get_screen_position,DEFVAL(0));
|
||||
ObjectTypeDB::bind_method(_MD("get_screen_size"),&_OS::get_screen_size,DEFVAL(0));
|
||||
ObjectTypeDB::bind_method(_MD("get_window_position"),&_OS::get_window_position);
|
||||
ObjectTypeDB::bind_method(_MD("set_window_position"),&_OS::set_window_position);
|
||||
ObjectTypeDB::bind_method(_MD("get_window_size"),&_OS::get_window_size);
|
||||
ObjectTypeDB::bind_method(_MD("set_window_size"),&_OS::set_window_size);
|
||||
ObjectTypeDB::bind_method(_MD("set_fullscreen","enabled"),&_OS::set_fullscreen);
|
||||
ObjectTypeDB::bind_method(_MD("is_fullscreen"),&_OS::is_fullscreen);
|
||||
ObjectTypeDB::bind_method(_MD("set_resizable","enabled"),&_OS::set_resizable);
|
||||
ObjectTypeDB::bind_method(_MD("is_resizable"),&_OS::is_resizable);
|
||||
ObjectTypeDB::bind_method(_MD("set_minimized", "enabled"),&_OS::set_minimized);
|
||||
ObjectTypeDB::bind_method(_MD("is_minimized"),&_OS::is_minimized);
|
||||
ObjectTypeDB::bind_method(_MD("set_maximized", "enabled"),&_OS::set_maximized);
|
||||
ObjectTypeDB::bind_method(_MD("is_maximized"),&_OS::is_maximized);
|
||||
#endif
|
||||
ObjectTypeDB::bind_method(_MD("set_window_fullscreen","enabled"),&_OS::set_window_fullscreen);
|
||||
ObjectTypeDB::bind_method(_MD("is_window_fullscreen"),&_OS::is_window_fullscreen);
|
||||
ObjectTypeDB::bind_method(_MD("set_window_resizable","enabled"),&_OS::set_window_resizable);
|
||||
ObjectTypeDB::bind_method(_MD("is_window_resizable"),&_OS::is_window_resizable);
|
||||
ObjectTypeDB::bind_method(_MD("set_window_minimized", "enabled"),&_OS::set_window_minimized);
|
||||
ObjectTypeDB::bind_method(_MD("is_window_minimized"),&_OS::is_window_minimized);
|
||||
ObjectTypeDB::bind_method(_MD("set_window_maximized", "enabled"),&_OS::set_window_maximized);
|
||||
ObjectTypeDB::bind_method(_MD("is_window_maximized"),&_OS::is_window_maximized);
|
||||
|
||||
|
||||
ObjectTypeDB::bind_method(_MD("set_iterations_per_second","iterations_per_second"),&_OS::set_iterations_per_second);
|
||||
ObjectTypeDB::bind_method(_MD("get_iterations_per_second"),&_OS::get_iterations_per_second);
|
||||
|
@ -108,25 +108,25 @@ public:
|
||||
bool is_video_mode_resizable(int p_screen=0) const;
|
||||
Array get_fullscreen_mode_list(int p_screen=0) const;
|
||||
|
||||
#ifdef NEW_WM_API
|
||||
|
||||
virtual int get_screen_count() const;
|
||||
virtual int get_screen() const;
|
||||
virtual void set_screen(int p_screen);
|
||||
virtual int get_current_screen() const;
|
||||
virtual void set_current_screen(int p_screen);
|
||||
virtual Point2 get_screen_position(int p_screen=0) const;
|
||||
virtual Size2 get_screen_size(int p_screen=0) const;
|
||||
virtual Point2 get_window_position() const;
|
||||
virtual void set_window_position(const Point2& p_position);
|
||||
virtual Size2 get_window_size() const;
|
||||
virtual void set_window_size(const Size2& p_size);
|
||||
virtual void set_fullscreen(bool p_enabled);
|
||||
virtual bool is_fullscreen() const;
|
||||
virtual void set_resizable(bool p_enabled);
|
||||
virtual bool is_resizable() const;
|
||||
virtual void set_minimized(bool p_enabled);
|
||||
virtual bool is_minimized() const;
|
||||
virtual void set_maximized(bool p_enabled);
|
||||
virtual bool is_maximized() const;
|
||||
#endif
|
||||
virtual void set_window_fullscreen(bool p_enabled);
|
||||
virtual bool is_window_fullscreen() const;
|
||||
virtual void set_window_resizable(bool p_enabled);
|
||||
virtual bool is_window_resizable() const;
|
||||
virtual void set_window_minimized(bool p_enabled);
|
||||
virtual bool is_window_minimized() const;
|
||||
virtual void set_window_maximized(bool p_enabled);
|
||||
virtual bool is_window_maximized() const;
|
||||
|
||||
|
||||
Error native_video_play(String p_path, float p_volume, String p_audio_track, String p_subtitle_track);
|
||||
bool native_video_is_playing();
|
||||
|
36
core/os/os.h
36
core/os/os.h
@ -150,25 +150,25 @@ public:
|
||||
virtual VideoMode get_video_mode(int p_screen=0) const=0;
|
||||
virtual void get_fullscreen_mode_list(List<VideoMode> *p_list,int p_screen=0) const=0;
|
||||
|
||||
#ifdef NEW_WM_API
|
||||
virtual int get_screen_count() const=0;
|
||||
virtual int get_screen() const=0;
|
||||
virtual void set_screen(int p_screen)=0;
|
||||
virtual Point2 get_screen_position(int p_screen=0) const=0;
|
||||
virtual Size2 get_screen_size(int p_screen=0) const=0;
|
||||
virtual Point2 get_window_position() const=0;
|
||||
virtual void set_window_position(const Point2& p_position)=0;
|
||||
|
||||
virtual int get_screen_count() const{ return 1; }
|
||||
virtual int get_current_screen() const { return 0; }
|
||||
virtual void set_current_screen(int p_screen) { }
|
||||
virtual Point2 get_screen_position(int p_screen=0) { return Point2(); }
|
||||
virtual Size2 get_screen_size(int p_screen=0) const { return get_window_size(); }
|
||||
virtual Point2 get_window_position() const { return Vector2(); }
|
||||
virtual void set_window_position(const Point2& p_position) {}
|
||||
virtual Size2 get_window_size() const=0;
|
||||
virtual void set_window_size(const Size2 p_size)=0;
|
||||
virtual void set_fullscreen(bool p_enabled)=0;
|
||||
virtual bool is_fullscreen() const=0;
|
||||
virtual void set_resizable(bool p_enabled)=0;
|
||||
virtual bool is_resizable() const=0;
|
||||
virtual void set_minimized(bool p_enabled)=0;
|
||||
virtual bool is_minimized() const=0;
|
||||
virtual void set_maximized(bool p_enabled)=0;
|
||||
virtual bool is_maximized() const=0;
|
||||
#endif
|
||||
virtual void set_window_size(const Size2 p_size){}
|
||||
virtual void set_window_fullscreen(bool p_enabled) {}
|
||||
virtual bool is_window_fullscreen() const { return true; }
|
||||
virtual void set_window_resizable(bool p_enabled) {}
|
||||
virtual bool is_window_resizable() const { return false; }
|
||||
virtual void set_window_minimized(bool p_enabled) {}
|
||||
virtual bool is_window_minimized() const { return false; }
|
||||
virtual void set_window_maximized(bool p_enabled) {}
|
||||
virtual bool is_window_maximized() const { return true; }
|
||||
|
||||
|
||||
virtual void set_iterations_per_second(int p_ips);
|
||||
virtual int get_iterations_per_second() const;
|
||||
|
@ -35,7 +35,7 @@ func _fixed_process(delta):
|
||||
|
||||
get_node("Label_Screen_Count").set_text( str("Screen_Count:\n", OS.get_screen_count() ) )
|
||||
|
||||
get_node("Label_Screen_Current").set_text( str("Screen:\n", OS.get_screen() ) )
|
||||
get_node("Label_Screen_Current").set_text( str("Screen:\n", OS.get_current_screen() ) )
|
||||
|
||||
get_node("Label_Screen0_Resolution").set_text( str("Screen0 Resolution:\n", OS.get_screen_size() ) )
|
||||
|
||||
@ -54,10 +54,10 @@ func _fixed_process(delta):
|
||||
get_node("Label_Screen1_Resolution").hide()
|
||||
get_node("Label_Screen1_Position").hide()
|
||||
|
||||
get_node("Button_Fullscreen").set_pressed( OS.is_fullscreen() )
|
||||
get_node("Button_FixedSize").set_pressed( !OS.is_resizable() )
|
||||
get_node("Button_Minimized").set_pressed( OS.is_minimized() )
|
||||
get_node("Button_Maximized").set_pressed( OS.is_maximized() )
|
||||
get_node("Button_Fullscreen").set_pressed( OS.is_window_fullscreen() )
|
||||
get_node("Button_FixedSize").set_pressed( !OS.is_is_window_resizable() )
|
||||
get_node("Button_Minimized").set_pressed( OS.is_is_window_minimized() )
|
||||
get_node("Button_Maximized").set_pressed( OS.is_is_window_maximized() )
|
||||
get_node("Button_Mouse_Grab").set_pressed( Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED )
|
||||
|
||||
|
||||
@ -137,39 +137,39 @@ func _on_Button_Resize_pressed():
|
||||
|
||||
|
||||
func _on_Button_Screen0_pressed():
|
||||
OS.set_screen(0)
|
||||
OS.set_current_screen(0)
|
||||
|
||||
|
||||
func _on_Button_Screen1_pressed():
|
||||
OS.set_screen(1)
|
||||
OS.set_current_screen(1)
|
||||
|
||||
|
||||
func _on_Button_Fullscreen_pressed():
|
||||
if(OS.is_fullscreen()):
|
||||
OS.set_fullscreen(false)
|
||||
if(OS.is_window_fullscreen()):
|
||||
OS.set_window_fullscreen(false)
|
||||
else:
|
||||
OS.set_fullscreen(true)
|
||||
OS.set_window_fullscreen(true)
|
||||
|
||||
|
||||
func _on_Button_FixedSize_pressed():
|
||||
if(OS.is_resizable()):
|
||||
OS.set_resizable(false)
|
||||
if(OS.is_window_resizable()):
|
||||
OS.set_window_resizable(false)
|
||||
else:
|
||||
OS.set_resizable(true)
|
||||
OS.set_window_resizable(true)
|
||||
|
||||
|
||||
func _on_Button_Minimized_pressed():
|
||||
if(OS.is_minimized()):
|
||||
OS.set_minimized(false)
|
||||
if(OS.is_window_minimized()):
|
||||
OS.set_window_minimized(false)
|
||||
else:
|
||||
OS.set_minimized(true)
|
||||
OS.set_window_minimized(true)
|
||||
|
||||
|
||||
func _on_Button_Maximized_pressed():
|
||||
if(OS.is_maximized()):
|
||||
OS.set_maximized(false)
|
||||
if(OS.is_window_maximized()):
|
||||
OS.set_window_maximized(false)
|
||||
else:
|
||||
OS.set_maximized(true)
|
||||
OS.set_window_maximized(true)
|
||||
|
||||
|
||||
func _on_Button_Mouse_Grab_pressed():
|
||||
|
@ -65,6 +65,7 @@ public:
|
||||
virtual bool list_dir_begin(); ///< This starts dir listing
|
||||
virtual String get_next();
|
||||
virtual bool current_is_dir() const;
|
||||
virtual bool current_is_hidden() const;
|
||||
virtual void list_dir_end(); ///<
|
||||
|
||||
virtual int get_drive_count();
|
||||
|
@ -171,6 +171,8 @@ void OS_Windows::initialize_core() {
|
||||
last_button_state=0;
|
||||
|
||||
//RedirectIOToConsole();
|
||||
maximized=false;
|
||||
minimized=false;
|
||||
|
||||
ThreadWindows::make_default();
|
||||
SemaphoreWindows::make_default();
|
||||
@ -1007,6 +1009,23 @@ void OS_Windows::process_joysticks() {
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
BOOL CALLBACK OS_Windows::MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) {
|
||||
OS_Windows *self=(OS_Windows*)OS::get_singleton();
|
||||
MonitorInfo minfo;
|
||||
minfo.hMonitor=hMonitor;
|
||||
minfo.hdcMonitor=hdcMonitor;
|
||||
minfo.rect.pos.x=lprcMonitor->left;
|
||||
minfo.rect.pos.y=lprcMonitor->top;
|
||||
minfo.rect.size.x=lprcMonitor->right - lprcMonitor->left;
|
||||
minfo.rect.size.y=lprcMonitor->bottom - lprcMonitor->top;
|
||||
|
||||
self->monitor_info.push_back(minfo);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
void OS_Windows::initialize(const VideoMode& p_desired,int p_video_driver,int p_audio_driver) {
|
||||
|
||||
|
||||
@ -1045,6 +1064,9 @@ void OS_Windows::initialize(const VideoMode& p_desired,int p_video_driver,int p_
|
||||
}
|
||||
|
||||
|
||||
EnumDisplayMonitors(NULL,NULL,MonitorEnumProc,0);
|
||||
|
||||
print_line("DETECTED MONITORS: "+itos(monitor_info.size()));
|
||||
if (video_mode.fullscreen) {
|
||||
|
||||
DEVMODE current;
|
||||
@ -1475,6 +1497,172 @@ void OS_Windows::get_fullscreen_mode_list(List<VideoMode> *p_list,int p_screen)
|
||||
|
||||
}
|
||||
|
||||
int OS_Windows::get_screen_count() const {
|
||||
|
||||
return monitor_info.size();
|
||||
}
|
||||
int OS_Windows::get_current_screen() const{
|
||||
|
||||
HMONITOR monitor = MonitorFromWindow(hWnd,MONITOR_DEFAULTTONEAREST);
|
||||
for(int i=0;i<monitor_info.size();i++) {
|
||||
if (monitor_info[i].hMonitor==monitor)
|
||||
return i;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
void OS_Windows::set_current_screen(int p_screen){
|
||||
|
||||
ERR_FAIL_INDEX(p_screen,monitor_info.size());
|
||||
|
||||
Vector2 ofs = get_window_position() - get_screen_position(get_current_screen());
|
||||
set_window_position(ofs+get_screen_position(p_screen));
|
||||
|
||||
}
|
||||
|
||||
Point2 OS_Windows::get_screen_position(int p_screen) const{
|
||||
|
||||
ERR_FAIL_INDEX_V(p_screen,monitor_info.size(),Point2());
|
||||
return Vector2( monitor_info[p_screen].rect.pos );
|
||||
|
||||
}
|
||||
Size2 OS_Windows::get_screen_size(int p_screen) const{
|
||||
|
||||
ERR_FAIL_INDEX_V(p_screen,monitor_info.size(),Point2());
|
||||
return Vector2( monitor_info[p_screen].rect.size );
|
||||
|
||||
}
|
||||
Point2 OS_Windows::get_window_position() const{
|
||||
|
||||
RECT r;
|
||||
GetWindowRect(hWnd,&r);
|
||||
return Point2(r.left,r.top);
|
||||
}
|
||||
void OS_Windows::set_window_position(const Point2& p_position){
|
||||
|
||||
RECT r;
|
||||
GetWindowRect(hWnd,&r);
|
||||
MoveWindow(hWnd,p_position.x,p_position.y,r.right-r.left,r.bottom-r.top,TRUE);
|
||||
|
||||
}
|
||||
Size2 OS_Windows::get_window_size() const{
|
||||
|
||||
RECT r;
|
||||
GetWindowRect(hWnd,&r);
|
||||
return Vector2(r.right-r.left,r.bottom-r.top);
|
||||
|
||||
}
|
||||
void OS_Windows::set_window_size(const Size2 p_size){
|
||||
|
||||
RECT r;
|
||||
GetWindowRect(hWnd,&r);
|
||||
MoveWindow(hWnd,r.left,r.top,p_size.x,p_size.y,TRUE);
|
||||
|
||||
}
|
||||
void OS_Windows::set_window_fullscreen(bool p_enabled){
|
||||
|
||||
if (video_mode.fullscreen==p_enabled)
|
||||
return;
|
||||
|
||||
if (p_enabled) {
|
||||
|
||||
GetWindowRect(hWnd,&pre_fs_rect);
|
||||
|
||||
int cs = get_current_screen();
|
||||
Point2 pos = get_screen_position(cs);
|
||||
Size2 size = get_screen_size(cs);
|
||||
RECT WindowRect;
|
||||
WindowRect.left = pos.x;
|
||||
WindowRect.top = pos.y;
|
||||
WindowRect.bottom = pos.y+size.y;
|
||||
WindowRect.right = pos.x+size.x;
|
||||
|
||||
DWORD dwExStyle=WS_EX_APPWINDOW;
|
||||
DWORD dwStyle=WS_POPUP;
|
||||
|
||||
AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle);
|
||||
|
||||
video_mode.fullscreen=true;
|
||||
video_mode.width=size.x;
|
||||
video_mode.height=size.y;
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
DWORD dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
|
||||
DWORD dwStyle=WS_OVERLAPPEDWINDOW;
|
||||
if (!video_mode.resizable) {
|
||||
dwStyle &= ~WS_THICKFRAME;
|
||||
dwStyle &= ~WS_MAXIMIZEBOX;
|
||||
}
|
||||
AdjustWindowRectEx(&pre_fs_rect, dwStyle, FALSE, dwExStyle);
|
||||
video_mode.fullscreen=false;
|
||||
video_mode.width=pre_fs_rect.right-pre_fs_rect.left;
|
||||
video_mode.height=pre_fs_rect.bottom-pre_fs_rect.top;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
bool OS_Windows::is_window_fullscreen() const{
|
||||
|
||||
return video_mode.fullscreen;
|
||||
}
|
||||
void OS_Windows::set_window_resizable(bool p_enabled){
|
||||
|
||||
if (video_mode.fullscreen || video_mode.resizable==p_enabled)
|
||||
return;
|
||||
|
||||
GetWindowRect(hWnd,&pre_fs_rect);
|
||||
DWORD dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
|
||||
DWORD dwStyle=WS_OVERLAPPEDWINDOW;
|
||||
if (!p_enabled) {
|
||||
dwStyle &= ~WS_THICKFRAME;
|
||||
dwStyle &= ~WS_MAXIMIZEBOX;
|
||||
}
|
||||
AdjustWindowRectEx(&pre_fs_rect, dwStyle, FALSE, dwExStyle);
|
||||
video_mode.resizable=p_enabled;
|
||||
|
||||
}
|
||||
bool OS_Windows::is_window_resizable() const{
|
||||
|
||||
return video_mode.resizable;
|
||||
}
|
||||
void OS_Windows::set_window_minimized(bool p_enabled){
|
||||
|
||||
if (p_enabled) {
|
||||
maximized=false;
|
||||
minimized=true;
|
||||
ShowWindow(hWnd,SW_MINIMIZE);
|
||||
} else {
|
||||
ShowWindow(hWnd,SW_RESTORE);
|
||||
maximized=false;
|
||||
minimized=false;
|
||||
}
|
||||
}
|
||||
bool OS_Windows::is_window_minimized() const{
|
||||
|
||||
return minimized;
|
||||
|
||||
}
|
||||
void OS_Windows::set_window_maximized(bool p_enabled){
|
||||
|
||||
if (p_enabled) {
|
||||
maximized=true;
|
||||
minimized=false;
|
||||
ShowWindow(hWnd,SW_MAXIMIZE);
|
||||
} else {
|
||||
ShowWindow(hWnd,SW_RESTORE);
|
||||
maximized=false;
|
||||
minimized=false;
|
||||
}
|
||||
}
|
||||
bool OS_Windows::is_window_maximized() const{
|
||||
|
||||
return maximized;
|
||||
}
|
||||
|
||||
|
||||
void OS_Windows::print_error(const char* p_function,const char* p_file,int p_line,const char *p_code,const char*p_rationale,ErrorType p_type) {
|
||||
|
||||
HANDLE hCon=GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
|
@ -86,7 +86,7 @@ class OS_Windows : public OS {
|
||||
uint64_t ticks_start;
|
||||
uint64_t ticks_per_second;
|
||||
|
||||
bool minimized;
|
||||
|
||||
bool old_invalid;
|
||||
bool outside;
|
||||
int old_x,old_y;
|
||||
@ -196,6 +196,22 @@ protected:
|
||||
};
|
||||
Map<ProcessID, ProcessInfo>* process_map;
|
||||
|
||||
struct MonitorInfo {
|
||||
HMONITOR hMonitor;
|
||||
HDC hdcMonitor;
|
||||
Rect2 rect;
|
||||
|
||||
|
||||
};
|
||||
|
||||
RECT pre_fs_rect;
|
||||
Vector<MonitorInfo> monitor_info;
|
||||
bool maximized;
|
||||
bool minimized;
|
||||
|
||||
static BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData);
|
||||
|
||||
|
||||
public:
|
||||
LRESULT WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
@ -218,6 +234,24 @@ public:
|
||||
virtual VideoMode get_video_mode(int p_screen=0) const;
|
||||
virtual void get_fullscreen_mode_list(List<VideoMode> *p_list,int p_screen=0) const;
|
||||
|
||||
virtual int get_screen_count() const;
|
||||
virtual int get_current_screen() const;
|
||||
virtual void set_current_screen(int p_screen);
|
||||
virtual Point2 get_screen_position(int p_screen=0) const;
|
||||
virtual Size2 get_screen_size(int p_screen=0) const;
|
||||
virtual Point2 get_window_position() const;
|
||||
virtual void set_window_position(const Point2& p_position);
|
||||
virtual Size2 get_window_size() const;
|
||||
virtual void set_window_size(const Size2 p_size);
|
||||
virtual void set_window_fullscreen(bool p_enabled);
|
||||
virtual bool is_window_fullscreen() const;
|
||||
virtual void set_window_resizable(bool p_enabled);
|
||||
virtual bool is_window_resizable() const;
|
||||
virtual void set_window_minimized(bool p_enabled);
|
||||
virtual bool is_window_minimized() const;
|
||||
virtual void set_window_maximized(bool p_enabled);
|
||||
virtual bool is_window_maximized() const;
|
||||
|
||||
virtual MainLoop *get_main_loop() const;
|
||||
|
||||
virtual String get_name();
|
||||
|
@ -36,7 +36,7 @@
|
||||
#include "servers/physics/physics_server_sw.h"
|
||||
|
||||
#include "X11/Xutil.h"
|
||||
#ifdef NEW_WM_API
|
||||
|
||||
#include "X11/Xatom.h"
|
||||
#include "X11/extensions/Xinerama.h"
|
||||
// ICCCM
|
||||
@ -46,7 +46,7 @@
|
||||
#define _NET_WM_STATE_REMOVE 0L // remove/unset property
|
||||
#define _NET_WM_STATE_ADD 1L // add/set property
|
||||
#define _NET_WM_STATE_TOGGLE 2L // toggle property
|
||||
#endif
|
||||
|
||||
#include "main/main.h"
|
||||
|
||||
|
||||
@ -187,7 +187,8 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi
|
||||
visual_server =memnew(VisualServerWrapMT(visual_server,get_render_thread_mode()==RENDER_SEPARATE_THREAD));
|
||||
}
|
||||
|
||||
#ifndef NEW_WM_API
|
||||
#if 1
|
||||
// NEW_WM_API
|
||||
// borderless fullscreen window mode
|
||||
if (current_videomode.fullscreen) {
|
||||
// needed for lxde/openbox, possibly others
|
||||
@ -552,7 +553,7 @@ void OS_X11::get_fullscreen_mode_list(List<VideoMode> *p_list,int p_screen) cons
|
||||
|
||||
}
|
||||
|
||||
#ifdef NEW_WM_API
|
||||
//#ifdef NEW_WM_API
|
||||
#if 0
|
||||
// Just now not needed. Can be used for a possible OS.set_border(bool) method
|
||||
void OS_X11::set_wm_border(bool p_enabled) {
|
||||
@ -598,7 +599,7 @@ int OS_X11::get_screen_count() const {
|
||||
return count;
|
||||
}
|
||||
|
||||
int OS_X11::get_screen() const {
|
||||
int OS_X11::get_current_screen() const {
|
||||
int x,y;
|
||||
Window child;
|
||||
XTranslateCoordinates( x11_display, x11_window, DefaultRootWindow(x11_display), 0, 0, &x, &y, &child);
|
||||
@ -613,7 +614,7 @@ int OS_X11::get_screen() const {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void OS_X11::set_screen(int p_screen) {
|
||||
void OS_X11::set_current_screen(int p_screen) {
|
||||
int count = get_screen_count();
|
||||
if(p_screen >= count) return;
|
||||
|
||||
@ -730,18 +731,18 @@ void OS_X11::set_window_size(const Size2 p_size) {
|
||||
XResizeWindow(x11_display, x11_window, p_size.x, p_size.y);
|
||||
}
|
||||
|
||||
void OS_X11::set_fullscreen(bool p_enabled) {
|
||||
void OS_X11::set_window_fullscreen(bool p_enabled) {
|
||||
set_wm_fullscreen(p_enabled);
|
||||
current_videomode.fullscreen = p_enabled;
|
||||
|
||||
visual_server->init();
|
||||
}
|
||||
|
||||
bool OS_X11::is_fullscreen() const {
|
||||
bool OS_X11::is_window_fullscreen() const {
|
||||
return current_videomode.fullscreen;
|
||||
}
|
||||
|
||||
void OS_X11::set_resizable(bool p_enabled) {
|
||||
void OS_X11::set_window_resizable(bool p_enabled) {
|
||||
XSizeHints *xsh;
|
||||
xsh = XAllocSizeHints();
|
||||
xsh->flags = p_enabled ? 0L : PMinSize | PMaxSize;
|
||||
@ -758,11 +759,11 @@ void OS_X11::set_resizable(bool p_enabled) {
|
||||
current_videomode.resizable = p_enabled;
|
||||
}
|
||||
|
||||
bool OS_X11::is_resizable() const {
|
||||
bool OS_X11::is_window_resizable() const {
|
||||
return current_videomode.resizable;
|
||||
}
|
||||
|
||||
void OS_X11::set_minimized(bool p_enabled) {
|
||||
void OS_X11::set_window_minimized(bool p_enabled) {
|
||||
// Using ICCCM -- Inter-Client Communication Conventions Manual
|
||||
XEvent xev;
|
||||
Atom wm_change = XInternAtom(x11_display, "WM_CHANGE_STATE", False);
|
||||
@ -791,7 +792,7 @@ void OS_X11::set_minimized(bool p_enabled) {
|
||||
XSendEvent(x11_display, DefaultRootWindow(x11_display), False, SubstructureRedirectMask | SubstructureNotifyMask, &xev);
|
||||
}
|
||||
|
||||
bool OS_X11::is_minimized() const {
|
||||
bool OS_X11::is_window_minimized() const {
|
||||
// Using ICCCM -- Inter-Client Communication Conventions Manual
|
||||
Atom property = XInternAtom(x11_display,"WM_STATE", True);
|
||||
Atom type;
|
||||
@ -823,7 +824,7 @@ bool OS_X11::is_minimized() const {
|
||||
return false;
|
||||
}
|
||||
|
||||
void OS_X11::set_maximized(bool p_enabled) {
|
||||
void OS_X11::set_window_maximized(bool p_enabled) {
|
||||
// Using EWMH -- Extended Window Manager Hints
|
||||
XEvent xev;
|
||||
Atom wm_state = XInternAtom(x11_display, "_NET_WM_STATE", False);
|
||||
@ -844,7 +845,7 @@ void OS_X11::set_maximized(bool p_enabled) {
|
||||
maximized = p_enabled;
|
||||
}
|
||||
|
||||
bool OS_X11::is_maximized() const {
|
||||
bool OS_X11::is_window_maximized() const {
|
||||
// Using EWMH -- Extended Window Manager Hints
|
||||
Atom property = XInternAtom(x11_display,"_NET_WM_STATE",False );
|
||||
Atom type;
|
||||
@ -889,7 +890,7 @@ bool OS_X11::is_maximized() const {
|
||||
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
InputModifierState OS_X11::get_key_modifier_state(unsigned int p_x11_state) {
|
||||
|
||||
|
@ -159,12 +159,12 @@ class OS_X11 : public OS_Unix {
|
||||
int joystick_count;
|
||||
Joystick joysticks[JOYSTICKS_MAX];
|
||||
|
||||
#ifdef NEW_WM_API
|
||||
|
||||
unsigned int capture_idle;
|
||||
bool maximized;
|
||||
//void set_wm_border(bool p_enabled);
|
||||
void set_wm_fullscreen(bool p_enabled);
|
||||
#endif
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
@ -220,25 +220,25 @@ public:
|
||||
virtual VideoMode get_video_mode(int p_screen=0) const;
|
||||
virtual void get_fullscreen_mode_list(List<VideoMode> *p_list,int p_screen=0) const;
|
||||
|
||||
#ifdef NEW_WM_API
|
||||
|
||||
virtual int get_screen_count() const;
|
||||
virtual int get_screen() const;
|
||||
virtual void set_screen(int p_screen);
|
||||
virtual int get_current_screen() const;
|
||||
virtual void set_current_screen(int p_screen);
|
||||
virtual Point2 get_screen_position(int p_screen=0) const;
|
||||
virtual Size2 get_screen_size(int p_screen=0) const;
|
||||
virtual Point2 get_window_position() const;
|
||||
virtual void set_window_position(const Point2& p_position);
|
||||
virtual Size2 get_window_size() const;
|
||||
virtual void set_window_size(const Size2 p_size);
|
||||
virtual void set_fullscreen(bool p_enabled);
|
||||
virtual bool is_fullscreen() const;
|
||||
virtual void set_resizable(bool p_enabled);
|
||||
virtual bool is_resizable() const;
|
||||
virtual void set_minimized(bool p_enabled);
|
||||
virtual bool is_minimized() const;
|
||||
virtual void set_maximized(bool p_enabled);
|
||||
virtual bool is_maximized() const;
|
||||
#endif
|
||||
virtual void set_window_fullscreen(bool p_enabled);
|
||||
virtual bool is_window_fullscreen() const;
|
||||
virtual void set_window_resizable(bool p_enabled);
|
||||
virtual bool is_window_resizable() const;
|
||||
virtual void set_window_minimized(bool p_enabled);
|
||||
virtual bool is_window_minimized() const;
|
||||
virtual void set_window_maximized(bool p_enabled);
|
||||
virtual bool is_window_maximized() const;
|
||||
|
||||
virtual void move_window_to_foreground();
|
||||
|
||||
void run();
|
||||
|
@ -1360,9 +1360,9 @@ Error ColladaImport::_create_mesh_surfaces(Ref<Mesh>& p_mesh,const Map<String,Co
|
||||
if(md.vertices[vertex_src_id].sources.has("NORMAL")){
|
||||
//has normals
|
||||
normals.resize(vlen);
|
||||
std::cout << "has normals" << std::endl;
|
||||
//std::cout << "has normals" << std::endl;
|
||||
String normal_src_id = md.vertices[vertex_src_id].sources["NORMAL"];
|
||||
std::cout << "normals source: "<< normal_src_id.utf8().get_data() <<std::endl;
|
||||
//std::cout << "normals source: "<< normal_src_id.utf8().get_data() <<std::endl;
|
||||
ERR_FAIL_COND_V(!md.sources.has(normal_src_id),ERR_INVALID_DATA);
|
||||
|
||||
const Collada::MeshData::Source *m=&md.sources[normal_src_id];
|
||||
|
Loading…
Reference in New Issue
Block a user