From dc93fe6cc68115dd280881c0896fa3f0e8d46f2c Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Wed, 1 Jul 2009 13:42:15 -0400 Subject: DEV-31980: Wrap LLViewerWindow::saveSnapshot() with an event API. Add LLViewerWindowListener per Incremental_Viewer_Automation/Event_API. Add LLViewerWindowListener pointer to LLViewerWindow, and initialize in ctor. Add llviewerwindowlistener.{h,cpp} to newview/CMakeLists.txt. --- indra/newview/llviewerwindowlistener.cpp | 78 ++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 indra/newview/llviewerwindowlistener.cpp (limited to 'indra/newview/llviewerwindowlistener.cpp') diff --git a/indra/newview/llviewerwindowlistener.cpp b/indra/newview/llviewerwindowlistener.cpp new file mode 100644 index 0000000000..ad90b1d2ab --- /dev/null +++ b/indra/newview/llviewerwindowlistener.cpp @@ -0,0 +1,78 @@ +/** + * @file llviewerwindowlistener.cpp + * @author Nat Goodspeed + * @date 2009-06-30 + * @brief Implementation for llviewerwindowlistener. + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + * Copyright (c) 2009, Linden Research, Inc. + * $/LicenseInfo$ + */ + +// Precompiled header +#include "llviewerprecompiledheaders.h" +// associated header +#include "llviewerwindowlistener.h" +// STL headers +#include +// std headers +// external library headers +// other Linden headers +#include "llviewerwindow.h" + +LLViewerWindowListener::LLViewerWindowListener(const std::string& pumpname, LLViewerWindow* llviewerwindow): + LLDispatchListener(pumpname, "op"), + mViewerWindow(llviewerwindow) +{ + // add() every method we want to be able to invoke via this event API. + LLSD saveSnapshotArgs; + saveSnapshotArgs["filename"] = LLSD::String(); + saveSnapshotArgs["reply"] = LLSD::String(); + // The following are optional, so don't build them into required prototype. +// saveSnapshotArgs["width"] = LLSD::Integer(); +// saveSnapshotArgs["height"] = LLSD::Integer(); +// saveSnapshotArgs["showui"] = LLSD::Boolean(); +// saveSnapshotArgs["rebuild"] = LLSD::Boolean(); +// saveSnapshotArgs["type"] = LLSD::String(); + add("saveSnapshot", &LLViewerWindowListener::saveSnapshot, saveSnapshotArgs); +} + +void LLViewerWindowListener::saveSnapshot(const LLSD& event) const +{ + LLReqID reqid(event); + typedef std::map TypeMap; + TypeMap types; +#define tp(name) types[#name] = LLViewerWindow::SNAPSHOT_TYPE_##name + tp(COLOR); + tp(DEPTH); + tp(OBJECT_ID); +#undef tp + // Our add() call should ensure that the incoming LLSD does in fact + // contain our required arguments. Deal with the optional ones. + S32 width (mViewerWindow->getWindowDisplayWidth()); + S32 height(mViewerWindow->getWindowDisplayHeight()); + if (event.has("width")) + width = event["width"].asInteger(); + if (event.has("height")) + height = event["height"].asInteger(); + // showui defaults to true, requiring special treatment + bool showui = true; + if (event.has("showui")) + showui = event["showui"].asBoolean(); + bool rebuild(event["rebuild"]); // defaults to false + LLViewerWindow::ESnapshotType type(LLViewerWindow::SNAPSHOT_TYPE_COLOR); + if (event.has("type")) + { + TypeMap::const_iterator found = types.find(event["type"]); + if (found == types.end()) + { + LL_ERRS("LLViewerWindowListener") << "LLViewerWindowListener::saveSnapshot(): " + << "unrecognized type " << event["type"] << LL_ENDL; + } + type = found->second; + } + bool ok = mViewerWindow->saveSnapshot(event["filename"], width, height, showui, rebuild, type); + LLSD response(reqid.makeResponse()); + response["ok"] = ok; + LLEventPumps::instance().obtain(event["reply"]).post(response); +} -- cgit v1.2.3 From f35bb882c2eb512622900ac934f8c6dbdb70786d Mon Sep 17 00:00:00 2001 From: brad kittenbrink Date: Thu, 9 Jul 2009 18:36:22 -0700 Subject: Added a requestReshape handler to LLViewerWindowListener. --- indra/newview/llviewerwindowlistener.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'indra/newview/llviewerwindowlistener.cpp') diff --git a/indra/newview/llviewerwindowlistener.cpp b/indra/newview/llviewerwindowlistener.cpp index ad90b1d2ab..acff7ac835 100644 --- a/indra/newview/llviewerwindowlistener.cpp +++ b/indra/newview/llviewerwindowlistener.cpp @@ -35,6 +35,7 @@ LLViewerWindowListener::LLViewerWindowListener(const std::string& pumpname, LLVi // saveSnapshotArgs["rebuild"] = LLSD::Boolean(); // saveSnapshotArgs["type"] = LLSD::String(); add("saveSnapshot", &LLViewerWindowListener::saveSnapshot, saveSnapshotArgs); + add("requestReshape", &LLViewerWindowListener::requestReshape); } void LLViewerWindowListener::saveSnapshot(const LLSD& event) const @@ -76,3 +77,11 @@ void LLViewerWindowListener::saveSnapshot(const LLSD& event) const response["ok"] = ok; LLEventPumps::instance().obtain(event["reply"]).post(response); } + +void LLViewerWindowListener::requestReshape(LLSD const & event_data) const +{ + if(event_data.has("w") && event_data.has("h")) + { + mViewerWindow->reshape(event_data["w"].asInteger(), event_data["h"].asInteger()); + } +} \ No newline at end of file -- cgit v1.2.3 From 6128de22f48fca9331ad67bb6b0914a60cb0d843 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Mon, 20 Jul 2009 17:11:54 -0700 Subject: Add newline to end of file to placate Linux gcc --- indra/newview/llviewerwindowlistener.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview/llviewerwindowlistener.cpp') diff --git a/indra/newview/llviewerwindowlistener.cpp b/indra/newview/llviewerwindowlistener.cpp index acff7ac835..317e361c80 100644 --- a/indra/newview/llviewerwindowlistener.cpp +++ b/indra/newview/llviewerwindowlistener.cpp @@ -84,4 +84,4 @@ void LLViewerWindowListener::requestReshape(LLSD const & event_data) const { mViewerWindow->reshape(event_data["w"].asInteger(), event_data["h"].asInteger()); } -} \ No newline at end of file +} -- cgit v1.2.3