Sub Process_Globals
Private cScaleX, cScaleY, cScaleDS As Double
Private cRefWidth As Int
Private cRefHeight As Int
Private cRefScale As Double
End Sub
Public Sub Initialize
Dim DeviceScale As Double
DeviceScale = 100dip / 100
cScaleX = (100%x/DeviceScale)/(cRefWidth/cRefScale)
cScaleY = (100%y/DeviceScale)/(cRefHeight/cRefScale)
cScaleDS = Sqrt(Power(cScaleX, 2) + Power(cScaleY, 2))
cScaleDS = 1 + ((100%x + 100%y) / DeviceScale / ((cRefWidth + cRefHeight - 50 * cRefScale) / cRefScale) - 1)
End Sub
Public Sub ScaleView(v As View)
If IsActivity(v) Then
Return
End If
v.Left = v.Left * cScaleX
v.Top = v.Top * cScaleY
If IsPanel(v) Then
Dim pnl As Panel
pnl = v
If pnl.Background Is BitmapDrawable Then
If v.Width > 0 Then
v.Width = v.Width * cScaleX
End If
If v.Height > 0 Then
v.Height = v.Height * cScaleY
End If
Else
If v.Width > 0 Then
v.Width = v.Width * cScaleX
End If
If v.Height > 0 Then
v.Height = v.Height * cScaleY
End If
End If
ScaleAll(pnl, False)
Else If v Is ImageView Then
If v.Width > 0 Then
v.Width = v.Width * cScaleX
End If
If v.Height > 0 Then
v.Height = v.Height * cScaleY
End If
Else
If v.Width > 0 Then
v.Width = v.Width * cScaleX
End If
If v.Height > 0 Then
v.Height = v.Height * cScaleY
End If
End If
If v Is Label Then
Dim lbl As Label = v
If cScaleX<cScaleY Then
lbl.TextSize = lbl.TextSize * cScaleX
Else
lbl.TextSize = lbl.TextSize * cScaleY
End If
End If
If GetType(v) = "anywheresoftware.b4a.objects.ScrollViewWrapper$MyScrollView" Then
Dim scv As ScrollView
scv = v
ScaleAll(scv.Panel, False)
scv.Panel.Height = scv.Panel.Height * cScaleY
Else If GetType(v) = "anywheresoftware.b4a.objects.HorizontalScrollViewWrapper$MyHScrollView" Then
Dim hcv As HorizontalScrollView
hcv = v
ScaleAll(hcv.Panel, False)
hcv.Panel.Width = hcv.Panel.Width * cScaleX
Else If GetType(v) = "flm.b4a.scrollview2d.ScrollView2DWrapper$MyScrollView" Then
Else If GetType(v) = "anywheresoftware.b4a.objects.ListViewWrapper$SimpleListView" Then
Dim ltv As ListView
ltv = v
ScaleView(ltv.SingleLineLayout.Label)
ltv.SingleLineLayout.ItemHeight = ltv.SingleLineLayout.ItemHeight * cScaleY
ScaleView(ltv.TwoLinesLayout.Label)
ScaleView(ltv.TwoLinesLayout.SecondLabel)
ltv.TwoLinesLayout.ItemHeight = ltv.TwoLinesLayout.ItemHeight * cScaleY
ScaleView(ltv.TwoLinesAndBitmap.Label)
ScaleView(ltv.TwoLinesAndBitmap.SecondLabel)
ScaleView(ltv.TwoLinesAndBitmap.ImageView)
ltv.TwoLinesAndBitmap.ItemHeight = ltv.TwoLinesAndBitmap.ItemHeight * cScaleY
ltv.TwoLinesAndBitmap.ImageView.Top = (ltv.TwoLinesAndBitmap.ItemHeight - ltv.TwoLinesAndBitmap.ImageView.Height) / 2
Else If GetType(v) = "anywheresoftware.b4a.objects.SpinnerWrapper$B4ASpinner" Then
Dim spn As Spinner
spn = v
If cScaleX<cScaleY Then
spn.TextSize = spn.TextSize * cScaleX
Else
spn.TextSize = spn.TextSize * cScaleY
End If
End If
End Sub
Public Sub ScaleAll(pnl As Panel, FirstTime As Boolean)
Dim I As Int
If IsPanel(pnl) And FirstTime = True Then
ScaleView(pnl)
Else
For I = 0 To pnl.NumberOfViews - 1
Dim v As View
v = pnl.GetView(I)
ScaleView(v)
Next
End If
End Sub
Public Sub ScaleAllX(pnl As Panel, FirstTime As Boolean)
Dim I As Int
If IsPanel(pnl) And FirstTime = True Then
ScaleViewX(pnl)
Else
For I = 0 To pnl.NumberOfViews - 1
Dim v As View
v = pnl.GetView(I)
ScaleViewX(v)
Next
End If
End Sub
Public Sub ScaleViewX(v As View)
If IsActivity(v) Then
Return
End If
v.Left = v.Left * cScaleX
v.Top = v.Top * cScaleX
If IsPanel(v) Then
Dim pnl As Panel
pnl = v
If v.Width > 0 Then
v.Width = v.Width * cScaleX
End If
If v.Height > 0 Then
v.Height = v.Height * cScaleX
End If
ScaleAllX(pnl, False)
Else
If v.Width > 0 Then
v.Width = v.Width * cScaleX
End If
If v.Height > 0 Then
v.Height = v.Height * cScaleX
End If
End If
If v Is Label Then
Dim lbl As Label = v
If cScaleX<cScaleY Then
lbl.TextSize = lbl.TextSize * cScaleX
Else
lbl.TextSize = lbl.TextSize * cScaleY
End If
End If
If GetType(v) = "anywheresoftware.b4a.objects.ScrollViewWrapper$MyScrollView" Then
Dim scv As ScrollView
scv = v
ScaleAllX(scv.Panel, False)
scv.Panel.Height = scv.Panel.Height * cScaleX
Else If GetType(v) = "anywheresoftware.b4a.objects.HorizontalScrollViewWrapper$MyHScrollView" Then
Dim hcv As HorizontalScrollView
hcv = v
ScaleAllX(hcv.Panel, False)
hcv.Panel.Width = hcv.Panel.Width * cScaleX
Else If GetType(v) = "flm.b4a.scrollview2d.ScrollView2DWrapper$MyScrollView" Then
Else If GetType(v) = "anywheresoftware.b4a.objects.ListViewWrapper$SimpleListView" Then
Dim ltv As ListView
ltv = v
ScaleViewX(ltv.SingleLineLayout.Label)
ltv.SingleLineLayout.ItemHeight = ltv.SingleLineLayout.ItemHeight * cScaleX
ScaleViewX(ltv.TwoLinesLayout.Label)
ScaleViewX(ltv.TwoLinesLayout.SecondLabel)
ltv.TwoLinesLayout.ItemHeight = ltv.TwoLinesLayout.ItemHeight * cScaleX
ScaleViewX(ltv.TwoLinesAndBitmap.Label)
ScaleViewX(ltv.TwoLinesAndBitmap.SecondLabel)
ScaleViewX(ltv.TwoLinesAndBitmap.ImageView)
ltv.TwoLinesAndBitmap.ItemHeight = ltv.TwoLinesAndBitmap.ItemHeight * cScaleX
ltv.TwoLinesAndBitmap.ImageView.Top = (ltv.TwoLinesAndBitmap.ItemHeight - ltv.TwoLinesAndBitmap.ImageView.Height) / 2
Else If GetType(v) = "anywheresoftware.b4a.objects.SpinnerWrapper$B4ASpinner" Then
Dim spn As Spinner
spn = v
If cScaleX<cScaleY Then
spn.TextSize = spn.TextSize * cScaleX
Else
spn.TextSize = spn.TextSize * cScaleY
End If
End If
End Sub
Public Sub IsPanel(v As View) As Boolean
If GetType(v) = "anywheresoftware.b4a.BALayout" Then
Dim obj As Object
obj = GetParent(v)
If GetType(obj) = "android.widget.FrameLayout" Then
Return False
Else
Return True
End If
Else
Return False
End If
End Sub
Public Sub IsActivity(v As View) As Boolean
Dim obj As Object
obj = GetParent(v)
If GetType(obj) = "android.widget.FrameLayout" Then
Return True
Else
Return False
End If
End Sub
Public Sub SetReferenceLayout(Width As Int, Height As Int, Scale As Double)
If Width < Height Then
cRefWidth = Width
cRefHeight = Height
Else
cRefWidth = Width
cRefHeight = Height
End If
cRefScale = Scale
Initialize
End Sub
Sub GetParent(v As View) As Object
Dim jobj = v As JavaObject
Return jobj.RunMethod("getParent", Null)
End Sub