summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Mutavchi <emutavchi@productengine.com>2010-03-05 21:36:41 +0200
committerEugene Mutavchi <emutavchi@productengine.com>2010-03-05 21:36:41 +0200
commit48fd4c8d14172ab9780d88bf204d1e4e56f2004e (patch)
tree845586ccfd49e52fc8f0099ecc5d550ce7f13edf
parenta174a4ff3db22a40fe0259dab260321b20108fb7 (diff)
Working on major bug EXT-4820([NUX] Viewer dimensions on first-run) - moved LLDisplayInfo to llwindow, implemented getting the width/height of screen for mac os and linux.
--HG-- branch : product-engine
-rw-r--r--indra/llcommon/llsys.cpp27
-rw-r--r--indra/llcommon/llsys.h16
-rw-r--r--indra/llwindow/llwindow.cpp27
-rw-r--r--indra/llwindow/llwindow.h15
-rw-r--r--indra/llwindow/llwindowmacosx-objc.h1
-rw-r--r--indra/llwindow/llwindowmacosx-objc.mm9
-rw-r--r--indra/llwindow/llwindowmacosx.cpp20
-rw-r--r--indra/llwindow/llwindowmacosx.h2
-rw-r--r--indra/llwindow/llwindowsdl.cpp41
-rw-r--r--indra/llwindow/llwindowsdl.h3
-rw-r--r--indra/llwindow/llwindowwin32.cpp11
-rw-r--r--indra/llwindow/llwindowwin32.h3
-rw-r--r--indra/newview/llappviewer.cpp6
13 files changed, 135 insertions, 46 deletions
diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp
index 0ed700b9da..0272c55db2 100644
--- a/indra/llcommon/llsys.cpp
+++ b/indra/llcommon/llsys.cpp
@@ -775,33 +775,6 @@ void LLMemoryInfo::stream(std::ostream& s) const
#endif
}
-S32 LLDisplayInfo::getDisplayWidth() const
-{
-#if LL_WINDOWS
- return ::GetSystemMetrics(SM_CXVIRTUALSCREEN);
-#elif LL_DARWIN
- return 1024; //*FIXME
-#elif LL_SOLARIS
- return 1024; //*FIXME
-#else
- return 1024; //*FIXME
-#endif
-}
-
-S32 LLDisplayInfo::getDisplayHeight() const
-{
-#if LL_WINDOWS
- return ::GetSystemMetrics(SM_CYVIRTUALSCREEN);
-#elif LL_DARWIN
- return 768; //*FIXME
-#elif LL_SOLARIS
- return 768; //*FIXME
-#else
- return 768; //*FIXME
-#endif
-}
-
-
std::ostream& operator<<(std::ostream& s, const LLOSInfo& info)
{
info.stream(s);
diff --git a/indra/llcommon/llsys.h b/indra/llcommon/llsys.h
index aa3fdd485b..f1dda1b2e2 100644
--- a/indra/llcommon/llsys.h
+++ b/indra/llcommon/llsys.h
@@ -122,22 +122,6 @@ public:
U32 getPhysicalMemoryClamped() const; ///< Memory size in clamped bytes
};
-//=============================================================================
-//
-// CLASS LLDisplayInfo
-class LL_COMMON_API LLDisplayInfo
-
-/*! @brief Class to query the information about some display settings
-*/
-{
-public:
- LLDisplayInfo(){}; ///< Default constructor
-
- S32 getDisplayWidth() const; ///< display width
- S32 getDisplayHeight() const; ///< display height
-
-};
-
LL_COMMON_API std::ostream& operator<<(std::ostream& s, const LLOSInfo& info);
LL_COMMON_API std::ostream& operator<<(std::ostream& s, const LLCPUInfo& info);
LL_COMMON_API std::ostream& operator<<(std::ostream& s, const LLMemoryInfo& info);
diff --git a/indra/llwindow/llwindow.cpp b/indra/llwindow/llwindow.cpp
index 1c6c9e6e9d..b77deb003f 100644
--- a/indra/llwindow/llwindow.cpp
+++ b/indra/llwindow/llwindow.cpp
@@ -407,3 +407,30 @@ BOOL LLWindowManager::isWindowValid(LLWindow *window)
{
return sWindowList.find(window) != sWindowList.end();
}
+
+S32 LLDisplayInfo::getDisplayWidth() const
+{
+#if LL_WINDOWS
+ return LLWindowWin32::getDisplayWidth();
+#elif LL_DARWIN
+ return LLWindowMacOSX::getDisplayWidth();
+#elif LL_SDL
+ return LLWindowSDL::getDisplayWidth();
+#else
+ return 1024; //*FIXME
+#endif
+}
+
+S32 LLDisplayInfo::getDisplayHeight() const
+{
+#if LL_WINDOWS
+ return LLWindowWin32::getDisplayHeight();
+#elif LL_DARWIN
+ return LLWindowMacOSX::getDisplayHeight();
+#elif LL_SDL
+ return LLWindowSDL::getDisplayHeight();
+#else
+ return 768; //*FIXME
+#endif
+}
+
diff --git a/indra/llwindow/llwindow.h b/indra/llwindow/llwindow.h
index 55b221e716..b769f5071b 100644
--- a/indra/llwindow/llwindow.h
+++ b/indra/llwindow/llwindow.h
@@ -281,4 +281,19 @@ extern const std::string gURLProtocolWhitelistHandler[];
void simpleEscapeString ( std::string& stringIn );
+//=============================================================================
+//
+// CLASS LLDisplayInfo
+class LLDisplayInfo
+
+/*! @brief Class to query the information about some display settings
+*/
+{
+public:
+ LLDisplayInfo(){}; ///< Default constructor
+
+ S32 getDisplayWidth() const; ///< display width
+ S32 getDisplayHeight() const; ///< display height
+};
+
#endif // _LL_window_h_
diff --git a/indra/llwindow/llwindowmacosx-objc.h b/indra/llwindow/llwindowmacosx-objc.h
index ed5d7b1e74..66851300d4 100644
--- a/indra/llwindow/llwindowmacosx-objc.h
+++ b/indra/llwindow/llwindowmacosx-objc.h
@@ -40,4 +40,5 @@ void setupCocoa();
CursorRef createImageCursor(const char *fullpath, int hotspotX, int hotspotY);
OSErr releaseImageCursor(CursorRef ref);
OSErr setImageCursor(CursorRef ref);
+void getScreenSize(int* width, int* height);
diff --git a/indra/llwindow/llwindowmacosx-objc.mm b/indra/llwindow/llwindowmacosx-objc.mm
index 59b25e1726..6eca24ec1d 100644
--- a/indra/llwindow/llwindowmacosx-objc.mm
+++ b/indra/llwindow/llwindowmacosx-objc.mm
@@ -116,3 +116,12 @@ OSErr setImageCursor(CursorRef ref)
return noErr;
}
+void getScreenSize(int* width, int* height)
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ NSRect screen_rect = [[NSScreen mainScreen] frame];
+ if (width) *width = (int)(screen_rect.size.width);
+ if (height) *height = (int)(screen_rect.size.height);
+ [pool release];
+}
+
diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp
index ad97bc45fc..5b21e06fe2 100644
--- a/indra/llwindow/llwindowmacosx.cpp
+++ b/indra/llwindow/llwindowmacosx.cpp
@@ -3464,6 +3464,26 @@ MASK LLWindowMacOSX::modifiersToMask(SInt16 modifiers)
return mask;
}
+// static
+S32 LLWindowMacOSX::getDisplayWidth()
+{
+ S32 width = 1024;
+ // Need to invoke cocoa before use getScreenSize()
+ setupCocoa();
+ getScreenSize(&width, NULL);
+ return width;
+}
+
+// static
+S32 LLWindowMacOSX::getDisplayHeight()
+{
+ S32 height = 768;
+ // Need to invoke cocoa before use getScreenSize()
+ setupCocoa();
+ getScreenSize(NULL, &height);
+ return height;
+}
+
#if LL_OS_DRAGDROP_ENABLED
OSErr LLWindowMacOSX::dragTrackingHandler(DragTrackingMessage message, WindowRef theWindow,
diff --git a/indra/llwindow/llwindowmacosx.h b/indra/llwindow/llwindowmacosx.h
index 7c6b324029..86036a261c 100644
--- a/indra/llwindow/llwindowmacosx.h
+++ b/indra/llwindow/llwindowmacosx.h
@@ -123,6 +123,8 @@ public:
// Provide native key event data
/*virtual*/ LLSD getNativeKeyData();
+ static S32 getDisplayWidth();
+ static S32 getDisplayHeight();
protected:
LLWindowMacOSX(LLWindowCallbacks* callbacks,
diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
index 1f705f9e60..fe0ada5b09 100644
--- a/indra/llwindow/llwindowsdl.cpp
+++ b/indra/llwindow/llwindowsdl.cpp
@@ -187,6 +187,47 @@ Display* LLWindowSDL::get_SDL_Display(void)
}
#endif // LL_X11
+// static
+S32 LLWindowSDL::getDisplayWidth()
+{
+#if LL_GTK
+ if (LLWindowSDL::ll_try_gtk_init())
+ {
+ return gdk_screen_width();
+ }
+#endif // LL_GTK
+
+#if LL_X11
+ Display *display = XOpenDisplay(NULL);
+ int screen_num = DefaultScreen(display);
+ S32 width = DisplayWidth(display, screen_num);
+ XCloseDisplay(display);
+ return width;
+#endif //LL_X11
+
+ return 1024;
+}
+
+// static
+S32 LLWindowSDL::getDisplayHeight()
+{
+#if LL_GTK
+ if (LLWindowSDL::ll_try_gtk_init())
+ {
+ return gdk_screen_height();
+ }
+#endif // LL_GTK
+
+#if LL_X11
+ Display *display = XOpenDisplay(NULL);
+ int screen_num = DefaultScreen(display);
+ S32 height = DisplayHeight(display, screen_num);
+ XCloseDisplay(display);
+ return height;
+#endif //LL_X11
+
+ return 768;
+}
LLWindowSDL::LLWindowSDL(LLWindowCallbacks* callbacks,
const std::string& title, S32 x, S32 y, S32 width,
diff --git a/indra/llwindow/llwindowsdl.h b/indra/llwindow/llwindowsdl.h
index e6bdd46a77..2311a361fa 100644
--- a/indra/llwindow/llwindowsdl.h
+++ b/indra/llwindow/llwindowsdl.h
@@ -148,6 +148,9 @@ public:
static Display* get_SDL_Display(void);
#endif // LL_X11
+ static S32 getDisplayWidth();
+ static S32 getDisplayHeight();
+
protected:
LLWindowSDL(LLWindowCallbacks* callbacks,
const std::string& title, int x, int y, int width, int height, U32 flags,
diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp
index c80392ad45..4be5d06c2b 100644
--- a/indra/llwindow/llwindowwin32.cpp
+++ b/indra/llwindow/llwindowwin32.cpp
@@ -3714,5 +3714,16 @@ std::vector<std::string> LLWindowWin32::getDynamicFallbackFontList()
return std::vector<std::string>();
}
+// static
+S32 LLWindowWin32::getDisplayWidth()
+{
+ return ::GetSystemMetrics(SM_CXVIRTUALSCREEN);
+}
+
+// static
+S32 LLWindowWin32::getDisplayHeight()
+{
+ return ::GetSystemMetrics(SM_CYVIRTUALSCREEN);
+}
#endif // LL_WINDOWS
diff --git a/indra/llwindow/llwindowwin32.h b/indra/llwindow/llwindowwin32.h
index 9d57735772..c221ec0192 100644
--- a/indra/llwindow/llwindowwin32.h
+++ b/indra/llwindow/llwindowwin32.h
@@ -120,6 +120,9 @@ public:
static std::vector<std::string> getDynamicFallbackFontList();
+ static S32 getDisplayWidth();
+ static S32 getDisplayHeight();
+
protected:
LLWindowWin32(LLWindowCallbacks* callbacks,
const std::string& title, const std::string& name, int x, int y, int width, int height, U32 flags,
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 6d4c90c2b9..8b3f3aa28e 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -305,7 +305,7 @@ static std::string gLaunchFileOnQuit;
// Used on Win32 for other apps to identify our window (eg, win_setup)
const char* const VIEWER_WINDOW_CLASSNAME = "Second Life";
static const S32 FIRST_RUN_WINDOW_WIDTH = 1024;
-static const S32 FIRST_RUN_WINDOW_HRIGHT = 768;
+static const S32 FIRST_RUN_WINDOW_HIGHT = 768;
//----------------------------------------------------------------------------
// List of entries from strings.xml to always replace
@@ -2375,12 +2375,12 @@ bool LLAppViewer::initWindow()
if (first_run)//for first login
{
window_width = FIRST_RUN_WINDOW_WIDTH;//yep hardcoded
- window_height = FIRST_RUN_WINDOW_HRIGHT;
+ window_height = FIRST_RUN_WINDOW_HIGHT;
//if screen resolution is lower then 1024*768 then show maximized
LLDisplayInfo display_info;
if(display_info.getDisplayWidth() <= FIRST_RUN_WINDOW_WIDTH
- || display_info.getDisplayHeight()<=FIRST_RUN_WINDOW_HRIGHT)
+ || display_info.getDisplayHeight()<=FIRST_RUN_WINDOW_HIGHT)
{
show_maximized = true;
}