void CScroll::SetVisibleRatio(float value) { if ( value < 0.1 ) value = 0.1f; if ( value > 1.0 ) value = 1.0f; m_visibleRatio = value; AdjustGlint(); }
void CScroll::SetVisibleValue(float value) { if ( value < 0.0 ) value = 0.0f; if ( value > 1.0 ) value = 1.0f; m_visibleValue = value; AdjustGlint(); }
void CSlider::SetVisibleValue(float value) { value = (value-m_min)/(m_max-m_min); if ( value < 0.0 ) value = 0.0f; if ( value > 1.0 ) value = 1.0f; m_visibleValue = value; AdjustGlint(); }
void CScroll::MoveAdjust() { CButton* pc; Math::Point pos, dim; if ( m_dim.y < m_dim.x*2.0f ) // very short lift? { delete m_buttonUp; m_buttonUp = 0; delete m_buttonDown; m_buttonDown = 0; } else { if ( m_buttonUp == 0 ) { m_buttonUp = new CButton(); pc = m_buttonUp; pc->Create(Math::Point(0.0f, 0.0f), Math::Point(0.0f, 0.0f), 49, EVENT_NULL); pc->SetRepeat(true); m_eventUp = pc->GetEventType(); } if ( m_buttonDown == 0 ) { m_buttonDown = new CButton(); pc = m_buttonDown; pc->Create(Math::Point(0.0f, 0.0f), Math::Point(0.0f, 0.0f), 50, EVENT_NULL); pc->SetRepeat(true); m_eventDown = pc->GetEventType(); } } if ( m_buttonUp != 0 ) { pos.x = m_pos.x; pos.y = m_pos.y+m_dim.y-m_dim.x/0.75f; dim.x = m_dim.x; dim.y = m_dim.x/0.75f; m_buttonUp->SetPos(pos); m_buttonUp->SetDim(dim); } if ( m_buttonDown != 0 ) { pos.x = m_pos.x; pos.y = m_pos.y; dim.x = m_dim.x; dim.y = m_dim.x/0.75f; m_buttonDown->SetPos(pos); m_buttonDown->SetDim(dim); } AdjustGlint(); }
void CScroll::MoveAdjust() { Math::Point pos, dim; if ( m_dim.y < m_dim.x*2.0f ) // very short lift? { m_buttonUp.reset(); m_buttonDown.reset(); } else { if (m_buttonUp == nullptr) { m_buttonUp = MakeUnique<CButton>(); m_buttonUp->Create(Math::Point(0.0f, 0.0f), Math::Point(0.0f, 0.0f), 49, EVENT_NULL); m_buttonUp->SetRepeat(true); } if (m_buttonDown == nullptr) { m_buttonDown = MakeUnique<CButton>(); m_buttonDown->Create(Math::Point(0.0f, 0.0f), Math::Point(0.0f, 0.0f), 50, EVENT_NULL); m_buttonDown->SetRepeat(true); } } if (m_buttonUp != nullptr) { pos.x = m_pos.x; pos.y = m_pos.y+m_dim.y-m_dim.x/0.75f; dim.x = m_dim.x; dim.y = m_dim.x/0.75f; m_buttonUp->SetPos(pos); m_buttonUp->SetDim(dim); } if (m_buttonDown != nullptr) { pos.x = m_pos.x; pos.y = m_pos.y; dim.x = m_dim.x; dim.y = m_dim.x/0.75f; m_buttonDown->SetPos(pos); m_buttonDown->SetDim(dim); } AdjustGlint(); }
bool CScroll::EventProcess(const Event &event) { CControl::EventProcess(event); if (m_buttonUp != nullptr && !m_bCapture) { if ( !m_buttonUp->EventProcess(event) ) return false; } if (m_buttonDown != nullptr && !m_bCapture) { if ( !m_buttonDown->EventProcess(event) ) return false; } if (m_buttonUp != nullptr && event.type == m_buttonUp->GetEventType() && m_step > 0.0f ) { m_visibleValue -= m_step; if ( m_visibleValue < 0.0f ) m_visibleValue = 0.0f; AdjustGlint(); m_event->AddEvent(Event(m_eventType)); } if (m_buttonDown != nullptr && event.type == m_buttonDown->GetEventType() && m_step > 0.0f ) { m_visibleValue += m_step; if ( m_visibleValue > 1.0f ) m_visibleValue = 1.0f; AdjustGlint(); m_event->AddEvent(Event(m_eventType)); } float hButton = (m_buttonUp != nullptr) ? (m_dim.x/0.75f) : 0.0f; if (event.type == EVENT_MOUSE_BUTTON_DOWN && event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT && (m_state & STATE_VISIBLE) && (m_state & STATE_ENABLE) ) { if ( CControl::Detect(event.mousePos) ) { Math::Point pos, dim; pos.y = m_pos.y+hButton; dim.y = m_dim.y-hButton*2.0f; pos.y += dim.y*(1.0f-m_visibleRatio)*(1.0f-m_visibleValue); dim.y *= m_visibleRatio; if ( event.mousePos.y < pos.y || event.mousePos.y > pos.y+dim.y ) // click outside cabin? { float h = (m_dim.y-hButton*2.0f)*(1.0f-m_visibleRatio); float value = 1.0f-(event.mousePos.y-(m_pos.y+hButton+dim.y*0.5f))/h; if ( value < 0.0f ) value = 0.0f; if ( value > 1.0f ) value = 1.0f; m_visibleValue = value; AdjustGlint(); m_event->AddEvent(Event(m_eventType)); } m_bCapture = true; m_pressPos = event.mousePos; m_pressValue = m_visibleValue; } } if ( event.type == EVENT_MOUSE_MOVE && m_bCapture ) { float h = (m_dim.y-hButton*2.0f)*(1.0f-m_visibleRatio); if ( h != 0 ) { float value = m_pressValue - (event.mousePos.y-m_pressPos.y)/h; if ( value < 0.0f ) value = 0.0f; if ( value > 1.0f ) value = 1.0f; if ( value != m_visibleValue ) { m_visibleValue = value; AdjustGlint(); m_event->AddEvent(Event(m_eventType)); } } } if (event.type == EVENT_MOUSE_BUTTON_UP && event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT && m_bCapture) { m_bCapture = false; } if (event.type == EVENT_MOUSE_WHEEL && Detect(event.mousePos)) { auto data = event.GetData<MouseWheelEventData>(); if (data->y > 0) { if (m_buttonUp != nullptr) { for (int i = 0; i < data->y; i++) m_event->AddEvent(Event(m_buttonUp->GetEventType())); } } else { if (m_buttonDown != nullptr) { for (int i = 0; i < -(data->y); i++) m_event->AddEvent(Event(m_buttonDown->GetEventType())); } } return false; } return true; }
bool CScroll::EventProcess(const Event &event) { Math::Point pos, dim; float hButton, h, value; CControl::EventProcess(event); if ( m_buttonUp != 0 && !m_bCapture ) { if ( !m_buttonUp->EventProcess(event) ) return false; } if ( m_buttonDown != 0 && !m_bCapture ) { if ( !m_buttonDown->EventProcess(event) ) return false; } if ( event.type == m_eventUp && m_step > 0.0f ) { m_visibleValue -= m_step; if ( m_visibleValue < 0.0f ) m_visibleValue = 0.0f; AdjustGlint(); Event newEvent = event; newEvent.type = m_eventType; m_event->AddEvent(newEvent); } if ( event.type == m_eventDown && m_step > 0.0f ) { m_visibleValue += m_step; if ( m_visibleValue > 1.0f ) m_visibleValue = 1.0f; AdjustGlint(); Event newEvent = event; newEvent.type = m_eventType; m_event->AddEvent(newEvent); } hButton = m_buttonUp?m_dim.x/0.75f:0.0f; if ( event.type == EVENT_MOUSE_BUTTON_DOWN && event.mouseButton.button == MOUSE_BUTTON_LEFT && (m_state & STATE_VISIBLE) && (m_state & STATE_ENABLE) ) { if ( CControl::Detect(event.mousePos) ) { pos.y = m_pos.y+hButton; dim.y = m_dim.y-hButton*2.0f; pos.y += dim.y*(1.0f-m_visibleRatio)*(1.0f-m_visibleValue); dim.y *= m_visibleRatio; if ( event.mousePos.y < pos.y || event.mousePos.y > pos.y+dim.y ) // click outside cabin? { h = (m_dim.y-hButton*2.0f)*(1.0f-m_visibleRatio); value = 1.0f-(event.mousePos.y-(m_pos.y+hButton+dim.y*0.5f))/h; if ( value < 0.0f ) value = 0.0f; if ( value > 1.0f ) value = 1.0f; m_visibleValue = value; AdjustGlint(); Event newEvent = event; newEvent.type = m_eventType; m_event->AddEvent(newEvent); } m_bCapture = true; m_pressPos = event.mousePos; m_pressValue = m_visibleValue; } } if ( event.type == EVENT_MOUSE_MOVE && m_bCapture ) { h = (m_dim.y-hButton*2.0f)*(1.0f-m_visibleRatio); if ( h != 0 ) { value = m_pressValue - (event.mousePos.y-m_pressPos.y)/h; if ( value < 0.0f ) value = 0.0f; if ( value > 1.0f ) value = 1.0f; if ( value != m_visibleValue ) { m_visibleValue = value; AdjustGlint(); Event newEvent = event; newEvent.type = m_eventType; m_event->AddEvent(newEvent); } } } if ( event.type == EVENT_MOUSE_BUTTON_UP && event.mouseButton.button == MOUSE_BUTTON_LEFT && m_bCapture ) { m_bCapture = false; } if (event.type == EVENT_MOUSE_WHEEL && event.mouseWheel.dir == WHEEL_UP && Detect(event.mousePos) && m_buttonUp != 0) { Event newEvent = event; newEvent.type = m_buttonUp->GetEventType(); m_event->AddEvent(newEvent); } if (event.type == EVENT_MOUSE_WHEEL && event.mouseWheel.dir == WHEEL_DOWN && Detect(event.mousePos) && m_buttonDown != 0) { Event newEvent = event; newEvent.type = m_buttonDown->GetEventType(); m_event->AddEvent(newEvent); } return true; }
void CSlider::MoveAdjust() { Math::Point pos, dim; m_bHoriz = ( m_dim.x > m_dim.y ); if ( ( m_bHoriz && m_dim.x < m_dim.y*4.0f) || (!m_bHoriz && m_dim.y < m_dim.x*4.0f) ) // very short slider? { m_buttonLeft.reset(); m_buttonRight.reset(); m_marginButton = 0.0f; } else { if (m_buttonLeft == nullptr) { m_buttonLeft = MakeUnique<CButton>(); m_buttonLeft->Create(Math::Point(0.0f, 0.0f), Math::Point(0.0f, 0.0f), m_bHoriz?55:49, EVENT_NULL); // </^ m_buttonLeft->SetRepeat(true); if ( m_state & STATE_SHADOW ) m_buttonLeft->SetState(STATE_SHADOW); } if (m_buttonRight == nullptr) { m_buttonRight = MakeUnique<CButton>(); m_buttonRight->Create(Math::Point(0.0f, 0.0f), Math::Point(0.0f, 0.0f), m_bHoriz?48:50, EVENT_NULL); // >/v m_buttonRight->SetRepeat(true); if ( m_state & STATE_SHADOW ) m_buttonRight->SetState(STATE_SHADOW); } m_marginButton = m_bHoriz?(m_dim.y*0.75f):(m_dim.x/0.75f); } if (m_buttonLeft != nullptr) { if ( m_bHoriz ) { pos.x = m_pos.x; pos.y = m_pos.y; dim.x = m_dim.y*0.75f; dim.y = m_dim.y; } else { pos.x = m_pos.x; pos.y = m_pos.y+m_dim.y-m_dim.x/0.75f; dim.x = m_dim.x; dim.y = m_dim.x/0.75f; } m_buttonLeft->SetPos(pos); m_buttonLeft->SetDim(dim); } if (m_buttonRight != nullptr) { if ( m_bHoriz ) { pos.x = m_pos.x+m_dim.x-m_dim.y*0.75f; pos.y = m_pos.y; dim.x = m_dim.y*0.75f; dim.y = m_dim.y; } else { pos.x = m_pos.x; pos.y = m_pos.y; dim.x = m_dim.x; dim.y = m_dim.x/0.75f; } m_buttonRight->SetPos(pos); m_buttonRight->SetDim(dim); } AdjustGlint(); }
bool CSlider::EventProcess(const Event &event) { Math::Point pos, dim; float value; if ( (m_state & STATE_VISIBLE) == 0 ) return true; CControl::EventProcess(event); if (m_buttonLeft != nullptr && !m_bCapture) { if ( !m_buttonLeft->EventProcess(event) ) return false; } if (m_buttonRight != nullptr && !m_bCapture) { if ( !m_buttonRight->EventProcess(event) ) return false; } if (m_buttonLeft != nullptr && event.type == m_buttonLeft->GetEventType() && m_step > 0.0f ) { m_visibleValue -= m_bHoriz?m_step:-m_step; if ( m_visibleValue < 0.0f ) m_visibleValue = 0.0f; if ( m_visibleValue > 1.0f ) m_visibleValue = 1.0f; AdjustGlint(); m_event->AddEvent(Event(m_eventType)); } if (m_buttonRight != nullptr && event.type == m_buttonRight->GetEventType() && m_step > 0.0f ) { m_visibleValue += m_bHoriz?m_step:-m_step; if ( m_visibleValue < 0.0f ) m_visibleValue = 0.0f; if ( m_visibleValue > 1.0f ) m_visibleValue = 1.0f; AdjustGlint(); m_event->AddEvent(Event(m_eventType)); } if (event.type == EVENT_MOUSE_BUTTON_DOWN && event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT && (m_state & STATE_VISIBLE) && (m_state & STATE_ENABLE)) { if ( CControl::Detect(event.mousePos) ) { if ( m_bHoriz ) { pos.x = m_pos.x+m_marginButton; dim.x = m_dim.x-m_marginButton*2.0f; value = (event.mousePos.x-pos.x-CURSOR_WIDTH/2.0f); value /= (dim.x-CURSOR_WIDTH); } else { pos.y = m_pos.y+m_marginButton; dim.y = m_dim.y-m_marginButton*2.0f; value = (event.mousePos.y-pos.y-CURSOR_WIDTH/2.0f); value /= (dim.y-CURSOR_WIDTH); } if ( value < 0.0f ) value = 0.0f; if ( value > 1.0f ) value = 1.0f; m_visibleValue = value; AdjustGlint(); m_event->AddEvent(Event(m_eventType)); m_bCapture = true; m_pressPos = event.mousePos; m_pressValue = m_visibleValue; } } if ( event.type == EVENT_MOUSE_MOVE && m_bCapture ) { if ( m_bHoriz ) { pos.x = m_pos.x+m_marginButton; dim.x = m_dim.x-m_marginButton*2.0f; value = (event.mousePos.x-pos.x-CURSOR_WIDTH/2.0f); value /= (dim.x-CURSOR_WIDTH); } else { pos.y = m_pos.y+m_marginButton; dim.y = m_dim.y-m_marginButton*2.0f; value = (event.mousePos.y-pos.y-CURSOR_WIDTH/2.0f); value /= (dim.y-CURSOR_WIDTH); } if ( value < 0.0f ) value = 0.0f; if ( value > 1.0f ) value = 1.0f; if ( value != m_visibleValue ) { m_visibleValue = value; AdjustGlint(); m_event->AddEvent(Event(m_eventType)); } } if (event.type == EVENT_MOUSE_BUTTON_UP && event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_LEFT && m_bCapture) { m_bCapture = false; } if (event.type == EVENT_MOUSE_WHEEL && event.GetData<MouseWheelEventData>()->dir == WHEEL_UP && Detect(event.mousePos) && m_buttonLeft != nullptr) { m_event->AddEvent(Event(m_buttonLeft->GetEventType())); } if (event.type == EVENT_MOUSE_WHEEL && event.GetData<MouseWheelEventData>()->dir == WHEEL_DOWN && Detect(event.mousePos) && m_buttonRight != nullptr) { m_event->AddEvent(Event(m_buttonRight->GetEventType())); } return true; }