[Scummvm-git-logs] scummvm master -> 75aaf5eb82a19cf6d5f62af956324000901bde46

dreammaster paulfgilbert at gmail.com
Thu Feb 7 07:38:21 CET 2019


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
75aaf5eb82 GLK: FROTZ: Fix drawing position of pillars in Zork Zero


Commit: 75aaf5eb82a19cf6d5f62af956324000901bde46
    https://github.com/scummvm/scummvm/commit/75aaf5eb82a19cf6d5f62af956324000901bde46
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2019-02-06T22:38:10-08:00

Commit Message:
GLK: FROTZ: Fix drawing position of pillars in Zork Zero

Changed paths:
    engines/glk/frotz/glk_interface.cpp
    engines/glk/frotz/glk_interface.h
    engines/glk/frotz/processor_windows.cpp
    engines/glk/frotz/windows.cpp


diff --git a/engines/glk/frotz/glk_interface.cpp b/engines/glk/frotz/glk_interface.cpp
index e8a285a..42dcdac 100644
--- a/engines/glk/frotz/glk_interface.cpp
+++ b/engines/glk/frotz/glk_interface.cpp
@@ -106,6 +106,7 @@ void GlkInterface::initialize() {
 		_wp._lower = glk_window_open(0, 0, 0, wintype_TextBuffer, 0);
 	glk_window_get_size(_wp._lower, &width, &height);
 	glk_window_close(_wp._lower, nullptr);
+	_wp._lower = nullptr;
 
 	gos_channel = nullptr;
 
@@ -289,12 +290,14 @@ bool GlkInterface::os_picture_data(int picture, uint *height, uint *width) {
 		*height = _pics->size();
 		return true;
 	} else {
-		bool result = glk_image_get_info(picture, width, height);
+		uint fullWidth, fullHeight;
+		bool result = glk_image_get_info(picture, &fullWidth, &fullHeight);
 
-		int cellW = g_conf->_monoInfo._cellW;
-		int cellH = g_conf->_monoInfo._cellH;
-		*width = (*width + cellW - 1) / cellW;
-		*height = (*height + cellH - 1) / cellH;
+		int x_scale = g_system->getWidth();
+		int y_scale = g_system->getHeight();
+
+		*width = roundDiv(fullWidth * h_screen_cols, x_scale);
+		*height = roundDiv(fullHeight * h_screen_rows, y_scale);
 
 		return result;
 	}
@@ -392,8 +395,7 @@ void GlkInterface::split_window(zword lines) {
 		curr_status_ht = lines;
 	}
 	mach_status_ht = lines;
-	if (cury > lines)
-	{
+	if (cury > lines) {
 		glk_window_move_cursor(_wp._upper, 0, 0);
 		curx = cury = 1;
 	}
@@ -611,5 +613,14 @@ zchar GlkInterface::os_read_line(int max, zchar *buf, int timeout, int width, in
 	return ZC_RETURN;
 }
 
+uint GlkInterface::roundDiv(uint x, uint y) {
+	uint quotient = x / y;
+	uint dblremain = (x % y) << 1;
+
+	if ((dblremain > y) || ((dblremain == y) && (quotient & 1)))
+		quotient++;
+	return quotient;
+}
+
 } // End of namespace Frotz
 } // End of namespace Glk
diff --git a/engines/glk/frotz/glk_interface.h b/engines/glk/frotz/glk_interface.h
index 178b533..93d0ecd 100644
--- a/engines/glk/frotz/glk_interface.h
+++ b/engines/glk/frotz/glk_interface.h
@@ -109,6 +109,11 @@ private:
 	 * Add any Sound subfolder or sound zip file for access
 	 */
 	void addSound();
+
+	/**
+	 * Do a rounding division, rounding to even if fraction part is 1/2.
+	 */
+	uint roundDiv(uint x, uint y);
 protected:
 	/**
 	 * Return the length of the character in screen units.
diff --git a/engines/glk/frotz/processor_windows.cpp b/engines/glk/frotz/processor_windows.cpp
index 4045a97..0a50b73 100644
--- a/engines/glk/frotz/processor_windows.cpp
+++ b/engines/glk/frotz/processor_windows.cpp
@@ -79,7 +79,7 @@ void Processor::z_draw_picture() {
 			os_picture_data(mapper[i].pic2, &height2, &width2);
 
 			if (_storyId == ARTHUR && pic == 54)
-			delta = h_screen_width / 160;
+				delta = h_screen_width / 160;
 
 			os_draw_picture(mapper[i].pic1, Point(x + delta, y + height1));
 			os_draw_picture(mapper[i].pic2, Point(x + width1 - width2 - delta, y + height1));
diff --git a/engines/glk/frotz/windows.cpp b/engines/glk/frotz/windows.cpp
index 04f0e26..a9728e1 100644
--- a/engines/glk/frotz/windows.cpp
+++ b/engines/glk/frotz/windows.cpp
@@ -50,14 +50,15 @@ void Windows::setup(bool isVersion6) {
 		_background = g_vm->glk_window_open(0, 0, 0, wintype_Graphics, 0);
 		_background->setBackgroundColor(0xffffff);
 
+		MonoFontInfo &fi = g_vm->_conf->_monoInfo;
 		_lower = g_vm->glk_window_open(g_vm->glk_window_get_root(),
 			winmethod_Arbitrary | winmethod_Fixed, 0, wintype_TextBuffer, 0);
 		_upper = g_vm->glk_window_open(g_vm->glk_window_get_root(),
 			winmethod_Arbitrary | winmethod_Fixed, 0, wintype_TextGrid, 0);
-		_upper.setPosition(Point(0, 0));
-		_upper.setSize(Point(320, 8));
-		_lower.setPosition(Point(0, 8));
-		_lower.setSize(Point(320, 200 - 8));
+		_upper.setPosition(Point(1, 1));
+		_upper.setSize(Point(g_system->getWidth() / fi._cellW, 1));
+		_lower.setPosition(Point(1, 2));
+		_lower.setSize(Point(g_system->getWidth() / fi._cellW, g_system->getHeight() / fi._cellH - 1));
 
 	} else {
 		_lower = g_vm->glk_window_open(0, 0, 0, wintype_TextBuffer, 0);





More information about the Scummvm-git-logs mailing list