Generated reference › API — ICoreBlocks/ICoreStudio/StudioObjects/TitleBars
kind: generated#api#icoreblocks-icorestudio-studioobjects-titlebars

API — ICoreBlocks/ICoreStudio/StudioObjects/TitleBars

The public contract of 2 header(s) under src/ICoreBlocks/ICoreStudio/StudioObjects/TitleBars — 4 class/struct definition(s), 17 declaration(s). Each section shows the header's banner and its public (and protected-virtual) surface exactly as the file writes it.

HeaderDefinesDeclarationsBases
ICoreRailChrome.hICoreRailPanel, ICoreCaptionToolBar, ICoreRailCaptionJoin14public ICoreWidget; public ICoreToolBar; public ICoreWidget
ICoreStudioTitleBars.hICoreStudioTitleBars3—

ICoreRailChrome.h#

src/ICoreBlocks/ICoreStudio/StudioObjects/TitleBars/ICoreRailChrome.h

The editor window's chrome, for the studio's OTHER windows (A10.86, A10.87).

The editor reads as one piece: a flush left rail (ICoreLeftFixedPanel) whose gradient the caption strip continues upward, a concave fillet where the rail meets the caption, and the rail's rim running on under the caption to the window's right edge, with the caption's controls sitting in tinted pills. A window with a side panel of its own -- the chart window's properties panel, the ICore Script IDE's explorer -- is dressed the same way from these parts:

ICoreRailPanel the rail: a Panel dressed exactly as the editor's. ICoreCaptionToolBar a pill for controls that ride in the caption. ICoreRailCaptionJoin the fillet and the rim under the caption. ICoreStudioTitleBars::createRailTitleBar() the strip continuing the rail.

ICoreRailPanel#

ICoreRailChrome.h:33 · class · bases public ICoreWidget · 5 declaration(s)

A side panel dressed as the editor's left rail: square, flush against the window's left edge, the caption and the bottom; the rail's gradient fill and border; and only its RIGHT edge stroked, in th...

class ICoreRailPanel : public ICoreWidget {
public:
    explicit ICoreRailPanel(ICoreWidget* parent = nullptr);

    // The same dress for a Panel built by a class that cannot derive from this
    // one. `panel` must be a `Surface::Panel`. Its border colour is its own
    // borderColor(): a class dressed this way overrides it with rimColor(), or
    // its edge will not match the fillet and the rim that continue it.
    static void dress(ICoreWidget* panel);

    // The rail's rim: what ICoreLeftFixedPanel::borderColor() answers, read
    // from the active theme.
    [[nodiscard]] static ICoreColor rimColor();

    ~ICoreRailPanel() override;

protected:
    ICoreColor borderColor() const override;
};
};

ICoreCaptionToolBar#

ICoreRailChrome.h:58 · class · bases public ICoreToolBar · 3 declaration(s)

A tool bar for controls that ride in a caption strip: 36 high, the pill the editor's title row wears -- the panel's own raised pill, and under the dark theme the search box's resting colour (the ed...

class ICoreCaptionToolBar : public ICoreToolBar {
public:
    // The height every pill in a caption row takes, which is the editor's
    // title row's (ICoreTopFixedPanel's kTitleRowHeight).
    static constexpr int kHeight = 36;

    explicit ICoreCaptionToolBar(ICoreNativeWidget* parent = nullptr);
    ~ICoreCaptionToolBar() override;

protected:
    ICoreColor fillColor() const override;
};
};

ICoreRailCaptionJoin#

ICoreRailChrome.h:84 · class · final · bases public ICoreWidget · pImpl · 6 declaration(s)

The fillet where a rail meets the caption, and the rail's rim running on along the caption's lower edge to the window's right edge -- the editor's RailTitleBarFillet and TitleBarGapBorder, for one ...

class ICoreRailCaptionJoin final : public ICoreWidget {
public:
    static constexpr int kClearance = 10;

    ICoreRailCaptionJoin(ICoreWidget* root, ICoreWidget* rail);

    void refresh();

