//------------------------------------------------------------------------------
// ObjectWindows
// Copyright (c) 1998 by Yura Bidus, All Rights Reserved
//
/// \file
/// Implementation of class TFlatScroller.
//------------------------------------------------------------------------------
#include <owl/pch.h>
#include <owl/fscroll.h>
#include <owl/window.h>
namespace owl {
OWL_DIAGINFO;
namespace
{
SCROLLINFO FlatSB_GetScrollInfo_(const TWindow* w, int bar, uint mask = SIF_ALL)
{
PRECONDITION(w && w->GetHandle());
SCROLLINFO i = {sizeof(SCROLLINFO), mask};
bool r = FlatSB_GetScrollInfo(w->GetHandle(), bar, &i);
CHECK(r); InUse(r);
return i;
}
int FlatSB_SetScrollInfo_(const TWindow* w, int bar, SCROLLINFO& i, bool redraw)
{
PRECONDITION(w && w->GetHandle());
return FlatSB_SetScrollInfo(w->GetHandle(), bar, &i, redraw);
}
} // namespace
//
// constructs a TScroller object
//
TFlatScroller::TFlatScroller(TWindow* window,
int xUnit,
int yUnit,
long xRange,
long yRange)
:
TScroller(window,xUnit,yUnit,xRange,yRange)
{
}
//
// destructs a TFlatScroller object
//
TFlatScroller::~TFlatScroller()
{
}
void
TFlatScroller::SetScrollPage(int bar, int page, bool redraw)
{
SCROLLINFO i = {sizeof(SCROLLINFO), SIF_PAGE | SIF_DISABLENOSCROLL, 0, 0, static_cast<UINT>(page)};
FlatSB_SetScrollInfo_(Window, bar, i, redraw);
}
int
TFlatScroller::GetScrollPage(int bar) const
{
return FlatSB_GetScrollInfo_(Window, bar, SIF_PAGE).nPage;
}
//
void
TFlatScroller::GetScrollRange(int bar, int& minPos, int& maxPos) const
{
SCROLLINFO i = FlatSB_GetScrollInfo_(Window, bar, SIF_RANGE);
minPos = i.nMin;
maxPos = i.nMax;
}
//
void
TFlatScroller::SetScrollRange(int bar, int minPos, int maxPos, bool redraw)
{
SCROLLINFO i = {sizeof(SCROLLINFO), SIF_RANGE | SIF_DISABLENOSCROLL, minPos, maxPos};
FlatSB_SetScrollInfo_(Window, bar, i, redraw);
}
//
int
TFlatScroller::GetScrollPos(int bar) const
{
return FlatSB_GetScrollInfo_(Window, bar, SIF_POS).nPos;
}
//
int
TFlatScroller::SetScrollPos(int bar, int pos, bool redraw)
{
SCROLLINFO i = {sizeof(SCROLLINFO), SIF_POS | SIF_DISABLENOSCROLL, 0, 0, 0, pos};
return FlatSB_SetScrollInfo_(Window, bar, i, redraw);
}
//
int
TFlatScroller::GetScrollTrackPos(int bar) const
{
return FlatSB_GetScrollInfo_(Window, bar, SIF_TRACKPOS).nTrackPos;
}
IMPLEMENT_STREAMABLE1(TFlatScroller, TScroller);
#if OWL_PERSISTENT_STREAMS
//
// reads an instance of TFlatScroller from the passed ipstream
//
void*
TFlatScroller::Streamer::Read(ipstream& is, uint32 /*version*/) const
{
ReadBaseObject((TScroller*)GetObject(), is);
return GetObject();
}
//
// writes the TFlatScroller to the passed opstream
//
void
TFlatScroller::Streamer::Write(opstream& os) const
{
WriteBaseObject((TScroller*)GetObject(), os);
}
#endif
} // OWL namespace
/* ========================================================================== */
↑ V1004 The 'w' pointer was used unsafely after it was verified against nullptr. Check lines: 21, 23.
↑ V1004 The 'w' pointer was used unsafely after it was verified against nullptr. Check lines: 30, 31.