IndeedPete 1038 Posted May 28, 2014 Hello, I'm facing the problem that some of my dialogs are "falling" out of the game window if I change the Interface Size in Arma 3's options. (Also other users reported the same issue with my dialogs.) How do I calculate the correct coordinates? I've looked at other people's code and tried to apply it on my problem - no luck so far. They're calculating some fancy stuff using the safeZone values and abra kadabra: the dialog fits in every possible interface size. My problem is that I don't even understand what the safeZones actually mean. Documentation on safeZoneX, safeZoneY, safeZoneW and safeZoneH is way too thin for me to get the differences. Anybody able to enlighten my simple mind? Or even provide some piece of code? Thank you! Share this post Link to post Share on other sites
IT07 10 Posted May 29, 2014 The safeZone area is an area that is visible on any screen no matter what the resolution or interface size is. Hence the word "safe" in it. If you do not use the safeZone values, then it will fall off people their screens like you described. It sounds kind of funny to me though that you have made a dialog but you do not know what safeZone does.... xD Anyways, to answer your question: try and find a dialog script that is using the safeZone parameters. For example; the virtual ammobox script. Then, fiddle around with the values to get a full understanding of what those values actually do. The best way to learn it is to see it yourself. Share this post Link to post Share on other sites
IndeedPete 1038 Posted May 29, 2014 Frankly, I've just used the GUI editor and read somewhere that the game adjusts sizes automatically. And the editor output shows the coordinates as "x = 62 * GUI_GRID_W + GUI_GRID_X;" for example - are those also safeZones? I had a look at TPW's hud script since it has a quite similar box in the lower right corner of the screen but I wasn't able to make up proper parameters to feed his code. Fiddling around with this GUI size stuff is truly a pain in the ass if you ask me.^^ But I'll retry making up proper factors... ---------- Post added at 04:40 PM ---------- Previous post was at 02:49 PM ---------- Maybe I'm a bit stupid but I gave this stuff some more thoughts. I understand that safeZoneW and safeZoneH are giving me lengths. So far so good, but safeZoneX and safeZoneY are negative values. What exactly do these values stand for? What are they representing? The wiki says: Safezones serves only as references to absolute positions. Result of safezoneX can for example be -0.452381, which means it's left from absolute area. Well, cool. Share this post Link to post Share on other sites
IT07 10 Posted May 29, 2014 Yeah well that bloody wiki hasn't helped me either back in the day when I started fitteling with ArmA 2. Most info on it makes it even more complicated than it already is. The only best way to find out how it actually works is to use it yourself. Here; let me show you a script I launched a while back. (it also uses an area in the lower right corner, maybe it will help you find out what is going on) https://gist.github.com/IT07/6210573 Share this post Link to post Share on other sites
IndeedPete 1038 Posted May 29, 2014 Thanks for you reply! I've tried some example from the wiki and I'm able to align stuff in the lower right corner. But of course it looks shitty because every element is aligned down right: How can I calculate relative x/y coordinates so the controls will keep their correct positions within the box? I'm really just looking for a dead simple line of code saying: _adjustedX = _x * _scaleCoefficient; Is it really that hard to get a simple calculation rule working in all possible combinations? Share this post Link to post Share on other sites
IT07 10 Posted May 29, 2014 I am not sure where you are aiming for. Can you explain a bit more what you are trying to achieve? Share this post Link to post Share on other sites
IndeedPete 1038 Posted May 29, 2014 Sure, I have a dialog displayed as RscTitle. I've built this dialog with the GUI editor while I had my interface size set to "small" (simply forgot to think about that). I've placed the box down to the right corner outside the marked grid of the GUI editor so it would perferctly fit. Now, when I change the interface size (or if other users play on other sizes by default) the box is "falling out". In my simple mind, I'd have lower x/y coordinates based on chosen interface size to prevent it from falling out. The safeZoneW and safeZoneH are increasing with decreasing interface size settings. Means I need higher x/y values on smaller interface sizes to keep the box into the lower right corner. As I said, I'm looking for a factor to multiply the given x/y coordinates based on chosen interface size. There's a number given in (getResolution select 5) which reflects the interface size setting. I thought this would be the factor I'm looking for and it is used to resize all other ingame diolgs like main menu, HUD etc. but my first attempts were fruitless. I really wish for a simple align="right/bottom" property for Arma dialogs like in many other GUI builders. :/ Share this post Link to post Share on other sites
IT07 10 Posted May 30, 2014 Thank you for clearing this up. I understand what you mean now. Anyways, the credits script I linked to you; it should have the correct safezone numbers which means that it should not fall off the screen. Try using the safeZone values from the script. Share this post Link to post Share on other sites
das attorney 858 Posted May 30, 2014 IndeedPete - when you go in the dialog editor, are you setting the "Position Type" (down the bottom) to GUI_GRID or SafeZone? If you use GUI GRID, then you are at the whims of interface size issues. Try changing all of the elements for your dialog to Safezone and then export again. It should be fine then I did a little test last night to check this and it seems fine on my PC. I got sidetracked watching the Usual Suspects on TV so I forgot to post this up. If you are still having problems then either post your dialog config here or PM me it and I'll see if I can sort it for you Share this post Link to post Share on other sites
IndeedPete 1038 Posted May 30, 2014 (edited) Hey, thanks for all your great answers here as well as Larrow's PM, much appreciated! I've rebuilt the dialog (while having interface size set to "Very Large") and set to safezone. Now, the dialogs are not falling out anymore. *yay* However, scaling still seems to be messed up. Here's a screnshot with interface size set to "Very Large": Looks good so far. Now I've changed the option to "Small" which I usually use. This shot is right after switching: Correct scaling but false position. Sure, because I haven't restarted the game yet. Now, a shot after restarting: What the hell? oO Just for reference, here is the dialog class: class IP_DLG_GLASSSTATUS { idd = 20005; movingenable = false; duration = 1e+1000; onLoad = "UINamespace setVariable ['DLG_GlassStatus', _this select 0]"; class Controls { class IP_BOX_MAIN: BOX { idc = -1; text = ""; //--- ToDo: Localize; x = 0.666875 * safezoneW + safezoneX; y = 0.795 * safezoneH + safezoneY; w = 0.328125 * safezoneW; h = 0.2 * safezoneH; }; //////////////////////////////////////////////////////// // GUI EDITOR OUTPUT START (by IndeedPete, v1.063, #Zucyle) //////////////////////////////////////////////////////// class IP_FRM_GLASSSTATUS: RscFrame { idc = 1800; text = "Operator Status"; //--- ToDo: Localize; x = 0.666875 * safezoneW + safezoneX; y = 0.795 * safezoneH + safezoneY; w = 0.328125 * safezoneW; h = 0.2 * safezoneH; }; class IP_STX_GRID: RscStructuredText { idc = 1100; text = "Grid: 000000"; //--- ToDo: Localize; x = 0.66875 * safezoneW + safezoneX; y = 0.82 * safezoneH + safezoneY; w = 0.13125 * safezoneW; h = 0.04 * safezoneH; }; class IP_STX_CONDITION: RscStructuredText { idc = 1101; text = "Condition: Healthy"; //--- ToDo: Localize; x = 0.66875 * safezoneW + safezoneX; y = 0.94 * safezoneH + safezoneY; w = 0.31875 * safezoneW; h = 0.04 * safezoneH; }; class IP_STX_HEADING: RscStructuredText { idc = 1102; text = "Heading: NNW"; //--- ToDo: Localize; x = 0.81875 * safezoneW + safezoneX; y = 0.82 * safezoneH + safezoneY; w = 0.140625 * safezoneW; h = 0.04 * safezoneH; }; class IP_STX_PULSE: RscStructuredText { idc = 1103; text = "Pulse: 180/min"; //--- ToDo: Localize; x = 0.66875 * safezoneW + safezoneX; y = 0.88 * safezoneH + safezoneY; w = 0.140625 * safezoneW; h = 0.04 * safezoneH; }; class IP_STX_BREATHING: RscStructuredText { idc = 1104; text = "Breathing: 15/min"; //--- ToDo: Localize; x = 0.81875 * safezoneW + safezoneX; y = 0.88 * safezoneH + safezoneY; w = 0.16875 * safezoneW; h = 0.04 * safezoneH; }; //////////////////////////////////////////////////////// // GUI EDITOR OUTPUT END //////////////////////////////////////////////////////// }; }; ---------- Post added at 05:44 PM ---------- Previous post was at 05:37 PM ---------- Oh, and here's the script handling the dialog. Just to make sure there's nothing wrong on that end: #define CHECK ((alive player) && (goggles player in _goggles) && (player getVariable ["IP_Glass_Boot", false]) && (player getVariable ["IP_Glass_Status", false])) private ["_bearing", "_rate"]; _goggles = _this select 0; 65 cutRsc ["IP_DLG_GLASSSTATUS", "PLAIN"]; disableSerialization; _display = uiNamespace getVariable "DLG_GlassStatus"; while {CHECK} do { _pos = getPos player; _bearing = getDir player; _fatigue = getFatigue player; _damage = damage player; _oldPulse = player getVariable ["IP_Pulse", 80]; _oldBreathng = player getVariable ["IP_Breathing", 15]; _grid = mapGridPosition _pos; if (_bearing < 0) then {_bearing = _bearing + 360}; _heading = switch (true) do { case (_bearing <= 22.5 || _bearing > 337.5): {"N"}; case (_bearing > 22.5 && _bearing <= 67.5): {"NE"}; case (_bearing > 67.5 && _bearing <= 112.5 ): {"E"}; case (_bearing > 112.5 && _bearing <= 157.5): {"SE"}; case (_bearing > 157.5 && _bearing <= 202.5): {"S"}; case (_bearing > 202.5 && _bearing <= 247.5): {"SW"}; case (_bearing > 247.5 && _bearing <= 292.5): {"W"}; case (_bearing > 292.5 && _bearing <= 337.5): {"NW"}; default {"N"}; }; _rate = -0.25; if (_fatigue > 0) then {_rate = _rate + (_fatigue * 10)}; if (!isNull(player findNearestEnemy player)) then {_rate = _rate + 0.5}; if (!isNull(nearestObject [player, "BulletBase"])) then {_rate = _rate + 1}; if (_damage > 0.7) then {_rate = _rate + 2}; _pulse = if (_rate > 0) then { if ((_oldPulse + _rate) > 160) then {160} else {(_oldPulse + _rate)} } else { if ((_oldPulse + _rate) < 80) then {80} else {(_oldPulse + _rate)} }; _rate = _rate / 2; _breathing = if (_rate > 0) then { if ((_oldBreathng + _rate) > 60) then {60} else {(_oldBreathng + _rate)} } else { if ((_oldBreathng + _rate) < 15) then {15} else {(_oldBreathng + _rate)} }; player setVariable ["IP_Pulse", _pulse]; player setVariable ["IP_Breathing", _breathing]; _condition = if (_damage > 0) then { if (_damage > 0.7) then { ((uiNamespace getVariable "DLG_GlassStatus") displayCtrl 1101) ctrlSetStructuredText (parseText("Condition: " + "<t color='#FFFF00'>CRITICAL</t>")); sleep 0.5; "<t color='#FF0000'>CRITICAL</t>" } else { "<t color='#FFFF00'>Wounded</t>" } } else { "Healthy" }; (_display displayCtrl 1100) ctrlSetStructuredText (parseText("Grid: " + _grid)); (_display displayCtrl 1102) ctrlSetStructuredText (parseText("Heading: " + _heading)); (_display displayCtrl 1103) ctrlSetStructuredText (parseText("Pulse: " + str(round(_pulse)) + "/min")); (_display displayCtrl 1104) ctrlSetStructuredText (parseText("Breathing: " + str(round(_breathing)) + "/min")); (_display displayCtrl 1101) ctrlSetStructuredText (parseText("<t align='CENTER'>Condition: " + _condition + "</t>")); sleep 0.5; }; 65 cutText ["", "PLAIN"]; Edited May 30, 2014 by IndeedPete Share this post Link to post Share on other sites
das attorney 858 Posted May 30, 2014 Hi mate, been checking some things but I need a bit more info if ok. So, from the pictures: Picture 1 - Correct size of box and text, in the right place Picture 2 - Correct size of box and text, in the wrong place (prior to restart) Picture 3 - Correct size of text and in the right place, but with the wrong size of box. Is that correct? Can you post up the defines you're using? I crashed out with undefined "Box", so I subbed in some definitions I use in my project and it's not working as expected. Thanks. Share this post Link to post Share on other sites
IndeedPete 1038 Posted May 30, 2014 Hey Das, yes, your assumptions are correct. The box class is just to add a solid background. More or less optional as I might sacrifice it later on for the sake of visibility (it should enhance the HUD, not limit it). Anyway, here are my defines. They're based on Iceman77's dialog tutorial: // A3 necessary #define GUI_GRID_X (0) #define GUI_GRID_Y (0) #define GUI_GRID_W (0.025) #define GUI_GRID_H (0.04) #define GUI_GRID_WAbs (1) #define GUI_GRID_HAbs (1) class BOX { type = CT_STATIC; idc = -1; style = ST_CENTER; shadow = 2; colorText[] = {1,1,1,1}; font = "PuristaMedium"; sizeEx = 0.02; colorBackground[] = { 0.2,0.2,0.2, 0.9 }; text = ""; }; /////////////////////////////////////////////////////////////////////////// /// Styles /////////////////////////////////////////////////////////////////////////// // Control types #define CT_STATIC 0 #define CT_BUTTON 1 #define CT_EDIT 2 #define CT_SLIDER 3 #define CT_COMBO 4 #define CT_LISTBOX 5 #define CT_TOOLBOX 6 #define CT_CHECKBOXES 7 #define CT_PROGRESS 8 #define CT_HTML 9 #define CT_STATIC_SKEW 10 #define CT_ACTIVETEXT 11 #define CT_TREE 12 #define CT_STRUCTURED_TEXT 13 #define CT_CONTEXT_MENU 14 #define CT_CONTROLS_GROUP 15 #define CT_SHORTCUTBUTTON 16 #define CT_XKEYDESC 40 #define CT_XBUTTON 41 #define CT_XLISTBOX 42 #define CT_XSLIDER 43 #define CT_XCOMBO 44 #define CT_ANIMATED_TEXTURE 45 #define CT_OBJECT 80 #define CT_OBJECT_ZOOM 81 #define CT_OBJECT_CONTAINER 82 #define CT_OBJECT_CONT_ANIM 83 #define CT_LINEBREAK 98 #define CT_USER 99 #define CT_MAP 100 #define CT_MAP_MAIN 101 #define CT_LISTNBOX 102 // Static styles #define ST_POS 0x0F #define ST_HPOS 0x03 #define ST_VPOS 0x0C #define ST_LEFT 0x00 #define ST_RIGHT 0x01 #define ST_CENTER 0x02 #define ST_DOWN 0x04 #define ST_UP 0x08 #define ST_VCENTER 0x0C #define ST_TYPE 0xF0 #define ST_SINGLE 0x00 #define ST_MULTI 0x10 #define ST_TITLE_BAR 0x20 #define ST_PICTURE 0x30 #define ST_FRAME 0x40 #define ST_BACKGROUND 0x50 #define ST_GROUP_BOX 0x60 #define ST_GROUP_BOX2 0x70 #define ST_HUD_BACKGROUND 0x80 #define ST_TILE_PICTURE 0x90 #define ST_WITH_RECT 0xA0 #define ST_LINE 0xB0 #define ST_SHADOW 0x100 #define ST_NO_RECT 0x200 #define ST_KEEP_ASPECT_RATIO 0x800 #define ST_TITLE ST_TITLE_BAR + ST_CENTER // Slider styles #define SL_DIR 0x400 #define SL_VERT 0 #define SL_HORZ 0x400 #define SL_TEXTURES 0x10 // progress bar #define ST_VERTICAL 0x01 #define ST_HORIZONTAL 0 // Listbox styles #define LB_TEXTURES 0x10 #define LB_MULTI 0x20 // Tree styles #define TR_SHOWROOT 1 #define TR_AUTOCOLLAPSE 2 // MessageBox styles #define MB_BUTTON_OK 1 #define MB_BUTTON_CANCEL 2 #define MB_BUTTON_USER 4 /////////////////////////////////////////////////////////////////////////// /// Base Classes /////////////////////////////////////////////////////////////////////////// class RscText { access = 0; type = 0; idc = -1; colorBackground[] = { 0, 0, 0, 0 }; colorText[] = { 1, 1, 1, 1 }; text = ""; fixedWidth = 0; x = 0; y = 0; h = 0.037; w = 0.3; style = 0; shadow = 1; colorShadow[] = { 0, 0, 0, 0.5 }; font = "PuristaMedium"; SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; linespacing = 1; tooltipColorText[] = { 1, 1, 1, 1 }; tooltipColorBox[] = { 1, 1, 1, 1 }; tooltipColorShade[] = { 0, 0, 0, 0.65 }; }; class RscStructuredText { access = 0; type = 13; idc = -1; style = 0; colorText[] = { 1, 1, 1, 1 }; class Attributes { font = "PuristaMedium"; color = "#ffffff"; align = "left"; shadow = 1; }; // Doesn't work autoScrollSpeed = -1; autoScrollDelay = 5; autoScrollRewind = 0; arrowEmpty = "#(argb,8,8,3)color(1,1,1,1)"; arrowFull = "#(argb,8,8,3)color(1,1,1,1)"; class StructeredTextScrollBar { color[] = { 1, 1, 1, 1 }; autoScrollEnabled = 1; }; // Doesn't work x = 0; y = 0; h = 0.035; w = 0.1; text = ""; size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; shadow = 1; }; class RscPicture { access = 0; type = 0; idc = -1; style = 48; colorBackground[] = { 0, 0, 0, 0 }; colorText[] = { 1, 1, 1, 1 }; font = "TahomaB"; sizeEx = 0; lineSpacing = 0; text = ""; fixedWidth = 0; shadow = 0; x = 0; y = 0; w = 0.2; h = 0.15; tooltipColorText[] = { 1, 1, 1, 1 }; tooltipColorBox[] = { 1, 1, 1, 1 }; tooltipColorShade[] = { 0, 0, 0, 0.65 }; }; class RscEdit { access = 0; type = 2; x = 0; y = 0; h = 0.04; w = 0.2; colorBackground[] = { 0, 0, 0, 1 }; colorText[] = { 0.95, 0.95, 0.95, 1 }; colorDisabled[] = { 1, 1, 1, 0.25 }; colorSelection[] = { "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", 1 }; autocomplete = ""; text = ""; size = 0.2; style = "0x00 + 0x40"; font = "PuristaMedium"; shadow = 2; sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; canModify = 1; tooltipColorText[] = { 1, 1, 1, 1 }; tooltipColorBox[] = { 1, 1, 1, 1 }; tooltipColorShade[] = { 0, 0, 0, 0.65 }; }; class RscCombo { access = 0; type = 4; colorSelect[] = { 0, 0, 0, 1 }; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = { 0, 0, 0, 1 }; colorScrollbar[] = { 1, 0, 0, 1 }; soundSelect[] = { "\A3\ui_f\data\sound\RscCombo\soundSelect", 0.1, 1 }; soundExpand[] = { "\A3\ui_f\data\sound\RscCombo\soundExpand", 0.1, 1 }; soundCollapse[] = { "\A3\ui_f\data\sound\RscCombo\soundCollapse", 0.1, 1 }; maxHistoryDelay = 1; class ComboScrollBar { color[] = { 1, 1, 1, 1 }; }; style = "0x10 + 0x200"; x = 0; y = 0; w = 0.12; h = 0.035; shadow = 0; colorSelectBackground[] = { 1, 1, 1, 0.7 }; arrowEmpty = "\A3\ui_f\data\GUI\RscCommon\rsccombo\arrow_combo_ca.paa"; arrowFull = "\A3\ui_f\data\GUI\RscCommon\rsccombo\arrow_combo_active_ca.paa"; wholeHeight = 0.45; colorActive[] = { 1, 0, 0, 1 }; colorDisabled[] = { 1, 1, 1, 0.25 }; font = "PuristaMedium"; sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; tooltipColorText[] = { 1, 1, 1, 1 }; tooltipColorBox[] = { 1, 1, 1, 1 }; tooltipColorShade[] = { 0, 0, 0, 0.65 }; }; class RscListBox { access = 0; type = 5; w = 0.4; h = 0.4; rowHeight = 0; colorText[] = { 1, 1, 1, 1 }; colorDisabled[] = { 1, 1, 1, 0.25 }; colorScrollbar[] = { 1, 0, 0, 0 }; colorSelect[] = { 0, 0, 0, 1 }; colorSelect2[] = { 0, 0, 0, 1 }; colorSelectBackground[] = { 0.95, 0.95, 0.95, 1 }; colorSelectBackground2[] = { 1, 1, 1, 0.5 }; colorBackground[] = { 0, 0, 0, 0.3 }; soundSelect[] = { "\A3\ui_f\data\sound\RscListbox\soundSelect", 0.09, 1 }; autoScrollSpeed = -1; autoScrollDelay = 5; autoScrollRewind = 0; arrowEmpty = "#(argb,8,8,3)color(1,1,1,1)"; arrowFull = "#(argb,8,8,3)color(1,1,1,1)"; class ListScrollBar { color[] = { 1, 1, 1, 1 }; autoScrollEnabled = 1; }; style = 16; font = "PuristaMedium"; sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; shadow = 0; colorShadow[] = { 0, 0, 0, 0.5 }; period = 1.2; maxHistoryDelay = 1; tooltipColorText[] = { 1, 1, 1, 1 }; tooltipColorBox[] = { 1, 1, 1, 1 }; tooltipColorShade[] = { 0, 0, 0, 0.65 }; }; class RscButton { access = 0; type = 1; text = ""; colorText[] = { 1, 1, 1, 1 }; colorDisabled[] = { 1, 1, 1, 0.25 }; colorBackground[] = { 0, 0, 0, 0.5 }; colorBackgroundDisabled[] = { 0, 0, 0, 0.5 }; colorBackgroundActive[] = { 0, 0, 0, 1 }; colorFocused[] = { 0, 0, 0, 1 }; colorShadow[] = { 0, 0, 0, 0 }; colorBorder[] = { 0, 0, 0, 1 }; soundEnter[] = { "\A3\ui_f\data\sound\RscButton\soundEnter", 0.09, 1 }; soundPush[] = { "\A3\ui_f\data\sound\RscButton\soundPush", 0.09, 1 }; soundClick[] = { "\A3\ui_f\data\sound\RscButton\soundClick", 0.09, 1 }; soundEscape[] = { "\A3\ui_f\data\sound\RscButton\soundEscape", 0.09, 1 }; style = 2; x = 0; y = 0; w = 0.095589; h = 0.039216; shadow = 2; font = "PuristaMedium"; sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; borderSize = 0; offsetX = 0; offsetY = 0; offsetPressedX = 0; offsetPressedY = 0; period = 1.2; periodFocus = 1.2; periodOver = 1.2; }; class RscShortcutButton { type = 16; x = 0.1; y = 0.1; class HitZone { left = 0; top = 0; right = 0; bottom = 0; }; class ShortcutPos { left = 0; top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; w = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)"; h = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; }; class TextPos { left = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)"; top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; right = 0.005; bottom = 0; }; shortcuts[] = { }; textureNoShortcut = "#(argb,8,8,3)color(0,0,0,0)"; color[] = { 1, 1, 1, 1 }; colorFocused[] = { 1, 1, 1, 1 }; color2[] = { 0.95, 0.95, 0.95, 1 }; colorDisabled[] = { 1, 1, 1, 0.25 }; colorBackground[] = { "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", 1 }; colorBackgroundFocused[] = { "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", 1 }; colorBackground2[] = { 1, 1, 1, 1 }; soundEnter[] = { "\A3\ui_f\data\sound\RscButton\soundEnter", 0.09, 1 }; soundPush[] = { "\A3\ui_f\data\sound\RscButton\soundPush", 0.09, 1 }; soundClick[] = { "\A3\ui_f\data\sound\RscButton\soundClick", 0.09, 1 }; soundEscape[] = { "\A3\ui_f\data\sound\RscButton\soundEscape", 0.09, 1 }; class Attributes { font = "PuristaMedium"; color = "#E5E5E5"; align = "left"; shadow = "true"; }; idc = -1; style = 0; default = 0; shadow = 1; w = 0.183825; h = "((((safezoneW / safezoneH) min 1.2) / 1.2) / 20)"; animTextureDefault = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\normal_ca.paa"; animTextureNormal = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\normal_ca.paa"; animTextureDisabled = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\normal_ca.paa"; animTextureOver = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\over_ca.paa"; animTextureFocused = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\focus_ca.paa"; animTexturePressed = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\down_ca.paa"; periodFocus = 1.2; periodOver = 0.8; period = 0.4; font = "PuristaMedium"; size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; text = ""; action = ""; class AttributesImage { font = "PuristaMedium"; color = "#E5E5E5"; align = "left"; }; }; class RscShortcutButtonMain { idc = -1; style = 0; default = 0; w = 0.313726; h = 0.104575; color[] = { 1, 1, 1, 1 }; colorDisabled[] = { 1, 1, 1, 0.25 }; class HitZone { left = 0; top = 0; right = 0; bottom = 0; }; class ShortcutPos { left = 0.0145; top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)) / 2"; w = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2) * (3/4)"; h = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)"; }; class TextPos { left = "(((safezoneW / safezoneH) min 1.2) / 32) * 1.5"; top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20)*2 - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)) / 2"; right = 0.005; bottom = 0; }; animTextureNormal = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\normal_ca.paa"; animTextureDisabled = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\disabled_ca.paa"; animTextureOver = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\over_ca.paa"; animTextureFocused = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\focus_ca.paa"; animTexturePressed = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\down_ca.paa"; animTextureDefault = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\normal_ca.paa"; period = 0.5; font = "PuristaMedium"; size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)"; sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)"; text = ""; action = ""; class Attributes { font = "PuristaMedium"; color = "#E5E5E5"; align = "left"; shadow = "false"; }; class AttributesImage { font = "PuristaMedium"; color = "#E5E5E5"; align = "false"; }; }; class RscFrame { type = 0; idc = -1; style = 64; shadow = 2; colorBackground[] = { 0, 0, 0, 0 }; colorText[] = { 1, 1, 1, 1 }; font = "PuristaMedium"; sizeEx = 0.02; text = ""; }; class RscSlider { access = 0; type = 3; style = 1024; w = 0.3; color[] = { 1, 1, 1, 0.8 }; colorActive[] = { 1, 1, 1, 1 }; shadow = 0; h = 0.025; }; class IGUIBack { type = 0; idc = 124; style = 128; text = ""; colorText[] = { 0, 0, 0, 0 }; font = "PuristaMedium"; sizeEx = 0; shadow = 0; x = 0.1; y = 0.1; w = 0.1; h = 0.1; colorbackground[] = { "(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])", "(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])", "(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])", "(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])" }; }; class RscCheckbox { idc = -1; type = 7; style = 0; x = "LINE_X(XVAL)"; y = "LINE_Y"; w = "LINE_W(WVAL)"; h = 0.029412; colorText[] = { 1, 0, 0, 1 }; color[] = { 0, 0, 0, 0 }; colorBackground[] = { 0, 0, 1, 1 }; colorTextSelect[] = { 0, 0.8, 0, 1 }; colorSelectedBg[] = { "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", 1 }; colorSelect[] = { 0, 0, 0, 1 }; colorTextDisable[] = { 0.4, 0.4, 0.4, 1 }; colorDisable[] = { 0.4, 0.4, 0.4, 1 }; tooltipColorText[] = { 1, 1, 1, 1 }; tooltipColorBox[] = { 1, 1, 1, 1 }; tooltipColorShade[] = { 0, 0, 0, 0.65 }; font = "PuristaMedium"; sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)"; rows = 1; columns = 1; strings[] = { "UNCHECKED" }; checked_strings[] = { "CHECKED" }; }; class RscButtonMenu { idc = -1; type = 16; style = "0x02 + 0xC0"; default = 0; shadow = 0; x = 0; y = 0; w = 0.095589; h = 0.039216; animTextureNormal = "#(argb,8,8,3)color(1,1,1,1)"; animTextureDisabled = "#(argb,8,8,3)color(1,1,1,1)"; animTextureOver = "#(argb,8,8,3)color(1,1,1,1)"; animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)"; animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)"; animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)"; colorBackground[] = { 0, 0, 0, 0.8 }; colorBackgroundFocused[] = { 1, 1, 1, 1 }; colorBackground2[] = { 0.75, 0.75, 0.75, 1 }; color[] = { 1, 1, 1, 1 }; colorFocused[] = { 0, 0, 0, 1 }; color2[] = { 0, 0, 0, 1 }; colorText[] = { 1, 1, 1, 1 }; colorDisabled[] = { 1, 1, 1, 0.25 }; period = 1.2; periodFocus = 1.2; periodOver = 1.2; size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; tooltipColorText[] = { 1, 1, 1, 1 }; tooltipColorBox[] = { 1, 1, 1, 1 }; tooltipColorShade[] = { 0, 0, 0, 0.65 }; class TextPos { left = "0.25 * (((safezoneW / safezoneH) min 1.2) / 40)"; top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; right = 0.005; bottom = 0; }; class Attributes { font = "PuristaLight"; color = "#E5E5E5"; align = "left"; shadow = "false"; }; class ShortcutPos { left = "(6.25 * (((safezoneW / safezoneH) min 1.2) / 40)) - 0.0225 - 0.005"; top = 0.005; w = 0.0225; h = 0.03; }; soundEnter[] = { "\A3\ui_f\data\sound\RscButtonMenu\soundEnter", 0.09, 1 }; soundPush[] = { "\A3\ui_f\data\sound\RscButtonMenu\soundPush", 0.09, 1 }; soundClick[] = { "\A3\ui_f\data\sound\RscButtonMenu\soundClick", 0.09, 1 }; soundEscape[] = { "\A3\ui_f\data\sound\RscButtonMenu\soundEscape", 0.09, 1 }; }; class RscButtonMenuOK { idc = 1; shortcuts[] = { "0x00050000 + 0", 28, 57, 156 }; default = 1; text = "OK"; soundPush[] = { "\A3\ui_f\data\sound\RscButtonMenuOK\soundPush", 0.09, 1 }; }; class RscButtonMenuCancel { idc = 2; shortcuts[] = { "0x00050000 + 1" }; text = "Cancel"; }; class RscControlsGroup { class VScrollbar { color[] = { 1, 1, 1, 1 }; width = 0.021; autoScrollEnabled = 1; }; class HScrollbar { color[] = { 1, 1, 1, 1 }; height = 0.028; }; class Controls { }; type = 15; idc = -1; x = 0; y = 0; w = 1; h = 1; shadow = 0; style = 16; }; Share this post Link to post Share on other sites
Larrow 2822 Posted May 31, 2014 Picture 3 - Correct size of text and in the right place, but with the wrong size of box.The box is the correct size it is set to be 66% across and 79% down and 33% width with 20% height. Flick between picture 1 and 2 and you will see the box takes up the same amount of room.I think the scaling of the text is wrong. Maybe try playing with the text size size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; Trying playing with a set value in here rather than this scaling factor? Share this post Link to post Share on other sites
IndeedPete 1038 Posted May 31, 2014 Thanks Larrow, I'll try your code and see what happens. ---------- Post added at 10:28 PM ---------- Previous post was at 09:42 PM ---------- Hm, I've applied fixed sizes now. It works a little bit better but still - if you switch down to interface size small or very small it looks just wrong. Share this post Link to post Share on other sites
IndeedPete 1038 Posted June 4, 2014 I'm sorry to bump this one again but I'm still stuck. The dialog windows are now aligned perfectly on all interface sizes. However, the font sizes are still messed up. Even if I use fixed sizes for the RscStructeredText in the defines or the control class itself the game seems to scale the font size. I have two solutions: First one shows the text correctly on all interface sizes but it looks like **** on the lower ones. Second option looks good on the lower sizes but you can't read it on larger sizes because the text is falling out. Is there no way to ignore the damn interface size settings and just have a completely fixed dialog size? I'm getting tired after countless hours of tweaking with basically no resut. :/ Share this post Link to post Share on other sites
Master85 1 Posted June 4, 2014 In Arma 2 OA I've divided the font size by (getResolution select 5) e.g. sizeEx = "0.2 / (getResolution select 5)"; to get a fixed font size (independent of the current UI scale). But I don't know whether it's still working in Arma 3. Share this post Link to post Share on other sites
IndeedPete 1038 Posted June 4, 2014 Tanks for your reply! I've tried that but it had no impact at all. If I change the size attribute something happens but sizeEx is being ignored? What's the difference between those two? I've also tried to apply the getResolution stuff on the size value but I wasn't able to find the right function yet. In my understanding setting a completely fixed value should result in a completely fixed size in game. But no, it seems like every (absolute) value is being scaled. I'm also confused about how the two size values connect. I can set one in my defines and one in the control itself. Both seem to change the actual size but I don't know if the class value overwrites / extends / multiplies the one from the defines. All very confusing and insanely frustrating. :confused: Share this post Link to post Share on other sites
Larrow 2822 Posted June 5, 2014 If I change the size attribute something happens but sizeEx is being ignored? What's the difference between those two? Quoted from BISim dialog page size string relative size of text, where 1 would be the same size as the parent class, and 2 would be twice as big. String representation of float (so "1.3" is valid). sizeEx Float Defines the block height (or "Em") of the text to be output. This height includes any ascenders or descenders the font may have, and the actual cap height (e.g. of the letter "H") is normally around 70% of the block height. Has no effect on images. Found 10 minutes to have a little play with this last night, like you i couldnt get sizeEx to seem to make any difference. Where as size seemed to be a percentage of the screen size so size = "0.05 * safezoneH" Seemed to work quite well and kept the text the same size between different resolution and ratio sizes. 5% of * percentage of actual screen height versus the Absolute height. Just change the 0.05 to suit your needs. Maybe needs experimenting with more especially to see how these commands behave as a sub class within the hierarchy. class myUI { idd = 30000; movingenable = true; class Controls { class RscStructuredText_1100: RscStructuredText { idc = 1100; text = "WORLD"; x = 0 * safezoneW + safezoneX; y = 0 * safezoneH + safezoneY; w = 1 * safezoneW; h = 1 * safezoneH; size = "0.05 * safezoneH"; }; }; }; Share this post Link to post Share on other sites
IndeedPete 1038 Posted June 5, 2014 Larrow, you are my shining British knight, saving me from evil in the darkest of times! This simple solution was exactly what I was looking for and does its job almost perfectly. Just had to adjust the constant factor down to 0.023 for the status dialog and 0.02 for the sidebar. Now it's visible (and readable) on all interface sizes; at least on my laptop resolution (1600x900). Users with other resolutions? Too bad, I will never ever touch these values again! Now I can start regrowing some nerves I've lost fighting this issue, thank you! Share this post Link to post Share on other sites