    ~ICoreRailCaptionJoin() override;

protected:
    void paintContent(ICorePainter& painter) override;
    void parentResized(const ICoreSizeF& newParentSize) override;
    void watchedResized(ICoreNativeWidget* watched, const ICoreSizeF& newSize) override;

private:
    class Impl;                    // the two-line residue; state lives here
    std::unique_ptr<Impl> impl;
};

ICoreStudioTitleBars.h#

src/ICoreBlocks/ICoreStudio/StudioObjects/TitleBars/ICoreStudioTitleBars.h

ICoreStudioTitleBars -- ICoreBlocks' own caption strip, one design per platform, registered with ICoreTitleBarProvider so that every decorated window and dialog the studio opens wears it (W10.125).

Each design keeps the platform's caption BUTTONS exactly where users expect them and fills the rest of the strip with the active ICoreTheme's title-bar surface. The strips are EMPTY for now -- no mark, no title -- by the owner's ruling of 2026-09-22.

Windows -- 48 DIPs, Windows' tall caption; the DWM minimise/maximise/close (with snap layouts) on the right, recoloured to the theme. macOS -- a unified titlebar: 38 points for a window and 28 for a dialog, the traffic lights on the left, a hairline under the strip. Linux -- a GNOME header bar: 46 pixels, the desktop's own window

ICoreStudioTitleBars#

ICoreStudioTitleBars.h:31 · class · 3 declaration(s)

class ICoreStudioTitleBars {
public:
    ICoreStudioTitleBars() = delete;

    // Register the three designs. Idempotent; call once at startup, before
    // the first window is shown.
    static void install();

    // W10.126. The EDITOR window's bar: the same strip, carrying the upper row
    // of `surface`'s top fixed panel -- menu-strip toggle, back/up, navigation,
    // import/export, templates, account and search -- between the platform's
    // caption buttons. The row's tool bars take clicks; the gaps between them
    // drag the window. The top panel shrinks to the row it has left.
    //
    // Installed on `window` explicitly, so the provider's empty strip is not
    // asked for. Does nothing where this build cannot host a custom bar, which
    // leaves the row in the panel.
    static void installEditorTitleBar(ICoreWindow* window, ICoreStudioSurface* surface);

    // A10.86, A10.87. The bar of a window dressed like the editor around a rail
    // of its own (ICoreRailChrome.h) -- the chart window, the ICore Script IDE.
    // The same strip, carrying `row` between the platform's caption buttons,
    // centred for a row `rowHeight` tall; `controls` take clicks and every
    // other pixel drags the window. Over `rail` the strip paints the rail's own
    // gradient continued upward, and past it the ramp's deep end, so the rail
    // and the caption read as one piece; with the rail hidden the whole strip
    // takes that deep end.
    //
    // Returns a NEW bar for the caller to install (ICoreWindow::setTitleBar, or
    // ICoreWidget::setTopLevelTitleBar for a promoted widget), or nullptr where
    // this build cannot host a custom bar (ICoreTitleBarProvider::isSupported()
    // is false) -- `row` is then left untouched. Ask that before taking `row`
    // out of its layout.
    [[nodiscard]] static ICoreTitleBar* createRailTitleBar(ICoreWidget* rail, ICoreWidget* row,
                                                           const std::vector<ICoreWidget*>& controls,
                                                           int rowHeight);

    // The editor bar's ground, for any strip that runs between it and
    // `surface`'s two fixed panels -- the main menu strip, when it is shown.
    // Paints all of `strip` with the panels' gradients continued upward, the
    // same ramps the editor bar paints, so the bar, the strip and both panels
    // read as one piece. False, having painted nothing, when `surface` has no
    // top fixed panel to continue: the caller paints its own ground then.
    static bool paintEditorGround(ICorePainter& painter, const ICoreWidget& strip,
                                  ICoreStudioSurface* surface);

    // The same for a window dressed around a rail (createRailTitleBar): paints
    // all of `strip` with `rail`'s gradient continued upward, as that bar does
    // -- the Script IDE's menu strip, when shown. False, having painted
    // nothing, when `rail` is null.
    static bool paintRailGround(ICorePainter& painter, const ICoreWidget& strip,
                                const ICoreWidget* rail);
};
};