Merge branch 'Fix-photo-overlay'
commit
abedbe4e32
|
|
@ -1521,9 +1521,6 @@ void LLShaderMgr::initAttribsAndUniforms()
|
|||
// <FS:Beq> reserved uniforms for snapshot frame
|
||||
mReservedUniforms.push_back("border_color");
|
||||
mReservedUniforms.push_back("border_thickness");
|
||||
mReservedUniforms.push_back("guide_color");
|
||||
mReservedUniforms.push_back("guide_thickness");
|
||||
mReservedUniforms.push_back("guide_style");
|
||||
mReservedUniforms.push_back("frame_rect");
|
||||
// </FS:Beq>
|
||||
|
||||
|
|
@ -1540,4 +1537,3 @@ void LLShaderMgr::initAttribsAndUniforms()
|
|||
dupe_check.insert(mReservedUniforms[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -357,9 +357,6 @@ public:
|
|||
// <FS:Beq> Uniforms for snapshot frame
|
||||
SNAPSHOT_BORDER_COLOR, // "border_color"
|
||||
SNAPSHOT_BORDER_THICKNESS, // "border_thickness"
|
||||
SNAPSHOT_GUIDE_COLOR, // "guide_color"
|
||||
SNAPSHOT_GUIDE_THICKNESS, // "guide_thickness"
|
||||
SNAPSHOT_GUIDE_STYLE, // "guide_style"
|
||||
SNAPSHOT_FRAME_RECT, // "frame_rect"
|
||||
// </FS:Beq>
|
||||
END_RESERVED_UNIFORMS
|
||||
|
|
|
|||
|
|
@ -26650,6 +26650,28 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<real>1.0</real>
|
||||
</map>
|
||||
<key>FSSnapshotGuideVisibility</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>The blend factor used to color the snapshot framing guides</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>0.5</real>
|
||||
</map>
|
||||
<key>FSSnapshotGuideStyle</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>The framing guide layout to display inside the snapshot frame</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string>rule_of_thirds</string>
|
||||
</map>
|
||||
<key>FSManipRotateJointUseNaturalDirection</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -5,9 +5,6 @@ uniform vec2 screen_res;
|
|||
uniform vec4 frame_rect; // x, y, width, height (normalized 0->1)
|
||||
uniform vec3 border_color;
|
||||
uniform float border_thickness; // in pixels
|
||||
uniform vec3 guide_color;
|
||||
uniform float guide_thickness; // in pixels
|
||||
uniform float guide_style; // 0: no guide, 1: rule of thirds, 2: golden spiral
|
||||
|
||||
in vec2 vary_fragcoord;
|
||||
|
||||
|
|
@ -57,20 +54,6 @@ void main()
|
|||
diff.rgb = mix(diff.rgb, border_color, 0.5);
|
||||
}
|
||||
|
||||
// Draw guide based on guide_style
|
||||
if (guide_style == 1)
|
||||
{
|
||||
// Draw rule of thirds guide
|
||||
float third_x = (frame_rect_px.z - frame_rect_px.x) / 3.0;
|
||||
float third_y = (frame_rect_px.w - frame_rect_px.y) / 3.0;
|
||||
if ((tc.x > frame_rect_px.x + third_x - guide_thickness && tc.x < frame_rect_px.x + third_x + guide_thickness) ||
|
||||
(tc.x > frame_rect_px.x + 2.0 * third_x - guide_thickness && tc.x < frame_rect_px.x + 2.0 * third_x + guide_thickness) ||
|
||||
(tc.y > frame_rect_px.y + third_y - guide_thickness && tc.y < frame_rect_px.y + third_y + guide_thickness) ||
|
||||
(tc.y > frame_rect_px.y + 2.0 * third_y - guide_thickness && tc.y < frame_rect_px.y + 2.0 * third_y + guide_thickness))
|
||||
{
|
||||
diff.rgb = mix(diff.rgb, guide_color, 0.05);
|
||||
}
|
||||
}
|
||||
}
|
||||
frag_color = diff;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -602,6 +602,7 @@ void LLViewerFloaterReg::registerFloaters()
|
|||
LLFloaterReg::add("stop_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterNotRunQueue>);
|
||||
LLFloaterReg::add("snapshot", "floater_snapshot.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSnapshot>);
|
||||
LLFloaterReg::add("simple_snapshot", "floater_simple_snapshot.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSimpleSnapshot>);
|
||||
LLFloaterReg::add("snapshot_guide_settings", "floater_snapshot_guide_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloater>);// <FS:Beq/> photo guide settings
|
||||
// <FS:CR> Search floater is deferred to login now so we can tell what grid we're in.
|
||||
//LLFloaterReg::add("search", "floater_search.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSearch>);
|
||||
LLFloaterReg::add("profile", "floater_profile.xml",(LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterProfile>);
|
||||
|
|
|
|||
|
|
@ -4539,6 +4539,355 @@ void LLPipeline::recordTrianglesDrawn()
|
|||
add(LLStatViewer::TRIANGLES_DRAWN, LLUnits::Triangles::fromValue(count));
|
||||
}
|
||||
|
||||
// <FS:Beq> Rework Snapshot Guide Rendering
|
||||
void LLPipeline::renderSnapshotGuidesOverlay()
|
||||
{
|
||||
if (!mSnapshotGuideState.active || !mSnapshotGuideState.show_guides)
|
||||
{
|
||||
mSnapshotGuideState.active = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!gViewerWindow || !gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
|
||||
{
|
||||
mSnapshotGuideState.active = false;
|
||||
return;
|
||||
}
|
||||
|
||||
LLRect view_rect = gViewerWindow->getWorldViewRectRaw();
|
||||
const F32 width = (F32)view_rect.getWidth();
|
||||
const F32 height = (F32)view_rect.getHeight();
|
||||
if (width <= 0.f || height <= 0.f)
|
||||
{
|
||||
mSnapshotGuideState.active = false;
|
||||
return;
|
||||
}
|
||||
|
||||
const F32 left_norm = llmin(mSnapshotGuideState.left, mSnapshotGuideState.right);
|
||||
const F32 right_norm = llmax(mSnapshotGuideState.left, mSnapshotGuideState.right);
|
||||
const F32 bottom_norm = llmin(mSnapshotGuideState.bottom, mSnapshotGuideState.top);
|
||||
const F32 top_norm = llmax(mSnapshotGuideState.bottom, mSnapshotGuideState.top);
|
||||
|
||||
const F32 left_px = left_norm * width;
|
||||
const F32 right_px = right_norm * width;
|
||||
const F32 bottom_px = bottom_norm * height;
|
||||
const F32 top_px = top_norm * height;
|
||||
|
||||
const F32 frame_width = right_px - left_px;
|
||||
const F32 frame_height = top_px - bottom_px;
|
||||
if (frame_width <= 0.f || frame_height <= 0.f)
|
||||
{
|
||||
mSnapshotGuideState.active = false;
|
||||
return;
|
||||
}
|
||||
|
||||
const F32 alpha = llclamp(mSnapshotGuideState.visibility, 0.f, 1.f);
|
||||
if (alpha <= 0.f)
|
||||
{
|
||||
mSnapshotGuideState.active = false;
|
||||
return;
|
||||
}
|
||||
|
||||
LLGLDisable depth(GL_DEPTH_TEST);
|
||||
LLGLDisable cull(GL_CULL_FACE);
|
||||
LLGLDisable stencil(GL_STENCIL_TEST);
|
||||
LLGLEnable blend(GL_BLEND);
|
||||
gGL.setSceneBlendType(LLRender::BT_ALPHA);
|
||||
|
||||
LLGLSLShader* ui_shader = &gUIProgram;
|
||||
ui_shader->bind();
|
||||
|
||||
if (!LLViewerFetchedTexture::sWhiteImagep.isNull())
|
||||
{
|
||||
gGL.getTexUnit(0)->bind(LLViewerFetchedTexture::sWhiteImagep);
|
||||
}
|
||||
else
|
||||
{
|
||||
gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, LLTexUnit::sWhiteTexture);
|
||||
}
|
||||
|
||||
gGL.matrixMode(LLRender::MM_PROJECTION);
|
||||
gGL.pushMatrix();
|
||||
gGL.loadIdentity();
|
||||
gGL.ortho(0.f, width, 0.f, height, -1.f, 1.f);
|
||||
|
||||
gGL.matrixMode(LLRender::MM_MODELVIEW);
|
||||
gGL.pushMatrix();
|
||||
gGL.loadIdentity();
|
||||
gGLLastMatrix = NULL;
|
||||
|
||||
const LLColor4 line_color(mSnapshotGuideState.color, alpha);
|
||||
gGL.color4fv(line_color.mV);
|
||||
|
||||
const F32 thickness = llmax(mSnapshotGuideState.thickness, 0.f);
|
||||
const F32 half_thickness = thickness * 0.5f;
|
||||
auto draw_filled_rect = [&](F32 l, F32 b, F32 r, F32 t)
|
||||
{
|
||||
const S32 left_i = ll_round(l);
|
||||
const S32 right_i = ll_round(r);
|
||||
const S32 top_i = ll_round(t);
|
||||
const S32 bottom_i = ll_round(b);
|
||||
gl_rect_2d(left_i, top_i, right_i, bottom_i, line_color, true);
|
||||
};
|
||||
|
||||
auto draw_vertical_norm = [&](F32 norm)
|
||||
{
|
||||
const F32 x = left_px + frame_width * norm;
|
||||
draw_filled_rect(x - half_thickness, bottom_px, x + half_thickness, top_px);
|
||||
};
|
||||
|
||||
auto draw_horizontal_norm = [&](F32 norm)
|
||||
{
|
||||
const F32 y = bottom_px + frame_height * norm;
|
||||
draw_filled_rect(left_px, y - half_thickness, right_px, y + half_thickness);
|
||||
};
|
||||
|
||||
switch (mSnapshotGuideState.style)
|
||||
{
|
||||
case SnapshotGuideState::Style::RuleOfThirds:
|
||||
{
|
||||
const F32 offsets[] = { 1.f / 3.f, 2.f / 3.f };
|
||||
for (F32 offset : offsets)
|
||||
{
|
||||
draw_vertical_norm(offset);
|
||||
draw_horizontal_norm(offset);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SnapshotGuideState::Style::GoldenRatio:
|
||||
{
|
||||
constexpr F32 phi = 1.61803398875f;
|
||||
const SnapshotGuideState::GoldenOrientation orientation = mSnapshotGuideState.golden_orientation;
|
||||
|
||||
const F32 scale = llmin(frame_width / phi, frame_height);
|
||||
if (scale <= 0.f)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
const F32 golden_width = phi * scale;
|
||||
const F32 golden_height = scale;
|
||||
const F32 pad_x = frame_width - golden_width;
|
||||
const F32 pad_y = frame_height - golden_height;
|
||||
|
||||
F32 anchor_x = left_px;
|
||||
F32 anchor_y = bottom_px;
|
||||
switch (orientation)
|
||||
{
|
||||
case SnapshotGuideState::GoldenOrientation::TopLeft:
|
||||
anchor_y += pad_y;
|
||||
break;
|
||||
case SnapshotGuideState::GoldenOrientation::TopRight:
|
||||
anchor_x += pad_x;
|
||||
anchor_y += pad_y;
|
||||
break;
|
||||
case SnapshotGuideState::GoldenOrientation::BottomRight:
|
||||
anchor_x += pad_x;
|
||||
break;
|
||||
case SnapshotGuideState::GoldenOrientation::BottomLeft:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
auto map_point = [&](F32 local_x, F32 local_y) -> LLVector2
|
||||
{
|
||||
F32 x = local_x;
|
||||
F32 y = local_y;
|
||||
|
||||
if (orientation == SnapshotGuideState::GoldenOrientation::TopLeft ||
|
||||
orientation == SnapshotGuideState::GoldenOrientation::BottomLeft)
|
||||
{
|
||||
x = golden_width - local_x;
|
||||
}
|
||||
|
||||
if (orientation == SnapshotGuideState::GoldenOrientation::BottomLeft ||
|
||||
orientation == SnapshotGuideState::GoldenOrientation::BottomRight)
|
||||
{
|
||||
y = golden_height - local_y;
|
||||
}
|
||||
|
||||
return LLVector2(anchor_x + x, anchor_y + y);
|
||||
};
|
||||
|
||||
std::vector<std::pair<LLVector2, LLVector2>> line_segments;
|
||||
line_segments.reserve(24);
|
||||
|
||||
auto add_line = [&](F32 x0, F32 y0, F32 x1, F32 y1)
|
||||
{
|
||||
line_segments.emplace_back(map_point(x0, y0), map_point(x1, y1));
|
||||
};
|
||||
|
||||
// Outline of the fitted golden rectangle.
|
||||
add_line(0.f, 0.f, golden_width, 0.f);
|
||||
add_line(0.f, golden_height, golden_width, golden_height);
|
||||
add_line(0.f, 0.f, 0.f, golden_height);
|
||||
add_line(golden_width, 0.f, golden_width, golden_height);
|
||||
|
||||
// Generate subdivision lines while we walk the squares.
|
||||
F32 x0 = 0.f;
|
||||
F32 y0 = 0.f;
|
||||
F32 x1 = golden_width;
|
||||
F32 y1 = golden_height;
|
||||
|
||||
for (U32 step = 0; step < 12; ++step)
|
||||
{
|
||||
const F32 width = x1 - x0;
|
||||
const F32 height = y1 - y0;
|
||||
if (width <= 1.f || height <= 1.f)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if (step % 4 == 0)
|
||||
{
|
||||
x0 += height;
|
||||
add_line(x0, y0, x0, y1);
|
||||
}
|
||||
else if (step % 4 == 1)
|
||||
{
|
||||
y0 += width;
|
||||
add_line(x0, y0, x1, y0);
|
||||
}
|
||||
else if (step % 4 == 2)
|
||||
{
|
||||
x1 -= height;
|
||||
add_line(x1, y0, x1, y1);
|
||||
}
|
||||
else
|
||||
{
|
||||
y1 -= width;
|
||||
add_line(x0, y1, x1, y1);
|
||||
}
|
||||
}
|
||||
|
||||
auto draw_golden_spiral = [&](U32 max_depth)
|
||||
{
|
||||
gGL.begin(LLRender::LINE_STRIP);
|
||||
|
||||
F32 spiral_x0 = 0.f;
|
||||
F32 spiral_y0 = 0.f;
|
||||
F32 spiral_x1 = golden_width;
|
||||
F32 spiral_y1 = golden_height;
|
||||
|
||||
for (U32 step = 0; step < max_depth; ++step)
|
||||
{
|
||||
const F32 width = spiral_x1 - spiral_x0;
|
||||
const F32 height = spiral_y1 - spiral_y0;
|
||||
if (width <= 1.f || height <= 1.f)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
F32 size = 0.f;
|
||||
F32 cx = 0.f;
|
||||
F32 cy = 0.f;
|
||||
F32 start_angle = 0.f;
|
||||
F32 end_angle = 0.f;
|
||||
|
||||
switch (step % 4)
|
||||
{
|
||||
case 0: // left square
|
||||
size = height;
|
||||
cx = spiral_x0 + size;
|
||||
cy = spiral_y0 + size;
|
||||
start_angle = F_PI;
|
||||
end_angle = 1.5f * F_PI;
|
||||
spiral_x0 += size;
|
||||
break;
|
||||
case 1: // bottom square
|
||||
size = width;
|
||||
cx = spiral_x0;
|
||||
cy = spiral_y0 + size;
|
||||
start_angle = 1.5f * F_PI;
|
||||
end_angle = 2.f * F_PI;
|
||||
spiral_y0 += size;
|
||||
break;
|
||||
case 2: // right square
|
||||
size = height;
|
||||
cx = spiral_x1 - size;
|
||||
cy = spiral_y0;
|
||||
start_angle = 0.f;
|
||||
end_angle = F_PI_BY_TWO;
|
||||
spiral_x1 -= size;
|
||||
break;
|
||||
case 3: // top square
|
||||
default:
|
||||
size = width;
|
||||
cx = spiral_x0 + size;
|
||||
cy = spiral_y1 - size;
|
||||
start_angle = F_PI_BY_TWO;
|
||||
end_angle = F_PI;
|
||||
spiral_y1 -= size;
|
||||
break;
|
||||
}
|
||||
|
||||
if (size <= 0.f)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
const S32 segments = llclamp((S32)(size / 4.f), 12, 64);
|
||||
for (S32 i = 0; i <= segments; ++i)
|
||||
{
|
||||
const F32 t = start_angle + (end_angle - start_angle) * (F32)i / (F32)segments;
|
||||
const F32 local_x = cx + cosf(t) * size;
|
||||
const F32 local_y = cy + sinf(t) * size;
|
||||
LLVector2 mapped = map_point(local_x, local_y);
|
||||
gGL.vertex2f(mapped.mV[0], mapped.mV[1]);
|
||||
}
|
||||
}
|
||||
|
||||
gGL.end();
|
||||
};
|
||||
|
||||
gGL.flush();
|
||||
const F32 line_width = llmax(thickness, 1.f);
|
||||
glLineWidth(line_width);
|
||||
draw_golden_spiral(12);
|
||||
glLineWidth(1.f);
|
||||
|
||||
if (!line_segments.empty())
|
||||
{
|
||||
gGL.flush();
|
||||
glLineWidth(line_width);
|
||||
gGL.begin(LLRender::LINES);
|
||||
for (const auto& segment : line_segments)
|
||||
{
|
||||
gGL.vertex2f(segment.first.mV[0], segment.first.mV[1]);
|
||||
gGL.vertex2f(segment.second.mV[0], segment.second.mV[1]);
|
||||
}
|
||||
gGL.end();
|
||||
glLineWidth(1.f);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SnapshotGuideState::Style::Diagonal:
|
||||
{
|
||||
const F32 line_width = llmax(thickness, 1.f);
|
||||
gGL.flush();
|
||||
glLineWidth(line_width);
|
||||
gGL.begin(LLRender::LINES);
|
||||
gGL.vertex2f(left_px, bottom_px);
|
||||
gGL.vertex2f(right_px, top_px);
|
||||
gGL.vertex2f(left_px, top_px);
|
||||
gGL.vertex2f(right_px, bottom_px);
|
||||
gGL.end();
|
||||
glLineWidth(1.f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
gGL.matrixMode(LLRender::MM_MODELVIEW);
|
||||
gGL.popMatrix();
|
||||
gGL.matrixMode(LLRender::MM_PROJECTION);
|
||||
gGL.popMatrix();
|
||||
gGLLastMatrix = NULL;
|
||||
|
||||
ui_shader->unbind();
|
||||
|
||||
mSnapshotGuideState.active = false;
|
||||
}
|
||||
// </FS:Beq>
|
||||
// <FS:Beq> FIRE-32023 Focus Point Rendering
|
||||
void LLPipeline::renderFocusPoint()
|
||||
{
|
||||
|
|
@ -8091,6 +8440,9 @@ bool LLPipeline::renderSnapshotFrame(LLRenderTarget* src, LLRenderTarget* dst)
|
|||
static LLCachedControl<bool> show_frame(gSavedSettings, "FSSnapshotShowCaptureFrame", false);
|
||||
static LLCachedControl<bool> show_guides(gSavedSettings, "FSSnapshotShowGuides", false);
|
||||
|
||||
mSnapshotGuideState.active = false;
|
||||
mSnapshotGuideState.show_guides = false;
|
||||
|
||||
float left = 0.f;
|
||||
float top = 0.f;
|
||||
float right = 1.f;
|
||||
|
|
@ -8101,12 +8453,41 @@ bool LLPipeline::renderSnapshotFrame(LLRenderTarget* src, LLRenderTarget* dst)
|
|||
static LLCachedControl<LLColor3> guide_color(gSavedSettings, "FSSnapshotFrameGuideColor", LLColor3(1.f, 1.f, 0.f));
|
||||
static LLCachedControl<F32> border_thickness(gSavedSettings, "FSSnapshotFrameBorderWidth", 2.0f);
|
||||
static LLCachedControl<F32> guide_thickness(gSavedSettings, "FSSnapshotFrameGuideWidth", 2.0f);
|
||||
static LLCachedControl<F32> guide_visibility(gSavedSettings, "FSSnapshotGuideVisibility", 0.5f);
|
||||
static LLCachedControl<std::string> guide_style_setting(gSavedSettings, "FSSnapshotGuideStyle", std::string("rule_of_thirds"));
|
||||
|
||||
F32 guide_style = 1.f; // 0:off, 1:rule_of_thirds, others maybe in the future
|
||||
if (!show_guides)
|
||||
SnapshotGuideState::Style guide_style = SnapshotGuideState::Style::RuleOfThirds;
|
||||
SnapshotGuideState::GoldenOrientation golden_orientation = SnapshotGuideState::GoldenOrientation::TopLeft;
|
||||
const std::string style_value = guide_style_setting();
|
||||
if (style_value == "golden_ratio" || style_value == "golden_ratio_top_left")
|
||||
{
|
||||
guide_style = 0.f;
|
||||
guide_style = SnapshotGuideState::Style::GoldenRatio;
|
||||
golden_orientation = SnapshotGuideState::GoldenOrientation::TopLeft;
|
||||
}
|
||||
else if (style_value == "golden_ratio_top_right")
|
||||
{
|
||||
guide_style = SnapshotGuideState::Style::GoldenRatio;
|
||||
golden_orientation = SnapshotGuideState::GoldenOrientation::TopRight;
|
||||
}
|
||||
else if (style_value == "golden_ratio_bottom_left")
|
||||
{
|
||||
guide_style = SnapshotGuideState::Style::GoldenRatio;
|
||||
golden_orientation = SnapshotGuideState::GoldenOrientation::BottomLeft;
|
||||
}
|
||||
else if (style_value == "golden_ratio_bottom_right")
|
||||
{
|
||||
guide_style = SnapshotGuideState::Style::GoldenRatio;
|
||||
golden_orientation = SnapshotGuideState::GoldenOrientation::BottomRight;
|
||||
}
|
||||
else if (style_value == "diagonal")
|
||||
{
|
||||
guide_style = SnapshotGuideState::Style::Diagonal;
|
||||
}
|
||||
else
|
||||
{
|
||||
guide_style = SnapshotGuideState::Style::RuleOfThirds;
|
||||
}
|
||||
const F32 guide_visibility_value = show_guides ? (F32)guide_visibility : 0.f;
|
||||
const bool simple_snapshot_visible = LLFloaterReg::instanceVisible("simple_snapshot");
|
||||
const bool flickr_snapshot_visible = LLFloaterReg::instanceVisible("flickr");
|
||||
const bool primfeed_snapshot_visible = LLFloaterReg::instanceVisible("primfeed"); // <FS:Beq/> Primfeed integration
|
||||
|
|
@ -8220,17 +8601,7 @@ bool LLPipeline::renderSnapshotFrame(LLRenderTarget* src, LLRenderTarget* dst)
|
|||
LLShaderMgr::SNAPSHOT_BORDER_THICKNESS,
|
||||
(GLfloat)border_thickness);
|
||||
|
||||
shader->uniform3fv(
|
||||
LLShaderMgr::SNAPSHOT_GUIDE_COLOR,
|
||||
1,
|
||||
guide_color().mV);
|
||||
|
||||
shader->uniform1f(
|
||||
LLShaderMgr::SNAPSHOT_GUIDE_THICKNESS,
|
||||
(GLfloat)guide_thickness);
|
||||
shader->uniform1f(
|
||||
LLShaderMgr::SNAPSHOT_GUIDE_STYLE,
|
||||
(GLfloat)guide_style);
|
||||
// Guides are rendered in a later UI pass; no additional uniforms required here.
|
||||
|
||||
mScreenTriangleVB->setBuffer();
|
||||
mScreenTriangleVB->drawArrays(LLRender::TRIANGLES, 0, 3);
|
||||
|
|
@ -8239,6 +8610,22 @@ bool LLPipeline::renderSnapshotFrame(LLRenderTarget* src, LLRenderTarget* dst)
|
|||
shader->disableTexture(LLShaderMgr::DEFERRED_DIFFUSE, src->getUsage());
|
||||
shader->unbind();
|
||||
dst->flush();
|
||||
|
||||
if (show_frame && show_guides && gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
|
||||
{
|
||||
mSnapshotGuideState.active = true;
|
||||
mSnapshotGuideState.show_guides = true;
|
||||
mSnapshotGuideState.left = left;
|
||||
mSnapshotGuideState.right = right;
|
||||
mSnapshotGuideState.bottom = bottom;
|
||||
mSnapshotGuideState.top = top;
|
||||
mSnapshotGuideState.color = guide_color();
|
||||
mSnapshotGuideState.thickness = guide_thickness();
|
||||
mSnapshotGuideState.visibility = llclamp(guide_visibility_value, 0.f, 1.f);
|
||||
mSnapshotGuideState.style = guide_style;
|
||||
mSnapshotGuideState.golden_orientation = golden_orientation;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
|
@ -8614,7 +9001,8 @@ void LLPipeline::renderFinalize()
|
|||
gDeferredPostNoDoFNoiseProgram.unbind();
|
||||
|
||||
gGL.setSceneBlendType(LLRender::BT_ALPHA);
|
||||
|
||||
|
||||
renderSnapshotGuidesOverlay(); // <FS:Beq/> Render snapshot guides as part of UI
|
||||
renderFocusPoint(); // <FS:Beq/> FIRE-32023 render focus point
|
||||
|
||||
if (hasRenderDebugMask(LLPipeline::RENDER_DEBUG_PHYSICS_SHAPES))
|
||||
|
|
|
|||
|
|
@ -354,6 +354,7 @@ public:
|
|||
void renderHighlights();
|
||||
bool renderVignette(LLRenderTarget* src, LLRenderTarget* dst);
|
||||
bool renderSnapshotFrame(LLRenderTarget* src, LLRenderTarget* dst); // <FS:Beq/> Add snapshot frame rendering
|
||||
void renderSnapshotGuidesOverlay(); // <FS:Beq/> Add snapshot composition guide rendering
|
||||
void renderDebug();
|
||||
void renderPhysicsDisplay();
|
||||
|
||||
|
|
@ -1023,6 +1024,39 @@ protected:
|
|||
U32 mLightMask;
|
||||
U32 mLightMovingMask;
|
||||
|
||||
// <FS:Beq> Add snapshot guides as part of UI rendering to avoid issues in compositor
|
||||
struct SnapshotGuideState
|
||||
{
|
||||
enum class Style : U8
|
||||
{
|
||||
RuleOfThirds,
|
||||
GoldenRatio,
|
||||
Diagonal
|
||||
};
|
||||
|
||||
enum class GoldenOrientation : U8
|
||||
{
|
||||
TopLeft,
|
||||
TopRight,
|
||||
BottomLeft,
|
||||
BottomRight
|
||||
};
|
||||
|
||||
bool active = false;
|
||||
bool show_guides = false;
|
||||
F32 left = 0.f;
|
||||
F32 right = 1.f;
|
||||
F32 bottom = 0.f;
|
||||
F32 top = 1.f;
|
||||
LLColor3 color = LLColor3(1.f, 1.f, 1.f);
|
||||
F32 thickness = 0.f;
|
||||
F32 visibility = 0.f;
|
||||
Style style = Style::RuleOfThirds;
|
||||
GoldenOrientation golden_orientation = GoldenOrientation::TopLeft;
|
||||
};
|
||||
|
||||
SnapshotGuideState mSnapshotGuideState;
|
||||
// </FS:Beq>
|
||||
static bool sRenderPhysicalBeacons;
|
||||
static bool sRenderMOAPBeacons;
|
||||
static bool sRenderScriptedTouchBeacons;
|
||||
|
|
|
|||
|
|
@ -10,10 +10,10 @@
|
|||
single_instance="true"
|
||||
reuse_instance="true"
|
||||
title="Share to Primfeed"
|
||||
height="638"
|
||||
height="650"
|
||||
width="272">
|
||||
<panel
|
||||
height="638"
|
||||
height="650"
|
||||
width="272"
|
||||
visible="true"
|
||||
name="background"
|
||||
|
|
@ -27,7 +27,7 @@
|
|||
tab_height="21"
|
||||
tab_position="top"
|
||||
top="7"
|
||||
height="605"
|
||||
height="625"
|
||||
follows="all"
|
||||
halign="center">
|
||||
<panel
|
||||
|
|
|
|||
|
|
@ -219,14 +219,27 @@
|
|||
layout="topleft"
|
||||
left="30"
|
||||
top_pad="7"
|
||||
width="180"
|
||||
width="150"
|
||||
name="show_guides" />
|
||||
<button
|
||||
enabled_control="FSSnapshotShowCaptureFrame"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
top_delta="-20"
|
||||
width="24"
|
||||
height="24"
|
||||
label="#"
|
||||
font="SansSerifLarge"
|
||||
tool_tip="Open frame guide settings"
|
||||
name="guide_settings_btn">
|
||||
<button.commit_callback function="Floater.Show" parameter="snapshot_guide_settings" />
|
||||
</button>
|
||||
<check_box
|
||||
label="Freeze frame (fullscreen)"
|
||||
layout="topleft"
|
||||
height="16"
|
||||
left="10"
|
||||
top_pad="1"
|
||||
top_pad="9"
|
||||
width="180"
|
||||
name="freeze_frame_check" />
|
||||
<check_box
|
||||
|
|
|
|||
|
|
@ -0,0 +1,114 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<floater
|
||||
name="snapshot_guide_settings"
|
||||
title="Frame Guide Settings"
|
||||
can_dock="false"
|
||||
can_resize="false"
|
||||
width="250"
|
||||
height="140"
|
||||
min_height="140"
|
||||
min_width="280"
|
||||
layout="topleft"
|
||||
translate="false">
|
||||
<panel
|
||||
follows="all"
|
||||
border="false"
|
||||
top="20"
|
||||
left="10"
|
||||
right="-10"
|
||||
bottom="-10"
|
||||
layout="topleft">
|
||||
<text
|
||||
top="0"
|
||||
layout="topleft"
|
||||
follows="top|left"
|
||||
left="0"
|
||||
height="16">
|
||||
Guide Color and Appearance
|
||||
</text>
|
||||
<color_swatch
|
||||
enabled_control="FSSnapshotShowGuides"
|
||||
control_name="FSSnapshotFrameGuideColor"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
top_pad="0"
|
||||
width="40"
|
||||
height="65"
|
||||
can_apply_immediately="true"
|
||||
name="guide_color"
|
||||
follows="left|top"
|
||||
label="" />
|
||||
<spinner
|
||||
enabled_control="FSSnapshotShowGuides"
|
||||
control_name="FSSnapshotFrameGuideWidth"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
top_delta="0"
|
||||
width="160"
|
||||
label_width="120"
|
||||
height="20"
|
||||
decimal_digits="1"
|
||||
increment="0.1"
|
||||
min_val="0.0"
|
||||
max_val="20.0"
|
||||
label="Thickness (px)"
|
||||
name="guide_thickness" />
|
||||
<slider
|
||||
enabled_control="FSSnapshotShowGuides"
|
||||
control_name="FSSnapshotGuideVisibility"
|
||||
label="Opacity"
|
||||
layout="topleft"
|
||||
left_pad="-160"
|
||||
top_pad="8"
|
||||
width="160"
|
||||
height="18"
|
||||
initial_value="0.5"
|
||||
min_val="0.0"
|
||||
max_val="1.0"
|
||||
decimal_digits="2"
|
||||
name="guide_opacity" />
|
||||
<text
|
||||
layout="topleft"
|
||||
follows="top|left"
|
||||
left="0"
|
||||
height="16">
|
||||
Guide Style
|
||||
</text>
|
||||
<combo_box
|
||||
enabled_control="FSSnapshotShowGuides"
|
||||
control_name="FSSnapshotGuideStyle"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
top_pad="4"
|
||||
width="180"
|
||||
height="23"
|
||||
name="guide_style_combo"
|
||||
tool_tip="Choose which framing guide to display">
|
||||
<combo_box.item
|
||||
name="rule_of_thirds"
|
||||
label="Rule of Thirds"
|
||||
value="rule_of_thirds" />
|
||||
<combo_box.item
|
||||
name="golden_ratio_top_left"
|
||||
label="Golden Ratio (Top Left)"
|
||||
value="golden_ratio_top_left" />
|
||||
<combo_box.item
|
||||
name="golden_ratio_top_right"
|
||||
label="Golden Ratio (Top Right)"
|
||||
value="golden_ratio_top_right" />
|
||||
<combo_box.item
|
||||
name="golden_ratio_bottom_left"
|
||||
label="Golden Ratio (Bottom Left)"
|
||||
value="golden_ratio_bottom_left" />
|
||||
<combo_box.item
|
||||
name="golden_ratio_bottom_right"
|
||||
label="Golden Ratio (Bottom Right)"
|
||||
value="golden_ratio_bottom_right" />
|
||||
<combo_box.item
|
||||
name="diagonal"
|
||||
label="Diagonal"
|
||||
value="diagonal" />
|
||||
</combo_box>
|
||||
|
||||
</panel>
|
||||
</floater>
|
||||
|
|
@ -136,24 +136,49 @@
|
|||
width="251">
|
||||
Refreshing...
|
||||
</text>
|
||||
<check_box
|
||||
control_name="FSSnapshotShowCaptureFrame"
|
||||
label="Show capture frame"
|
||||
tool_tip="Show a frame on-screen that surrounds the areas of the snapshot. Parts of the scene that are outside of the snapshot will be de-saturated and slightly blurred."
|
||||
layout="topleft"
|
||||
left="10"
|
||||
top_pad="7"
|
||||
width="124"
|
||||
name="show_frame" />
|
||||
<check_box
|
||||
enabled_control="FSSnapshotShowCaptureFrame"
|
||||
control_name="FSSnapshotShowGuides"
|
||||
label="Framing guide"
|
||||
tool_tip="Show framing guide (rule of thirds) inside the snapshot frame."
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
width="60"
|
||||
name="show_guides" />
|
||||
<panel
|
||||
height="38"
|
||||
width="250"
|
||||
visible="true"
|
||||
name="options_panel"
|
||||
top_pad="3"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
right="-10"
|
||||
left="10">
|
||||
<check_box
|
||||
control_name="FSSnapshotShowCaptureFrame"
|
||||
label="Show Snapshot Frame"
|
||||
tool_tip="Show a frame on-screen that surrounds the areas of the snapshot. Parts of the scene that are outside of the snapshot will be de-saturated and slightly blurred."
|
||||
layout="topleft"
|
||||
left="10"
|
||||
top_pad="8"
|
||||
width="110"
|
||||
name="show_frame" />
|
||||
<check_box
|
||||
top_pad="8"
|
||||
enabled_control="FSSnapshotShowCaptureFrame"
|
||||
control_name="FSSnapshotShowGuides"
|
||||
label="Show Composition Guide"
|
||||
tool_tip="Show composition helper inside the snapshot frame."
|
||||
layout="topleft"
|
||||
left="10"
|
||||
width="110"
|
||||
name="show_guides" />
|
||||
<button
|
||||
enabled_control="FSSnapshotShowCaptureFrame"
|
||||
layout="topleft"
|
||||
left="226"
|
||||
top_delta="-20"
|
||||
width="25"
|
||||
height="25"
|
||||
label="#"
|
||||
font="SansSerifLarge"
|
||||
tool_tip="Open frame guide settings"
|
||||
name="guide_settings_btn">
|
||||
<button.commit_callback function="Floater.Show" parameter="snapshot_guide_settings" />
|
||||
</button>
|
||||
</panel>
|
||||
<view_border
|
||||
bevel_style="in"
|
||||
follows="left|top"
|
||||
|
|
@ -269,7 +294,7 @@
|
|||
<text_editor
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
height="70"
|
||||
height="35"
|
||||
width="249"
|
||||
left="10"
|
||||
length="1"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<panel
|
||||
height="590"
|
||||
height="610"
|
||||
width="272"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
|
|
@ -137,33 +137,59 @@
|
|||
width="251">
|
||||
Refreshing...
|
||||
</text>
|
||||
<check_box
|
||||
control_name="FSSnapshotShowCaptureFrame"
|
||||
label="Show capture frame"
|
||||
tool_tip="Show a frame on-screen that surrounds the areas of the snapshot. Parts of the scene that are outside of the snapshot will be de-saturated and slightly blurred."
|
||||
layout="topleft"
|
||||
left="10"
|
||||
top_pad="7"
|
||||
width="124"
|
||||
name="show_frame" />
|
||||
<check_box
|
||||
enabled_control="FSSnapshotShowCaptureFrame"
|
||||
control_name="FSSnapshotShowGuides"
|
||||
label="Framing guide"
|
||||
tool_tip="Show framing guide (rule of thirds) inside the snapshot frame."
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
width="60"
|
||||
name="show_guides" />
|
||||
<view_border
|
||||
bevel_style="in"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
height="1"
|
||||
left="10"
|
||||
name="refresh_border"
|
||||
width="250"
|
||||
top_pad="0" />
|
||||
<panel
|
||||
height="25"
|
||||
width="250"
|
||||
visible="true"
|
||||
name="options_panel"
|
||||
top_pad="3"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
right="-10"
|
||||
left="10"
|
||||
>
|
||||
<check_box
|
||||
control_name="FSSnapshotShowCaptureFrame"
|
||||
label="Show Snapshot Frame"
|
||||
tool_tip="Show a frame on-screen that surrounds the areas of the snapshot. Parts of the scene that are outside of the snapshot will be de-saturated and slightly blurred."
|
||||
layout="topleft"
|
||||
left="10"
|
||||
top_pad="8"
|
||||
width="110"
|
||||
name="show_frame" />
|
||||
<check_box
|
||||
top_pad="8"
|
||||
enabled_control="FSSnapshotShowCaptureFrame"
|
||||
control_name="FSSnapshotShowGuides"
|
||||
label="Show Composition Guide"
|
||||
tool_tip="Show composition helper inside the snapshot frame."
|
||||
layout="topleft"
|
||||
left="10"
|
||||
width="110"
|
||||
name="show_guides" />
|
||||
<button
|
||||
enabled_control="FSSnapshotShowCaptureFrame"
|
||||
layout="topleft"
|
||||
left="226"
|
||||
top_delta="-20"
|
||||
width="25"
|
||||
height="25"
|
||||
label="#"
|
||||
font="SansSerifLarge"
|
||||
tool_tip="Open frame guide settings"
|
||||
name="guide_settings_btn">
|
||||
<button.commit_callback function="Floater.Show" parameter="snapshot_guide_settings" />
|
||||
</button>
|
||||
</panel>
|
||||
<view_border
|
||||
bevel_style="in"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
height="1"
|
||||
left="10"
|
||||
name="refresh_border"
|
||||
width="250"
|
||||
top_pad="14" />
|
||||
<button
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
|
|
@ -242,133 +268,155 @@
|
|||
type="string"
|
||||
word_wrap="true">
|
||||
</text_editor>
|
||||
<check_box
|
||||
follows="left|top"
|
||||
<panel
|
||||
height="90"
|
||||
width="250"
|
||||
visible="true"
|
||||
name="options_panel"
|
||||
top_pad="0"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
initial_value="false"
|
||||
label="Include location"
|
||||
name="add_location_cb"
|
||||
left="9"
|
||||
height="16"
|
||||
top_pad="8" />
|
||||
<check_box
|
||||
control_name="FSPrimfeedAddToPublicGallery"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
initial_value="false"
|
||||
label="Add to public gallery"
|
||||
name="primfeed_add_to_public_gallery"
|
||||
left="9"
|
||||
height="16"
|
||||
top_pad="8" />
|
||||
<button
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
height="16"
|
||||
image_pressed="Info_Press"
|
||||
image_unselected="Info_Over"
|
||||
name="info_btn_pub_gallery"
|
||||
right="-3"
|
||||
top_delta="-2"
|
||||
width="16"
|
||||
commit_callback.function="Primfeed.Info"
|
||||
commit_callback.parameter="https://docs.primfeed.com/featured-content/public-gallery"
|
||||
/>
|
||||
<check_box
|
||||
enabled_control="FSPrimfeedAddToPublicGallery"
|
||||
control_name="FSPrimfeedCommercialContent"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
initial_value="false"
|
||||
label="Commercial content"
|
||||
name="primfeed_commercial_content"
|
||||
left="9"
|
||||
height="16"
|
||||
top_pad="8" />
|
||||
<button
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
height="16"
|
||||
image_pressed="Info_Press"
|
||||
image_unselected="Info_Over"
|
||||
right="-3"
|
||||
top_delta="-2"
|
||||
name="info_btn_commercial_content"
|
||||
width="16"
|
||||
commit_callback.function="Primfeed.Info"
|
||||
commit_callback.parameter="https://docs.primfeed.com/legal/terms-of-service#commercial-content"
|
||||
/>
|
||||
<combo_box
|
||||
control_name="FSPrimfeedPhotoRating"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
top_pad="8"
|
||||
left="10"
|
||||
name="rating_combobox"
|
||||
tool_tip="Primfeed content rating"
|
||||
height="21"
|
||||
width="235">
|
||||
<combo_box.item
|
||||
label="General"
|
||||
name="GeneralRating"
|
||||
value="1" />
|
||||
<combo_box.item
|
||||
label="Moderate"
|
||||
name="ModerateRating"
|
||||
value="2" />
|
||||
<combo_box.item
|
||||
label="Adult"
|
||||
name="AdultRating"
|
||||
value="3" />
|
||||
<combo_box.item
|
||||
label="Adult+"
|
||||
name="AdultPlusRating"
|
||||
value="4" />
|
||||
</combo_box>
|
||||
<button
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
height="16"
|
||||
image_pressed="Info_Press"
|
||||
image_unselected="Info_Over"
|
||||
right="-3"
|
||||
name="info_btn_ratings"
|
||||
top_delta="0"
|
||||
width="16"
|
||||
commit_callback.function="Primfeed.Info"
|
||||
commit_callback.parameter="https://docs.primfeed.com/help-and-faq/maturity-ratings"
|
||||
/>
|
||||
<check_box
|
||||
control_name="FSPrimfeedOpenURLOnPost"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
initial_value="false"
|
||||
label="Open in browser after posting"
|
||||
tool_tip="Automatically open the Primfeed post in your web browser after posting."
|
||||
name="primfeed_open_url_on_post"
|
||||
left="9"
|
||||
height="16"
|
||||
top_pad="8" />
|
||||
<button
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
top_pad="8"
|
||||
left="10"
|
||||
height="23"
|
||||
label="Share"
|
||||
name="post_photo_btn"
|
||||
width="100">
|
||||
<button.commit_callback function="SocialSharing.SendPhoto" />
|
||||
</button>
|
||||
<button
|
||||
follows="right|top"
|
||||
layout="topleft"
|
||||
height="23"
|
||||
label="Cancel"
|
||||
name="cancel_photo_btn"
|
||||
right="-10"
|
||||
top_delta="0"
|
||||
width="100">
|
||||
<button.commit_callback function="SocialSharing.Cancel" />
|
||||
</button>
|
||||
</panel>
|
||||
left="10">
|
||||
<check_box
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
initial_value="false"
|
||||
label="Include location"
|
||||
name="add_location_cb"
|
||||
left="9"
|
||||
height="16"
|
||||
top_pad="4" />
|
||||
<check_box
|
||||
control_name="FSPrimfeedAddToPublicGallery"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
initial_value="false"
|
||||
label="Add to public gallery"
|
||||
name="primfeed_add_to_public_gallery"
|
||||
left="9"
|
||||
height="16"
|
||||
top_pad="4" />
|
||||
<button
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
height="16"
|
||||
image_pressed="Info_Press"
|
||||
image_unselected="Info_Over"
|
||||
name="info_btn_pub_gallery"
|
||||
right="-3"
|
||||
top_delta="-2"
|
||||
width="16"
|
||||
commit_callback.function="Primfeed.Info"
|
||||
commit_callback.parameter="https://docs.primfeed.com/featured-content/public-gallery"
|
||||
/>
|
||||
<check_box
|
||||
enabled_control="FSPrimfeedAddToPublicGallery"
|
||||
control_name="FSPrimfeedCommercialContent"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
initial_value="false"
|
||||
label="Commercial content"
|
||||
name="primfeed_commercial_content"
|
||||
left="9"
|
||||
height="16"
|
||||
top_pad="4" />
|
||||
<button
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
height="16"
|
||||
image_pressed="Info_Press"
|
||||
image_unselected="Info_Over"
|
||||
right="-3"
|
||||
top_delta="-2"
|
||||
name="info_btn_commercial_content"
|
||||
width="16"
|
||||
commit_callback.function="Primfeed.Info"
|
||||
commit_callback.parameter="https://docs.primfeed.com/legal/terms-of-service#commercial-content"
|
||||
/>
|
||||
<combo_box
|
||||
control_name="FSPrimfeedPhotoRating"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
top_pad="4"
|
||||
left="10"
|
||||
name="rating_combobox"
|
||||
tool_tip="Primfeed content rating"
|
||||
height="21"
|
||||
width="215">
|
||||
<combo_box.item
|
||||
label="General"
|
||||
name="GeneralRating"
|
||||
value="1" />
|
||||
<combo_box.item
|
||||
label="Moderate"
|
||||
name="ModerateRating"
|
||||
value="2" />
|
||||
<combo_box.item
|
||||
label="Adult"
|
||||
name="AdultRating"
|
||||
value="3" />
|
||||
<combo_box.item
|
||||
label="Adult+"
|
||||
name="AdultPlusRating"
|
||||
value="4" />
|
||||
</combo_box>
|
||||
<button
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
height="16"
|
||||
image_pressed="Info_Press"
|
||||
image_unselected="Info_Over"
|
||||
right="-3"
|
||||
name="info_btn_ratings"
|
||||
top_delta="0"
|
||||
width="16"
|
||||
commit_callback.function="Primfeed.Info"
|
||||
commit_callback.parameter="https://docs.primfeed.com/help-and-faq/maturity-ratings"
|
||||
/>
|
||||
</panel>
|
||||
<panel
|
||||
height="50"
|
||||
width="250"
|
||||
visible="true"
|
||||
name="options_panel"
|
||||
top_pad="0"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
right="-10"
|
||||
left="10">
|
||||
<check_box
|
||||
control_name="FSPrimfeedOpenURLOnPost"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
initial_value="false"
|
||||
label="Open in browser after posting"
|
||||
tool_tip="Automatically open the Primfeed post in your web browser after posting."
|
||||
name="primfeed_open_url_on_post"
|
||||
left="0"
|
||||
height="16"
|
||||
top="0"/>
|
||||
<button
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
top_pad="4"
|
||||
left="0"
|
||||
height="23"
|
||||
label="Share"
|
||||
name="post_photo_btn"
|
||||
width="100">
|
||||
<button.commit_callback function="SocialSharing.SendPhoto" />
|
||||
</button>
|
||||
<button
|
||||
follows="right|top"
|
||||
layout="topleft"
|
||||
height="23"
|
||||
label="Cancel"
|
||||
name="cancel_photo_btn"
|
||||
right="-10"
|
||||
top_delta="0"
|
||||
width="100">
|
||||
<button.commit_callback function="SocialSharing.Cancel" />
|
||||
</button>
|
||||
</panel>
|
||||
</panel>
|
||||
|
|
|
|||
Loading…
Reference in New Issue