1
0
mirror of https://github.com/luanti-org/luanti.git synced 2025-11-09 19:45:21 +01:00
Files
luanti/src/gui/guiEditBoxWithScrollbar.cpp
2025-09-20 13:44:40 +02:00

100 lines
2.3 KiB
C++

// Copyright (C) 2002-2012 Nikolaus Gebhardt
// Modified by Mustapha T.
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#include "guiEditBoxWithScrollbar.h"
#include "IGUISkin.h"
#include "IGUIEnvironment.h"
#include "IGUIFont.h"
#include "rect.h"
#include "guiScrollBar.h"
#include "porting.h"
#include "Keycodes.h"
using namespace gui;
//! constructor
GUIEditBoxWithScrollBar::GUIEditBoxWithScrollBar(const wchar_t* text, bool border,
IGUIEnvironment* environment, IGUIElement* parent, s32 id,
const core::rect<s32>& rectangle, ISimpleTextureSource *tsrc,
bool writable, bool has_vscrollbar)
: CGUIEditBox(text, border, environment, parent, id, rectangle),
m_bg_color_used(false), m_tsrc(tsrc)
{
if (has_vscrollbar) {
createVScrollBar();
calculateFrameRect();
breakText();
calculateScrollPos();
}
setWritable(writable);
}
//! draws the element and its children
void GUIEditBoxWithScrollBar::draw()
{
if (!IsVisible)
return;
IGUISkin *skin = Environment->getSkin();
if (!skin)
return;
video::SColor default_bg_color;
if (m_bg_color_used) {
OverrideBgColor = m_bg_color;
} else if (IsWritable) {
OverrideBgColor = skin->getColor(EGDC_WINDOW);
} else {
// Transparent
OverrideBgColor = 0x00000001;
}
CGUIEditBox::draw();
}
//! create a vertical scroll bar
void GUIEditBoxWithScrollBar::createVScrollBar()
{
IGUISkin *skin = 0;
if (Environment)
skin = Environment->getSkin();
if (!skin || VScrollBar)
return;
s32 fontHeight = 1;
if (OverrideFont) {
fontHeight = OverrideFont->getDimension(L"Ay").Height;
} else {
IGUIFont *font;
if ((font = skin->getFont())) {
fontHeight = font->getDimension(L"Ay").Height;
}
}
VScrollBarWidth = skin->getSize(gui::EGDS_SCROLLBAR_SIZE);
core::rect<s32> scrollbarrect = RelativeRect;
scrollbarrect.UpperLeftCorner.X += RelativeRect.getWidth() - VScrollBarWidth;
VScrollBar = new GUIScrollBar(Environment, getParent(), -1,
scrollbarrect, false, true, m_tsrc);
VScrollBar->setVisible(false);
VScrollBar->setSmallStep(3 * fontHeight);
VScrollBar->setLargeStep(10 * fontHeight);
}
//! Change the background color
void GUIEditBoxWithScrollBar::setBackgroundColor(const video::SColor &bg_color)
{
m_bg_color = bg_color;
m_bg_color_used = true;
}