* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
- * Modifications copyright (c) 2012 Roderick W. Smith
+ * Modifications copyright (c) 2012-2014 Roderick W. Smith
*
* Modifications distributed under the terms of the GNU General Public
- * License (GPL) version 3 (GPLv3), a copy of which must be distributed
- * with this source code or binaries made from it.
+ * License (GPL) version 3 (GPLv3), or (at your option) any later version.
*
*/
+/*
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
#include "libegint.h"
#include "../refind/screen.h"
#include "../refind/lib.h"
+#include "../refind/mystrings.h"
#include "../include/refit_call_wrapper.h"
+#include "libeg.h"
+#include "../include/Handle.h"
#include <efiUgaDraw.h>
#include <efiConsoleControl.h>
BOOLEAN ChangedIt = FALSE;
if ((RequestedMode != DONT_CHANGE_TEXT_MODE) && (RequestedMode != ST->ConOut->Mode->Mode)) {
-// SwitchToGraphics();
Status = refit_call2_wrapper(ST->ConOut->SetMode, ST->ConOut, RequestedMode);
if (Status == EFI_SUCCESS) {
ChangedIt = TRUE;
(ScreenPosX > egScreenWidth) || (ScreenPosY > egScreenHeight))
return;
-// if (Image->HasAlpha) {
-// Image->HasAlpha = FALSE;
-// egSetPlane(PLPTR(Image, a), 0, Image->Width * Image->Height);
-// }
-
if ((GlobalConfig.ScreenBackground == NULL) || ((Image->Width == egScreenWidth) && (Image->Height == egScreenHeight))) {
CompImage = Image;
} else if (GlobalConfig.ScreenBackground == Image) {
} else {
CompImage = egCropImage(GlobalConfig.ScreenBackground, ScreenPosX, ScreenPosY, Image->Width, Image->Height);
if (CompImage == NULL) {
- Print(L"Error! Can't compose image in egDrawImage()!\n");
+ Print(L"Error! Can't crop image in egDrawImage()!\n");
return;
}
egComposeImage(CompImage, Image, 0, 0);
egFreeImage(CompImage);
} /* VOID egDrawImage() */
+// Display an unselected icon on the screen, so that the background image shows
+// through the transparency areas. The BadgeImage may be NULL, in which case
+// it's not composited in.
+VOID egDrawImageWithTransparency(EG_IMAGE *Image, EG_IMAGE *BadgeImage, UINTN XPos, UINTN YPos, UINTN Width, UINTN Height) {
+ EG_IMAGE *Background;
+
+ Background = egCropImage(GlobalConfig.ScreenBackground, XPos, YPos, Width, Height);
+ if (Background != NULL) {
+ BltImageCompositeBadge(Background, Image, BadgeImage, XPos, YPos);
+ egFreeImage(Background);
+ }
+} // VOID DrawImageWithTransparency()
+
VOID egDrawImageArea(IN EG_IMAGE *Image,
IN UINTN AreaPosX, IN UINTN AreaPosY,
IN UINTN AreaWidth, IN UINTN AreaHeight,
if (AreaWidth == 0)
return;
-// if (Image->HasAlpha) {
-// Image->HasAlpha = FALSE;
-// egSetPlane(PLPTR(Image, a), 0, Image->Width * Image->Height);
-// }
-
if (GraphicsOutput != NULL) {
refit_call10_wrapper(GraphicsOutput->Blt, GraphicsOutput, (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)Image->PixelData,
EfiBltBufferToVideo, AreaPosX, AreaPosY, ScreenPosX, ScreenPosY, AreaWidth, AreaHeight,
EG_IMAGE *Box;
if ((Text != NULL) && (BGColor != NULL)) {
- BoxWidth = (StrLen(Text) + 2) * FONT_CELL_WIDTH;
+ egMeasureText(Text, &BoxWidth, &BoxHeight);
+ BoxWidth += 14;
+ BoxHeight *= 2;
if (BoxWidth > egScreenWidth)
BoxWidth = egScreenWidth;
- BoxHeight = 2 * FONT_CELL_HEIGHT;
Box = egCreateFilledImage(BoxWidth, BoxHeight, FALSE, BGColor);
- egRenderText(Text, Box, FONT_CELL_WIDTH, FONT_CELL_HEIGHT / 2);
+ egRenderText(Text, Box, 7, BoxHeight / 4, (BGColor->r + BGColor->g + BGColor->b) / 3);
egDrawImage(Box, (egScreenWidth - BoxWidth) / 2, (egScreenHeight - BoxHeight) / 2);
} // if non-NULL inputs
} // VOID egDisplayMessage()
UINT8 *FileData;
UINTN FileDataLength;
UINTN Index;
+ UINTN ssNum;
+ CHAR16 Filename[80];
+ EFI_FILE* BaseDir;
Image = egCopyScreen();
if (Image == NULL) {
goto bailout_wait;
}
+ Status = egFindESP(&BaseDir);
+ if (EFI_ERROR(Status))
+ return;
+
+ // Search for existing screen shot files; increment number to an unused value...
+ ssNum = 001;
+ do {
+ SPrint(Filename, 80, L"screenshot_%03d.bmp", ssNum++);
+ } while (FileExists(BaseDir, Filename));
+
// save to file on the ESP
- Status = egSaveFile(NULL, L"screenshot.bmp", FileData, FileDataLength);
+ Status = egSaveFile(BaseDir, Filename, FileData, FileDataLength);
FreePool(FileData);
- if (EFI_ERROR(Status)) {
- Print(L"Error egSaveFile: %x\n", Status);
+ if (CheckError(Status, L"in egSaveFile()")) {
goto bailout_wait;
}