/*
* -----
* Screenshot Sender - __overlay.js
* -----
* Overlay Text functions for Screenshot Sender
* -----
*/
var OverlayText = function (DC, bSaveImage, ImageWidth, ImageHeight) {
this.DC = DC;
this.ImageWidth = ImageWidth;
this.ImageHeight = ImageHeight;
this.oOverlay = {};
oOverlay = this.EnumOverlayText(bSaveImage);
for (objOverlay in oOverlay) {
this.DrawText(objOverlay);
}
}
OverlayText.prototype = {
"EnumOverlayText" : function (nActionType) {
nActionType = (nActionType?2:1);
var objSubkeys = {};
Registry_EnumSubkeys(HKCU, RegistryInit() +'\\Overlay\\', objSubkeys);
for (var objSubkey in objSubkeys) {
var cCondition = Registry_GetKeyValue(HKCU, RegistryInit() +'\\Overlay\\'+objSubkey, 'cCondition');
var bEnabled = Registry_GetKeyValue(HKCU, RegistryInit() +'\\Overlay\\'+objSubkey, 'bEnabled');
if (bEnabled === 0 ||
(nActionType === 2 /* SEND */ && cCondition === 2 /* SAVE */) ||
(nActionType === 2 /* SAVE */ && cCondition === 1 /* SEND */))
delete objSubkeys[objSubkey];
}
return objSubkeys;
},
"GetOverlaySettings" : function (o) {
var objSubkeys = {};
Registry_EnumKeys(HKCU, RegistryInit() +'\\Overlay\\'+o+'\\', objSubkeys);
return objSubkeys;
},
"DrawText" : function (o) {
var oOverlayText = this.GetOverlaySettings(o);
var logY = Interop.Call('gdi32', 'GetDeviceCaps', this.DC, 90 /* LOGPIXELSY */);
var lSize = - (oOverlayText['lHeight'] * logY / 72);
var hfOld = Interop.Allocate(4);
hfOld.WriteDWORD(0, Interop.Call('gdi32', 'SelectObject', this.DC, this.OverlayCreateFont(oOverlayText['sFaceName'], lSize, oOverlayText['lWeight'], oOverlayText['lItalic'], oOverlayText['lUnderline'], oOverlayText['lStrikeOut']) ) );
var RECT = Interop.Allocate(16);
if (oOverlayText['cTransparentBack'] === 1 ) {
Interop.Call('gdi32', 'SetBkMode', this.DC, 1 /* TRANSPARENT */);
} else {
Interop.Call('gdi32', 'SetBkMode', this.DC, 0 /* OPAQUE */);
Interop.Call('gdi32', 'SetBkColor', this.DC, oOverlayText['lBackColorRef']);
}
oOverlayText['tOverlay'] = SessionImages.FilenameQuickTexts(oOverlayText['tOverlay'], true);
Interop.Call('gdi32', 'SetTextColor', this.DC, oOverlayText['lColorRef']);
Interop.Call('user32', 'DrawTextW', this.DC, oOverlayText['tOverlay'],
oOverlayText['tOverlay'].length, RECT, 0x400 /* DT_CALCRECT */);
Interop.Call('gdi32', 'SelectObject', this.DC, hfOld);
this.OverlayPosition(oOverlayText['cPosition'], RECT);
Interop.Call('user32', 'DrawTextW', this.DC, oOverlayText['tOverlay'], oOverlayText['tOverlay'].length,
RECT, 0x20 /*DT_SINGLELINE */ | 0x0 /* DT_LEFT */ | 0x100 /* DT_NOCLIP */ | (_lang.IsRtl ? 0x20000 /* DT_RTLREADING */ : 0) );
},
"OverlayPosition" : function (iOverlayPosition, RECT) {
/**
typedef struct _RECT {
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT;
*/
switch (iOverlayPosition) {
case 0: // top left
RECT.WriteDWORD(0, 1);
RECT.WriteDWORD(4, 0);
break;
case 1: // top right
RECT.WriteDWORD(0, this.ImageWidth-RECT.ReadDWORD(8) );
RECT.WriteDWORD(4, 0);
break;
case 2: // bottom left
RECT.WriteDWORD(0, 1);
RECT.WriteDWORD(4, this.ImageHeight-RECT.ReadDWORD(12) );
break;
case 3: // bottom right
RECT.WriteDWORD(0, this.ImageWidth-RECT.ReadDWORD(8) );
RECT.WriteDWORD(4, this.ImageHeight-RECT.ReadDWORD(12) );
break;
case 4: // center
RECT.WriteDWORD(0, (this.ImageWidth/2) - (RECT.ReadDWORD(8) /2) );
RECT.WriteDWORD(4, (this.ImageHeight/2) - (RECT.ReadDWORD(12) /2) );
break;
}
},
"OverlayCreateFont" : function (sFont, pHeight, bBold, bItalic, bUnderline, bStrikeout) {
var LF = Interop.Allocate(28 + sFont.length*2+2);
LF.WriteDWORD(0, pHeight);
LF.WriteDWORD(16, bBold === 400 ? 400 : 700);
LF.SetAt(20, bItalic);
LF.SetAt(21, bUnderline);
LF.SetAt(22, bStrikeout);
LF.SetAt(26, 4 /* ANTIALIASED_QUALITY */);
LF.WriteString(28, sFont);
return Interop.Call('gdi32', 'CreateFontIndirectW', LF);
}
}